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 };
118 default: str =
"unknown";
break;
121 snprintf(timebuf,
sizeof(timebuf),
"nopts");
123 snprintf(timebuf,
sizeof(timebuf),
"%"PRId64, time);
130 memcpy(content, &buf[4], 4);
132 snprintf(content,
sizeof(content),
"-");
133 printf(
"write_data len %d, time %s, type %s atom %s\n", size, timebuf, str, content);
145 out = fopen(buf,
"wb");
176 #define check(value, ...) check_func(value, __LINE__, __VA_ARGS__) 178 static void init_fps(
int bf,
int audio_preroll,
int fps)
242 static void init(
int bf,
int audio_preroll)
249 int end_frames =
frames + n;
278 if (((
frames + 1) % gop_size) == 0) {
305 pkt.
pts += (1LL<<32);
306 pkt.
dts += (1LL<<32);
355 printf(
"movenc-test [-w]\n" 356 "-w write output into files\n");
359 int main(
int argc,
char **argv)
368 c =
getopt(argc, argv,
"wh");
390 av_dict_set(&opts,
"movflags",
"frag_keyframe", 0);
399 av_dict_set(&opts,
"movflags",
"frag_keyframe", 0);
411 av_dict_set(&opts,
"movflags",
"frag_keyframe", 0);
421 av_dict_set(&opts,
"movflags",
"frag_keyframe", 0);
431 av_dict_set(&opts,
"movflags",
"frag_keyframe+empty_moov", 0);
443 av_dict_set(&opts,
"movflags",
"frag_keyframe+empty_moov", 0);
454 init_out(
"empty-moov-no-elst-no-adjust");
455 av_dict_set(&opts,
"movflags",
"frag_keyframe+empty_moov", 0);
468 av_dict_set(&opts,
"movflags",
"frag_keyframe+delay_moov", 0);
478 av_dict_set(&opts,
"movflags",
"frag_keyframe+delay_moov", 0);
487 av_dict_set(&opts,
"movflags",
"frag_keyframe+delay_moov", 0);
501 init_out(
"delay-moov-empty-track-flush");
502 av_dict_set(&opts,
"movflags",
"frag_custom+delay_moov", 0);
520 av_dict_set(&opts,
"movflags",
"frag_keyframe+empty_moov", 0);
529 empty_moov_pos = prev_pos =
out_size;
543 av_dict_set(&opts,
"movflags",
"frag_custom+delay_moov", 0);
546 check(
out_size == 0,
"Output written during init with delay_moov");
553 check(
out_size == empty_moov_pos,
"Manually flushed content differs from automatically flushed, %d vs %d",
out_size, empty_moov_pos);
557 check(!memcmp(
hash, content,
HASH_SIZE),
"delay_moov content differs from empty_moov");
564 av_dict_set(&opts,
"movflags",
"frag_custom+empty_moov+dash", 0);
577 av_dict_set(&opts,
"movflags",
"frag_custom+empty_moov+dash+frag_discont", 0);
583 init_out(
"empty-moov-second-frag-discont");
592 av_dict_set(&opts,
"movflags",
"frag_custom+delay_moov+dash+frag_discont", 0);
598 init_out(
"delay-moov-second-frag-discont");
608 av_dict_set(&opts,
"movflags",
"frag_custom+delay_moov+dash", 0);
616 init_out(
"delay-moov-elst-second-frag");
623 av_dict_set(&opts,
"movflags",
"frag_custom+delay_moov+dash+frag_discont", 0);
628 init_out(
"delay-moov-elst-init-discont");
632 init_out(
"delay-moov-elst-second-frag-discont");
641 av_dict_set(&opts,
"movflags",
"frag_custom+delay_moov+dash", 0);
644 init_out(
"delay-moov-elst-signal-init");
649 init_out(
"delay-moov-elst-signal-second-frag");
656 av_dict_set(&opts,
"movflags",
"frag_custom+delay_moov+dash+frag_discont", 0);
662 init_out(
"delay-moov-elst-signal-init-discont");
666 init_out(
"delay-moov-elst-signal-second-frag-discont");
674 av_dict_set(&opts,
"movflags",
"frag_custom+delay_moov+dash+frag_discont", 0);
680 init_out(
"delay-moov-elst-signal-init-discont-largets");
683 init_out(
"delay-moov-elst-signal-second-frag-discont-largets");
701 av_dict_set(&opts,
"movflags",
"frag_keyframe+delay_moov+dash", 0);
720 av_dict_set(&opts,
"movflags",
"frag_keyframe+delay_moov+dash", 0);
736 av_dict_set(&opts,
"movflags",
"frag_keyframe+delay_moov", 0);
748 init_out(
"vfr-noduration-interleave");
749 av_dict_set(&opts,
"movflags",
"frag_keyframe+delay_moov", 0);
771 init_out(
"delay-moov-elst-neg-cts");
772 av_dict_set(&opts,
"movflags",
"frag_keyframe+delay_moov+negative_cts_offsets", 0);
782 av_dict_set(&opts,
"movflags",
"frag_keyframe+empty_moov+negative_cts_offsets", 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.
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
GLsizei GLboolean const GLfloat * value
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]
#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.
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.
AVIODataMarkerType
Different data types that can be returned via the AVIO write_data_type callback.
static void mux_gops(int n)
ff_const59 struct AVOutputFormat * oformat
The output container format.
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
ff_const59 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...
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(* 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.
void avio_context_free(AVIOContext **s)
Free the supplied IO context and everything associated with it.
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.
printf("static const uint8_t my_array[100] = {\n")
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
Codec parameters associated with this stream.
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.
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.