40 0x01, 0x4d, 0x40, 0x1e, 0xff, 0xe1, 0x00, 0x02, 0x67, 0x4d, 0x01, 0x00, 0x02, 0x68, 0xef
103 fwrite(buf, 1, size,
out);
110 char timebuf[30], content[5] = { 0 };
120 snprintf(timebuf,
sizeof(timebuf),
"nopts");
122 snprintf(timebuf,
sizeof(timebuf),
"%"PRId64, time);
129 memcpy(content, &buf[4], 4);
131 snprintf(content,
sizeof(content),
"-");
132 printf(
"write_data len %d, time %s, type %s atom %s\n", size, timebuf, str, content);
144 out = fopen(buf,
"wb");
156 printf(
"%02x",
hash[i]);
168 printf(
"%d: ", line);
175 #define check(value, ...) check_func(value, __LINE__, __VA_ARGS__)
177 static void init_fps(
int bf,
int audio_preroll,
int fps)
241 static void init(
int bf,
int audio_preroll)
277 if (((
frames + 1) % gop_size) == 0) {
304 pkt.
pts += (1LL<<32);
305 pkt.
dts += (1LL<<32);
354 printf(
"movenc-test [-w]\n"
355 "-w write output into files\n");
358 int main(
int argc,
char **argv)
367 c =
getopt(argc, argv,
"wh");
391 av_dict_set(&opts,
"movflags",
"frag_keyframe", 0);
400 av_dict_set(&opts,
"movflags",
"frag_keyframe", 0);
412 av_dict_set(&opts,
"movflags",
"frag_keyframe", 0);
422 av_dict_set(&opts,
"movflags",
"frag_keyframe", 0);
432 av_dict_set(&opts,
"movflags",
"frag_keyframe+empty_moov", 0);
444 av_dict_set(&opts,
"movflags",
"frag_keyframe+empty_moov", 0);
455 init_out(
"empty-moov-no-elst-no-adjust");
456 av_dict_set(&opts,
"movflags",
"frag_keyframe+empty_moov", 0);
469 av_dict_set(&opts,
"movflags",
"frag_keyframe+delay_moov", 0);
479 av_dict_set(&opts,
"movflags",
"frag_keyframe+delay_moov", 0);
488 av_dict_set(&opts,
"movflags",
"frag_keyframe+delay_moov", 0);
502 init_out(
"delay-moov-empty-track-flush");
503 av_dict_set(&opts,
"movflags",
"frag_custom+delay_moov", 0);
521 av_dict_set(&opts,
"movflags",
"frag_keyframe+empty_moov", 0);
530 empty_moov_pos = prev_pos =
out_size;
544 av_dict_set(&opts,
"movflags",
"frag_custom+delay_moov", 0);
547 check(
out_size == 0,
"Output written during init with delay_moov");
554 check(
out_size == empty_moov_pos,
"Manually flushed content differs from automatically flushed, %d vs %d",
out_size, empty_moov_pos);
558 check(!memcmp(
hash, content,
HASH_SIZE),
"delay_moov content differs from empty_moov");
565 av_dict_set(&opts,
"movflags",
"frag_custom+empty_moov+dash", 0);
578 av_dict_set(&opts,
"movflags",
"frag_custom+empty_moov+dash+frag_discont", 0);
584 init_out(
"empty-moov-second-frag-discont");
593 av_dict_set(&opts,
"movflags",
"frag_custom+delay_moov+dash+frag_discont", 0);
599 init_out(
"delay-moov-second-frag-discont");
609 av_dict_set(&opts,
"movflags",
"frag_custom+delay_moov+dash", 0);
617 init_out(
"delay-moov-elst-second-frag");
624 av_dict_set(&opts,
"movflags",
"frag_custom+delay_moov+dash+frag_discont", 0);
629 init_out(
"delay-moov-elst-init-discont");
633 init_out(
"delay-moov-elst-second-frag-discont");
642 av_dict_set(&opts,
"movflags",
"frag_custom+delay_moov+dash", 0);
645 init_out(
"delay-moov-elst-signal-init");
650 init_out(
"delay-moov-elst-signal-second-frag");
657 av_dict_set(&opts,
"movflags",
"frag_custom+delay_moov+dash+frag_discont", 0);
663 init_out(
"delay-moov-elst-signal-init-discont");
667 init_out(
"delay-moov-elst-signal-second-frag-discont");
675 av_dict_set(&opts,
"movflags",
"frag_custom+delay_moov+dash+frag_discont", 0);
681 init_out(
"delay-moov-elst-signal-init-discont-largets");
684 init_out(
"delay-moov-elst-signal-second-frag-discont-largets");
702 av_dict_set(&opts,
"movflags",
"frag_keyframe+delay_moov+dash", 0);
721 av_dict_set(&opts,
"movflags",
"frag_keyframe+delay_moov+dash", 0);
737 av_dict_set(&opts,
"movflags",
"frag_keyframe+delay_moov", 0);
749 init_out(
"vfr-noduration-interleave");
750 av_dict_set(&opts,
"movflags",
"frag_keyframe+delay_moov", 0);
int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt)
Write a packet to an output media file ensuring correct interleaving.
static const uint8_t h264_extradata[]
int av_write_frame(AVFormatContext *s, AVPacket *pkt)
Write a packet to an output media file.
#define AV_LOG_WARNING
Something somehow does not look correct.
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
static void count_warnings(void *avcl, int level, const char *fmt, va_list vl)
#define AVIO_FLAG_WRITE
write-only
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
static void mux_frames(int n, int c)
enum AVPictureType last_picture
static int io_write_data_type(void *opaque, uint8_t *buf, int size, enum AVIODataMarkerType type, int64_t time)
void av_md5_update(AVMD5 *ctx, const uint8_t *src, int len)
Update hash value.
Trailer data, which doesn't contain actual content, but only for finalizing the output file...
struct AVMD5 * av_md5_alloc(void)
Allocate an AVMD5 context.
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file.
A point in the output bytestream where a demuxer can start parsing (for non self synchronizing bytest...
AVFormatContext * avformat_alloc_context(void)
Allocate an AVFormatContext.
int flags
Flags modifying the (de)muxer behaviour.
static void reset_count_warnings(void)
static const uint8_t header[24]
struct AVOutputFormat * oformat
The output container format.
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
AVIOContext * avio_alloc_context(unsigned char *buffer, int buffer_size, int write_flag, void *opaque, int(*read_packet)(void *opaque, uint8_t *buf, int buf_size), int(*write_packet)(void *opaque, uint8_t *buf, int buf_size), int64_t(*seek)(void *opaque, int64_t offset, int whence))
Allocate and initialize an AVIOContext for buffered I/O.
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values. ...
enum AVMediaType codec_type
General type of the encoded data.
void av_log_default_callback(void *ptr, int level, const char *fmt, va_list vl)
Default logging callback.
int flags
A combination of AV_PKT_FLAG values.
int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b)
Compare two timestamps each in its own time base.
int extradata_size
Size of the extradata content in bytes.
int(* write_data_type)(void *opaque, uint8_t *buf, int buf_size, enum AVIODataMarkerType type, int64_t time)
A callback that is used instead of write_packet.
static void init_fps(int bf, int audio_preroll, int fps)
This is any, unlabelled data.
av_warn_unused_result int avformat_write_header(AVFormatContext *s, AVDictionary **options)
Allocate the stream private data and write the stream header to an output media file.
void av_log_set_callback(void(*callback)(void *, int, const char *, va_list))
Set the logging callback.
GLsizei GLboolean const GLfloat * value
AVIODataMarkerType
Different data types that can be returned via the AVIO write_data_type callback.
AVOutputFormat * av_guess_format(const char *short_name, const char *filename, const char *mime_type)
Return the output format in the list of registered output formats which best matches the provided par...
static void mux_gops(int n)
AVIOContext * pb
I/O context.
static void close_out(void)
static int getopt(int argc, char *argv[], char *opts)
void av_md5_init(AVMD5 *ctx)
Initialize MD5 hashing.
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
static const char * format
void avformat_free_context(AVFormatContext *s)
Free an AVFormatContext and all its streams.
void av_md5_final(AVMD5 *ctx, uint8_t *dst)
Finish hashing and output digest value.
static void init_out(const char *name)
static void init_count_warnings(void)
int sample_rate
Audio only.
int main(int argc, char **argv)
static void init(int bf, int audio_preroll)
void av_init_packet(AVPacket *pkt)
Initialize optional fields of a packet with default values.
static void signal_init_ts(void)
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
static void skip_gops(int n)
A point in the output bytestream where a decoder can start decoding (i.e.
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent.
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed...
int av_write_trailer(AVFormatContext *s)
Write the stream trailer to an output media file and free the file private data.
static int io_write(void *opaque, uint8_t *buf, int size)
Public header for MD5 hash function implementation.
AVCodecParameters * codecpar
static const uint8_t aac_extradata[]
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
This structure stores compressed data.
void av_register_all(void)
Initialize libavformat and register all the muxers, demuxers and protocols.
static void check_func(int value, int line, const char *msg,...)
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
Header data; this needs to be present for the stream to be decodeable.
#define AV_NOPTS_VALUE
Undefined timestamp value.