History

Merge commit '0c1959b056f6ccaa2eee2c824352ba93c8e36d52'

* commit '0c1959b056f6ccaa2eee2c824352ba93c8e36d52': lavf: add AVFMT_FLAG_BITEXACT. Conflicts: doc/APIchanges libavformat/avformat.h libavformat/flacenc.c libavformat/movenc.c libavformat/oggenc.c libavformat/options_table.h libavformat/version.h tests/fate/video.mak

Michael Niedermayer committed 12 years ago

Commit eacf7d62 parents beeb755 0c1959b15 files · +41 −21Browse files

Unified · Split

15 files
  1. doc/APIchanges +4 −0
  2. libavformat/avformat.h +7 −0
  3. libavformat/flacenc.c +1 −1
  4. libavformat/matroskaenc.c +1 −1
  5. libavformat/movenc.c +1 −1
  6. libavformat/mux.c +6 −1
  7. libavformat/mxfenc.c +2 −2
  8. libavformat/oggenc.c +5 −5
  9. libavformat/options_table.h +1 −0
  10. libavformat/version.h +5 −2
  11. tests/fate-run.sh +1 −1
  12. tests/fate/filter-audio.mak +2 −2
  13. tests/fate/video.mak +2 −2
  14. tests/fate/wavpack.mak +2 −2
  15. tests/regression-funcs.sh +1 −1
doc/APIchanges+4−0
@@ -15,6 +15,10 @@ libavutil: 2012-10-22 · 14 unmodified lines
1515
1616 API changes, most recent first:
1717
18+2014-05-xx - xxxxxxx - lavf 55.17.0 - avformat.h
19+ Add AVMFT_FLAG_BITEXACT flag. Muxers now use it instead of checking
20+ CODEC_FLAG_BITEXACT on the first stream.
21+
1822 2014-05-15 - xxxxxxx - lswr 0.19.100 - swresample.h
1923 Add swr_close()
2024
libavformat/avformat.h+7−0
@@ -1252,6 +1252,13 @@ typedef struct AVFormatContext { · 1251 unmodified lines
12521252 #define AVFMT_FLAG_CUSTOM_IO 0x0080 ///< The caller has supplied a custom AVIOContext, don't avio_close() it.
12531253 #define AVFMT_FLAG_DISCARD_CORRUPT 0x0100 ///< Discard frames marked corrupted
12541254 #define AVFMT_FLAG_FLUSH_PACKETS 0x0200 ///< Flush the AVIOContext every packet.
1255+/**
1256+ * When muxing, try to avoid writing any random/volatile data to the output.
1257+ * This includes any random IDs, real-time timestamps/dates, muxer version, etc.
1258+ *
1259+ * This flag is mainly intended for testing.
1260+ */
1261+#define AVFMT_FLAG_BITEXACT 0x0400
12551262 #define AVFMT_FLAG_MP4A_LATM 0x8000 ///< Enable RTP MP4A-LATM payload
12561263 #define AVFMT_FLAG_SORT_DTS 0x10000 ///< try to interleave outputted packets by dts (using this flag can slow demuxing down)
12571264 #define AVFMT_FLAG_PRIV_OPT 0x20000 ///< Enable use of private options by delaying codec open (this could be made default once all code is converted)
libavformat/flacenc.c+1−1
@@ -98,7 +98,7 @@ static int flac_write_header(struct AVFormatContext *s) · 97 unmodified lines
9898 return ret;
9999
100100 ret = flac_write_block_comment(s->pb, &s->metadata, !padding,
101− codec->flags & CODEC_FLAG_BITEXACT);
101+ s->flags & AVFMT_FLAG_BITEXACT);
102102 if (ret)
103103 return ret;
104104
libavformat/matroskaenc.c+1−1
@@ -1160,7 +1160,7 @@ static int mkv_write_header(AVFormatContext *s) · 1159 unmodified lines
11601160 put_ebml_uint(pb, MATROSKA_ID_TIMECODESCALE, 1000000);
11611161 if ((tag = av_dict_get(s->metadata, "title", NULL, 0)))
11621162 put_ebml_string(pb, MATROSKA_ID_TITLE, tag->value);
1163− if (!(s->streams[0]->codec->flags & CODEC_FLAG_BITEXACT)) {
1163+ if (!(s->flags & AVFMT_FLAG_BITEXACT)) {
11641164 uint32_t segment_uid[4];
11651165 AVLFG lfg;
11661166
libavformat/movenc.c+1−1
@@ -3872,7 +3872,7 @@ static int mov_write_header(AVFormatContext *s) · 3871 unmodified lines
38723872 }
38733873
38743874 for (i = 0; i < s->nb_streams; i++)
3875− if (s->streams[i]->codec->flags & CODEC_FLAG_BITEXACT)
3875+ if (s->flags & AVFMT_FLAG_BITEXACT)
38763876 mov->exact = 1;
38773877
38783878 /* Set the FRAGMENT flag if any of the fragmentation methods are
libavformat/mux.c+6−1
@@ -235,6 +235,11 @@ static int init_muxer(AVFormatContext *s, AVDictionary **options) · 234 unmodified lines
235235 (ret = av_opt_set_dict2(s->priv_data, &tmp, AV_OPT_SEARCH_CHILDREN)) < 0)
236236 goto fail;
237237
238+#if FF_API_LAVF_BITEXACT
239+ if (s->nb_streams && s->streams[0]->codec->flags & CODEC_FLAG_BITEXACT)
240+ s->flags |= AVFMT_FLAG_BITEXACT;
241+#endif
242+
238243 // some sanity checks
239244 if (s->nb_streams == 0 && !(of->flags & AVFMT_NOSTREAMS)) {
240245 av_log(s, AV_LOG_ERROR, "No streams to mux were specified\n");
@@ -340,7 +345,7 @@ static int init_muxer(AVFormatContext *s, AVDictionary **options) · 99 unmodified lines
340345 }
341346
342347 /* set muxer identification string */
343− if (s->nb_streams && !(s->streams[0]->codec->flags & CODEC_FLAG_BITEXACT)) {
348+ if (!(s->flags & AVFMT_FLAG_BITEXACT)) {
344349 av_dict_set(&s->metadata, "encoder", LIBAVFORMAT_IDENT, 0);
345350 } else {
346351 av_dict_set(&s->metadata, "encoder", NULL, 0);
libavformat/mxfenc.c+2−2
@@ -618,7 +618,7 @@ static void mxf_write_identification(AVFormatContext *s) · 617 unmodified lines
618618 mxf_write_metadata_key(pb, 0x013000);
619619 PRINT_KEY(s, "identification key", pb->buf_ptr - 16);
620620
621− version = s->streams[0]->codec->flags & CODEC_FLAG_BITEXACT ?
621+ version = s->flags & AVFMT_FLAG_BITEXACT ?
622622 "0.0.0" : AV_STRINGIFY(LIBAVFORMAT_VERSION);
623623 length = 84 + (strlen(company)+strlen(product)+strlen(version))*2; // utf-16
624624 klv_encode_ber_length(pb, length);
@@ -1777,7 +1777,7 @@ static int mxf_write_header(AVFormatContext *s) · 1152 unmodified lines
17771777 mxf->essence_container_count = 1;
17781778 }
17791779
1780− if (!(s->streams[0]->codec->flags & CODEC_FLAG_BITEXACT))
1780+ if (!(s->flags & AVFMT_FLAG_BITEXACT))
17811781 mxf_gen_umid(s);
17821782
17831783 for (i = 0; i < s->nb_streams; i++) {
libavformat/oggenc.c+5−5
@@ -432,7 +432,7 @@ static int ogg_write_header(AVFormatContext *s) · 431 unmodified lines
432432
433433 oggstream->page.stream_index = i;
434434
435− if (!(st->codec->flags & CODEC_FLAG_BITEXACT))
435+ if (!(s->flags & AVFMT_FLAG_BITEXACT))
436436 do {
437437 serial_num = av_get_random_seed();
438438 for (j = 0; j < i; j++) {
@@ -448,7 +448,7 @@ static int ogg_write_header(AVFormatContext *s) · 9 unmodified lines
448448 st->priv_data = oggstream;
449449 if (st->codec->codec_id == AV_CODEC_ID_FLAC) {
450450 int err = ogg_build_flac_headers(st->codec, oggstream,
451− st->codec->flags & CODEC_FLAG_BITEXACT,
451+ s->flags & AVFMT_FLAG_BITEXACT,
452452 &st->metadata);
453453 if (err) {
454454 av_log(s, AV_LOG_ERROR, "Error writing FLAC headers\n");
@@ -457,7 +457,7 @@ static int ogg_write_header(AVFormatContext *s) · 2 unmodified lines
457457 }
458458 } else if (st->codec->codec_id == AV_CODEC_ID_SPEEX) {
459459 int err = ogg_build_speex_headers(st->codec, oggstream,
460− st->codec->flags & CODEC_FLAG_BITEXACT,
460+ s->flags & AVFMT_FLAG_BITEXACT,
461461 &st->metadata);
462462 if (err) {
463463 av_log(s, AV_LOG_ERROR, "Error writing Speex headers\n");
@@ -466,7 +466,7 @@ static int ogg_write_header(AVFormatContext *s) · 2 unmodified lines
466466 }
467467 } else if (st->codec->codec_id == AV_CODEC_ID_OPUS) {
468468 int err = ogg_build_opus_headers(st->codec, oggstream,
469− st->codec->flags & CODEC_FLAG_BITEXACT,
469+ s->flags & AVFMT_FLAG_BITEXACT,
470470 &st->metadata);
471471 if (err) {
472472 av_log(s, AV_LOG_ERROR, "Error writing Opus headers\n");
@@ -487,7 +487,7 @@ static int ogg_write_header(AVFormatContext *s) · 14 unmodified lines
487487 return -1;
488488 }
489489
490− p = ogg_write_vorbiscomment(7, st->codec->flags & CODEC_FLAG_BITEXACT,
490+ p = ogg_write_vorbiscomment(7, s->flags & AVFMT_FLAG_BITEXACT,
491491 &oggstream->header_len[1], &st->metadata,
492492 framing_bit);
493493 oggstream->header[1] = p;
libavformat/options_table.h+1−0
@@ -50,6 +50,7 @@ static const AVOption avformat_options[] = { · 49 unmodified lines
5050 {"latm", "enable RTP MP4A-LATM payload", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_MP4A_LATM }, INT_MIN, INT_MAX, E, "fflags"},
5151 {"nobuffer", "reduce the latency introduced by optional buffering", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_NOBUFFER }, 0, INT_MAX, D, "fflags"},
5252 {"seek2any", "allow seeking to non-keyframes on demuxer level when supported", OFFSET(seek2any), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 1, D},
53+{"bitexact", "do not write random/volatile data", 0, AV_OPT_TYPE_CONST, { .i64 = AVFMT_FLAG_BITEXACT }, 0, 0, E, "fflags" },
5354 {"analyzeduration", "specify how many microseconds are analyzed to probe the input", OFFSET(max_analyze_duration), AV_OPT_TYPE_INT, {.i64 = 5*AV_TIME_BASE }, 0, INT_MAX, D},
5455 {"cryptokey", "decryption key", OFFSET(key), AV_OPT_TYPE_BINARY, {.dbl = 0}, 0, 0, D},
5556 {"indexmem", "max memory used for timestamp index (per stream)", OFFSET(max_index_size), AV_OPT_TYPE_INT, {.i64 = 1<<20 }, 0, INT_MAX, D},
libavformat/version.h+5−2
@@ -30,8 +30,8 @@ · 29 unmodified lines
3030 #include "libavutil/version.h"
3131
3232 #define LIBAVFORMAT_VERSION_MAJOR 55
33−#define LIBAVFORMAT_VERSION_MINOR 37
34−#define LIBAVFORMAT_VERSION_MICRO 102
33+#define LIBAVFORMAT_VERSION_MINOR 38
34+#define LIBAVFORMAT_VERSION_MICRO 100
3535
3636 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
3737 LIBAVFORMAT_VERSION_MINOR, \
@@ -51,6 +51,9 @@ · 13 unmodified lines
5151 #ifndef FF_API_REFERENCE_DTS
5252 #define FF_API_REFERENCE_DTS (LIBAVFORMAT_VERSION_MAJOR < 56)
5353 #endif
54+#ifndef FF_API_LAVF_BITEXACT
55+#define FF_API_LAVF_BITEXACT (LIBAVFORMAT_VERSION_MAJOR < 56)
56+#endif
5457
5558 #ifndef FF_API_ALLOC_OUTPUT_CONTEXT
5659 #define FF_API_ALLOC_OUTPUT_CONTEXT (LIBAVFORMAT_VERSION_MAJOR < 56)
tests/fate-run.sh+1−1
@@ -127,7 +127,7 @@ enc_dec_pcm(){ · 126 unmodified lines
127127 ffmpeg -flags +bitexact -i ${encfile} -c:a pcm_${pcm_fmt} -f ${dec_fmt} -
128128 }
129129
130−FLAGS="-flags +bitexact -sws_flags +accurate_rnd+bitexact"
130+FLAGS="-flags +bitexact -sws_flags +accurate_rnd+bitexact -fflags +bitexact"
131131 DEC_OPTS="-threads $threads -idct simple $FLAGS"
132132 ENC_OPTS="-threads 1 -idct simple -dct fastint"
133133
tests/fate/filter-audio.mak+2−2
@@ -56,7 +56,7 @@ FATE_FILTER_CHANNELMAP += fate-filter-channelmap-one-int · 55 unmodified lines
5656 fate-filter-channelmap-one-int: tests/data/filtergraphs/channelmap_one_int
5757 fate-filter-channelmap-one-int: SRC = $(TARGET_PATH)/tests/data/asynth-44100-6.wav
5858 fate-filter-channelmap-one-int: tests/data/asynth-44100-6.wav
59−fate-filter-channelmap-one-int: CMD = md5 -i $(SRC) -filter_complex_script $(TARGET_PATH)/tests/data/filtergraphs/channelmap_one_int -f wav -flags +bitexact
59+fate-filter-channelmap-one-int: CMD = md5 -i $(SRC) -filter_complex_script $(TARGET_PATH)/tests/data/filtergraphs/channelmap_one_int -f wav -fflags +bitexact
6060 fate-filter-channelmap-one-int: CMP = oneline
6161 fate-filter-channelmap-one-int: REF = 428b8f9fac6d57147069b97335019ef5
6262
@@ -64,7 +64,7 @@ FATE_FILTER_CHANNELMAP += fate-filter-channelmap-one-str · 1 unmodified line
6464 fate-filter-channelmap-one-str: tests/data/filtergraphs/channelmap_one_str
6565 fate-filter-channelmap-one-str: SRC = $(TARGET_PATH)/tests/data/asynth-44100-2.wav
6666 fate-filter-channelmap-one-str: tests/data/asynth-44100-2.wav
67−fate-filter-channelmap-one-str: CMD = md5 -i $(SRC) -filter_complex_script $(TARGET_PATH)/tests/data/filtergraphs/channelmap_one_str -f wav -flags +bitexact
67+fate-filter-channelmap-one-str: CMD = md5 -i $(SRC) -filter_complex_script $(TARGET_PATH)/tests/data/filtergraphs/channelmap_one_str -f wav -fflags +bitexact
6868 fate-filter-channelmap-one-str: CMP = oneline
6969 fate-filter-channelmap-one-str: REF = e788890db6a11c2fb29d7c4229072d49
7070
tests/fate/video.mak+2−2
@@ -181,7 +181,7 @@ FATE_VIDEO-$(call DEMDEC, MSNWC_TCP, MIMIC) += fate-mimic · 180 unmodified lines
181181 fate-mimic: CMD = framecrc -idct simple -i $(TARGET_SAMPLES)/mimic/mimic2-womanloveffmpeg.cam
182182
183183 FATE_VIDEO-$(call DEMDEC, MOV, MJPEGB) += fate-mjpegb
184−fate-mjpegb: CMD = framecrc -idct simple -flags +bitexact -i $(TARGET_SAMPLES)/mjpegb/mjpegb_part.mov -an
184+fate-mjpegb: CMD = framecrc -idct simple -fflags +bitexact -i $(TARGET_SAMPLES)/mjpegb/mjpegb_part.mov -an
185185
186186 FATE_VIDEO-$(call DEMDEC, MVI, MOTIONPIXELS) += fate-motionpixels
187187 fate-motionpixels: CMD = framecrc -i $(TARGET_SAMPLES)/motion-pixels/INTRO-partial.MVI -an -pix_fmt rgb24 -vframes 111
@@ -270,7 +270,7 @@ fate-v410dec: CMD = framecrc -i $(TARGET_SAMPLES)/v410/lenav410.mov -pix_fmt yuv · 82 unmodified lines
270270
271271 FATE_VIDEO-$(call ENCDEC, V410 PGMYUV, AVI IMAGE2) += fate-v410enc
272272 fate-v410enc: $(VREF)
273−fate-v410enc: CMD = md5 -f image2 -vcodec pgmyuv -i $(TARGET_PATH)/tests/vsynth1/%02d.pgm -flags +bitexact -vcodec v410 -f avi
273+fate-v410enc: CMD = md5 -f image2 -vcodec pgmyuv -i $(TARGET_PATH)/tests/vsynth1/%02d.pgm -fflags +bitexact -vcodec v410 -f avi
274274
275275 FATE_VIDEO-$(call DEMDEC, SIFF, VB) += fate-vb
276276 fate-vb: CMD = framecrc -i $(TARGET_SAMPLES)/SIFF/INTRO_B.VB -t 3 -pix_fmt rgb24 -an
tests/fate/wavpack.mak+2−2
@@ -89,12 +89,12 @@ FATE_WAVPACK-$(call DEMDEC, MATROSKA, WAVPACK) += fate-wavpack-matroskamode · 88 unmodified lines
8989 fate-wavpack-matroskamode: CMD = md5 -i $(TARGET_SAMPLES)/wavpack/special/matroska_mode.mka -f s16le
9090
9191 FATE_WAVPACK-$(call DEMMUX, WV, MATROSKA) += fate-wavpack-matroska_mux-mono
92−fate-wavpack-matroska_mux-mono: CMD = md5 -i $(TARGET_SAMPLES)/wavpack/num_channels/mono_16bit_int.wv -c copy -flags +bitexact -f matroska
92+fate-wavpack-matroska_mux-mono: CMD = md5 -i $(TARGET_SAMPLES)/wavpack/num_channels/mono_16bit_int.wv -c copy -fflags +bitexact -f matroska
9393 fate-wavpack-matroska_mux-mono: CMP = oneline
9494 fate-wavpack-matroska_mux-mono: REF = a2987e2e51e01a35e47e7da13eb47a35
9595
9696 FATE_WAVPACK-$(call DEMMUX, WV, MATROSKA) += fate-wavpack-matroska_mux-61
97−fate-wavpack-matroska_mux-61: CMD = md5 -i $(TARGET_SAMPLES)/wavpack/num_channels/eva_2.22_6.1_16bit-partial.wv -c copy -flags +bitexact -f matroska
97+fate-wavpack-matroska_mux-61: CMD = md5 -i $(TARGET_SAMPLES)/wavpack/num_channels/eva_2.22_6.1_16bit-partial.wv -c copy -fflags +bitexact -f matroska
9898 fate-wavpack-matroska_mux-61: CMP = oneline
9999 fate-wavpack-matroska_mux-61: REF = ffba4ddea1ba71f7a5901d9ed1a267be
100100
tests/regression-funcs.sh+1−1
@@ -44,7 +44,7 @@ echov(){ · 43 unmodified lines
4444 . $(dirname $0)/md5.sh
4545
4646 AVCONV_OPTS="-nostats -y -cpuflags $cpuflags"
47−COMMON_OPTS="-flags +bitexact -idct simple -sws_flags +accurate_rnd+bitexact"
47+COMMON_OPTS="-flags +bitexact -idct simple -sws_flags +accurate_rnd+bitexact -fflags +bitexact"
4848 DEC_OPTS="$COMMON_OPTS -threads $threads"
4949 ENC_OPTS="$COMMON_OPTS -threads 1 -dct fastint"
5050

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t