Commit 96e5e6ab authored by Limin Wang's avatar Limin Wang

avformat/mux: Set AV_PKT_FLAG_KEY for is_intra_only packet

The patch will make audio and subtitle packets be marked as AV_PKT_FLAG_KEY.

For audio, it'll caused the audio sample to be sync sample.
To verify ref/fate/movenc results:
1. Get the movenc test data
[lmwang@vpn ffmpeg]$ libavformat/tests/movenc -w && mkdir -p audio_old && mv *.mp4 audio_old_

After applied the patch:
[lmwang@vpn ffmpeg]$ make fate-movenc SAMPLES=../fate-suite
[lmwang@vpn ffmpeg]$ libavformat/tests/movenc -w && mkdir -p audio_key && mv *.mp4 audio_key

2. Get l-smash and build boxdumper
https://github.com/l-smash/l-smash.git

3. dump the box of crc change mp4 and diff -u
[lmwang@vpn ffmpeg]$ ../l-smash/cli/boxdumper --box audio_key/non-empty-moov-no-elst.mp4  > audio_key/non-empty-moov-no-elst.log
[lmwang@vpn ffmpeg]$ ../l-smash/cli/boxdumper --box audio_old/non-empty-moov-no-elst.mp4  > audio_old/non-empty-moov-no-elst.log
[lmwang@vpn ffmpeg]$ diff -u audio_key/non-empty-moov-no-elst.log audio_old/non-empty-moov-no-elst.log
-                default_sample_flags = 0x02000000
-                    independent
-                    sync sample
+                default_sample_flags = 0x01010000
+                    dependent
+                    non-sync sample

4. have checked the change of crc are caused by default_sample_flags
non-empty-moov.mp4, non-empty-moov-elst.mp4,
non-empty-moov-no-elst.mp4, empty-moov.mp4, delay-moov-content.mp4,
empty-moov-second-frag.mp4, empty-moov-second-frag-discont.mp4,
delay-moov-second-frag-discont.mp4, delay-moov-elst-second-frag.mp4
etc

5 For subtitle, it'll effect for tests/ref/fate/binsub-movtextenc and
tests/ref/fate/sub2video, that's expecting result for the subtitle is
marked as keyframe. Below is the checking result of binsub-movtextenc:

[lmwang@vpn ffmpeg]$ ./ffmpeg -i ../fate-suite/sub/MovText_capability_tester.mp4 -map 0 -scodec mov_text -f mp4 -flags +bitexact -fflags +bitexact -movflags frag_keyframe+empty_moov audio_key/binsub-movtextenc.mp4
[lmwang@vpn ffmpeg]$ ./ffmpeg -i ../fate-suite/sub/MovText_capability_tester.mp4 -map 0 -scodec mov_text -f mp4 -flags +bitexact -fflags +bitexact -movflags frag_keyframe+empty_moov audio_old/binsub-movtextenc.mp4
[lmwang@vpn ffmpeg]$../l-smash/cli/boxdumper audio_key/binsub-movtextenc.mp4  > audio_key/binsub-movtextenc.log
[lmwang@vpn ffmpeg]$../l-smash/cli/boxdumper audio_old/binsub-movtextenc.mp4  > audio_old/binsub-movtextenc.log
[lmwang@vpn ffmpeg]$ diff -u audio_key/binsub-movtextenc.log audio_old/binsub-movtextenc.log
.... // the key difference is the flag for sync sample
-                flags = 0x000701
+                flags = 0x000301
                     data-offset-present
                     sample-duration-present
                     sample-size-present
-                    sample-flags-present
                 sample_count = 6
-                data_offset = 188
+                data_offset = 164
                 sample[0]
                     sample_duration = 1570000
                     sample_size = 21
-                    sample_flags = 0x02000000
-                        independent
-                        sync sample
-                        degradation_priority = 0
                 sample[1]
                     sample_duration = 510000
                     sample_size = 2
-                    sample_flags = 0x01010000
-                        dependent
-                        non-sync sample
-                        degradation_priority = 0
                 sample[2]
                     sample_duration = 1690000
                     sample_size = 9
-                    sample_flags = 0x02000000
-                        independent
-                        sync sample
-                        degradation_priority = 0
Suggested-by: 's avatarAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
Suggested-by: 's avatarNicolas George <george@nsup.org>
Signed-off-by: 's avatarLimin Wang <lance.lmwang@gmail.com>
parent 74aa3321
......@@ -188,6 +188,8 @@ struct AVStreamInternal {
*/
int need_context_update;
int is_intra_only;
FFFrac *priv_pts;
};
......
......@@ -344,6 +344,8 @@ FF_ENABLE_DEPRECATION_WARNINGS
if (desc && desc->props & AV_CODEC_PROP_REORDER)
st->internal->reorder = 1;
st->internal->is_intra_only = ff_is_intra_only(par->codec_id);
if (of->codec_tag) {
if ( par->codec_tag
&& par->codec_id == AV_CODEC_ID_RAWVIDEO
......@@ -760,6 +762,7 @@ static int check_packet(AVFormatContext *s, AVPacket *pkt)
static int prepare_input_packet(AVFormatContext *s, AVPacket *pkt)
{
int ret;
AVStream *st = s->streams[pkt->stream_index];
ret = check_packet(s, pkt);
if (ret < 0)
......@@ -768,7 +771,6 @@ static int prepare_input_packet(AVFormatContext *s, AVPacket *pkt)
#if !FF_API_COMPUTE_PKT_FIELDS2 || !FF_API_LAVF_AVCTX
/* sanitize the timestamps */
if (!(s->oformat->flags & AVFMT_NOTIMESTAMPS)) {
AVStream *st = s->streams[pkt->stream_index];
/* when there is no reordering (so dts is equal to pts), but
* only one of them is set, set the other as well */
......@@ -805,6 +807,9 @@ static int prepare_input_packet(AVFormatContext *s, AVPacket *pkt)
}
}
#endif
/* update flags */
if (st->internal->is_intra_only)
pkt->flags |= AV_PKT_FLAG_KEY;
return 0;
}
......
35adf776cd73e808186ae7124445f4b8
fc6d07679ac1f718aa50de687924cd97
......@@ -2,17 +2,17 @@ write_data len 36, time nopts, type header atom ftyp
write_data len 2389, time nopts, type header atom -
write_data len 788, time 1000000, type sync atom moof
write_data len 110, time nopts, type trailer atom -
66cf48604f039aa9a51711786f5c8778 3323 non-empty-moov
5f401347fc3c771b819e2449d69d4861 3323 non-empty-moov
write_data len 36, time nopts, type header atom ftyp
write_data len 2721, time nopts, type header atom -
write_data len 908, time 966667, type sync atom moof
write_data len 110, time nopts, type trailer atom -
04b2e86f455af94f9258b8d66dbf71f5 3775 non-empty-moov-elst
4267feee527adf8cd4f7b36ac0fc0872 3775 non-empty-moov-elst
write_data len 36, time nopts, type header atom ftyp
write_data len 2629, time nopts, type header atom -
write_data len 908, time 1000000, type sync atom moof
write_data len 110, time nopts, type trailer atom -
e9f6fa032d6d8265d67aef5de81a48bf 3683 non-empty-moov-no-elst
44077b9ad45f3e16fafe4e5ada54e9b0 3683 non-empty-moov-no-elst
write_data len 24, time nopts, type header atom ftyp
write_data len 1171, time nopts, type header atom -
write_data len 728, time 0, type sync atom moof
......@@ -20,35 +20,35 @@ write_data len 828, time nopts, type unknown atom -
write_data len 728, time 999999, type sync atom moof
write_data len 812, time nopts, type unknown atom -
write_data len 148, time nopts, type trailer atom -
da105e0b2c19079519c6eed7d5a1151c 4439 ismv
92ce825ff40505ec8676191705adb7e7 4439 ismv
write_data len 36, time nopts, type header atom ftyp
write_data len 1123, time nopts, type header atom -
write_data len 796, time 0, type sync atom moof
write_data len 788, time 1000000, type sync atom moof
write_data len 148, time nopts, type trailer atom -
e6a4b15443d006efd727a80f6624b7db 2891 empty-moov
08f4b3ad3a3ea224b2ee731476b9056b 2891 empty-moov
write_data len 36, time nopts, type header atom ftyp
write_data len 1123, time nopts, type header atom -
write_data len 1068, time 0, type sync atom moof
write_data len 908, time 1000000, type sync atom moof
write_data len 148, time nopts, type trailer atom -
800f854aff2ac76dfaddebd0562c75b9 3283 empty-moov-no-elst
d7a2dcb43eb0f95f92669f55fc7adeba 3283 empty-moov-no-elst
write_data len 36, time nopts, type header atom ftyp
write_data len 1123, time nopts, type header atom -
write_data len 900, time -33333, type sync atom moof
write_data len 908, time 966667, type sync atom moof
write_data len 148, time nopts, type trailer atom -
eca1a945c9063dab0858af6b85925533 3115 empty-moov-no-elst-no-adjust
ea70ca697306976879be408431c27aee 3115 empty-moov-no-elst-no-adjust
write_data len 1159, time nopts, type header atom ftyp
write_data len 796, time 0, type sync atom moof
write_data len 788, time 1000000, type sync atom moof
write_data len 148, time nopts, type trailer atom -
e6a4b15443d006efd727a80f6624b7db 2891 delay-moov
08f4b3ad3a3ea224b2ee731476b9056b 2891 delay-moov
write_data len 1231, time nopts, type header atom ftyp
write_data len 916, time -33333, type sync atom moof
write_data len 908, time 966667, type sync atom moof
write_data len 148, time nopts, type trailer atom -
c2ecdbc80668fcee73f5a039e2dba579 3203 delay-moov-elst
314cc3b6296f4ee583b328a34be50b2f 3203 delay-moov-elst
write_data len 1195, time nopts, type header atom ftyp
write_data len 836, time 0, type sync atom moof
write_data len 67, time nopts, type trailer atom -
......@@ -63,66 +63,66 @@ write_data len 1123, time nopts, type header atom -
351ae2c8b6d35d98b4848c309cce6704 1159 empty-moov-header
write_data len 796, time 0, type sync atom moof
write_data len 788, time 1000000, type sync atom moof
a0165f4a26a409212b0946e981bdefb9 1584 empty-moov-content
289ee982188d66988a374a462b0b5376 1584 empty-moov-content
write_data len 148, time nopts, type trailer atom -
write_data len 1159, time nopts, type header atom ftyp
351ae2c8b6d35d98b4848c309cce6704 1159 delay-moov-header
write_data len 796, time 0, type sync atom moof
write_data len 788, time 1000000, type sync atom moof
a0165f4a26a409212b0946e981bdefb9 1584 delay-moov-content
289ee982188d66988a374a462b0b5376 1584 delay-moov-content
write_data len 148, time nopts, type trailer atom -
write_data len 28, time nopts, type header atom -
write_data len 1123, time nopts, type header atom -
write_data len 884, time 0, type sync atom sidx
write_data len 876, time 1000000, type sync atom sidx
272a474cfd2a68cc5f05b426b14a2b7d 876 empty-moov-second-frag
c0307f99a2a362205b7e3d65b1066f86 876 empty-moov-second-frag
write_data len 148, time nopts, type trailer atom -
write_data len 28, time nopts, type header atom -
write_data len 1123, time nopts, type header atom -
write_data len 876, time 1000000, type sync atom sidx
272a474cfd2a68cc5f05b426b14a2b7d 876 empty-moov-second-frag-discont
c0307f99a2a362205b7e3d65b1066f86 876 empty-moov-second-frag-discont
write_data len 110, time nopts, type trailer atom -
write_data len 1223, time nopts, type header atom -
write_data len 876, time 1000000, type sync atom sidx
272a474cfd2a68cc5f05b426b14a2b7d 876 delay-moov-second-frag-discont
c0307f99a2a362205b7e3d65b1066f86 876 delay-moov-second-frag-discont
write_data len 110, time nopts, type trailer atom -
write_data len 1223, time nopts, type header atom ftyp
b3811928793ed0749927eb2f7958421c 1223 delay-moov-elst-init
write_data len 988, time -33333, type sync atom sidx
write_data len 996, time 966667, type sync atom sidx
fcae8f40e015b59aabc8d4a99a759ca1 996 delay-moov-elst-second-frag
0df125407c7e81978ce722e0ae4f6f84 996 delay-moov-elst-second-frag
write_data len 148, time nopts, type trailer atom -
write_data len 1223, time nopts, type header atom ftyp
b3811928793ed0749927eb2f7958421c 1223 delay-moov-elst-init-discont
write_data len 996, time 966667, type sync atom sidx
fcae8f40e015b59aabc8d4a99a759ca1 996 delay-moov-elst-second-frag-discont
0df125407c7e81978ce722e0ae4f6f84 996 delay-moov-elst-second-frag-discont
write_data len 110, time nopts, type trailer atom -
write_data len 1223, time nopts, type header atom ftyp
041ac8efc35a0d023c26d05eedb20403 1223 delay-moov-elst-signal-init
write_data len 1004, time -33333, type sync atom sidx
write_data len 996, time 966667, type sync atom sidx
aa5462cc0d2144f72154d9c309edb57d 996 delay-moov-elst-signal-second-frag
5a583d89318827d2569eecbeaa18c238 996 delay-moov-elst-signal-second-frag
write_data len 148, time nopts, type trailer atom -
write_data len 1223, time nopts, type header atom ftyp
041ac8efc35a0d023c26d05eedb20403 1223 delay-moov-elst-signal-init-discont
write_data len 996, time 966667, type sync atom sidx
aa5462cc0d2144f72154d9c309edb57d 996 delay-moov-elst-signal-second-frag-discont
5a583d89318827d2569eecbeaa18c238 996 delay-moov-elst-signal-second-frag-discont
write_data len 110, time nopts, type trailer atom -
write_data len 1247, time nopts, type header atom ftyp
80511a51d1ac9cde62337eed7176ae03 1247 delay-moov-elst-signal-init-discont-largets
write_data len 996, time 279621233333, type sync atom sidx
41cac4c3df656a87bb38363fdcd745e6 996 delay-moov-elst-signal-second-frag-discont-largets
dc695d65e8a0cdafee28acd8a5ccf81a 996 delay-moov-elst-signal-second-frag-discont-largets
write_data len 110, time nopts, type trailer atom -
write_data len 1223, time nopts, type header atom ftyp
write_data len 2572, time -333333, type sync atom sidx
write_data len 996, time 5166667, type sync atom sidx
write_data len 148, time nopts, type trailer atom -
c3eb39921c90724784d1ab84fac58b34 4939 vfr
d37a7eda807912b9ed05ccfe003a9e4f 4939 vfr
write_data len 1223, time nopts, type header atom ftyp
write_data len 2572, time -333333, type sync atom sidx
write_data len 996, time 5166667, type sync atom sidx
write_data len 148, time nopts, type trailer atom -
c3eb39921c90724784d1ab84fac58b34 4939 vfr-noduration
d37a7eda807912b9ed05ccfe003a9e4f 4939 vfr-noduration
write_data len 1231, time nopts, type header atom ftyp
write_data len 1500, time -333333, type sync atom moof
write_data len 1500, time nopts, type unknown atom -
......@@ -131,7 +131,7 @@ write_data len 1500, time 9666667, type sync atom moof
write_data len 1500, time nopts, type unknown atom -
write_data len 1004, time nopts, type unknown atom -
write_data len 148, time nopts, type trailer atom -
5bde1358e246e715b2096daa321c9f1b 9299 large_frag
08b6401dc81912e5264245b7233c4ab3 9299 large_frag
write_data len 1231, time nopts, type header atom ftyp
write_data len 684, time -33333, type sync atom moof
write_data len 504, time 800000, type boundary atom moof
......@@ -139,15 +139,15 @@ write_data len 420, time 1266667, type boundary atom moof
write_data len 668, time 1566667, type sync atom moof
write_data len 440, time 2233333, type boundary atom moof
write_data len 262, time nopts, type trailer atom -
47cc2460c4b18390c67991cf3251409b 4209 vfr-noduration-interleave
a5d087611a9229ba91eb0964cf2f17d9 4209 vfr-noduration-interleave
write_data len 1231, time nopts, type header atom ftyp
write_data len 916, time 0, type sync atom moof
write_data len 908, time 1000000, type sync atom moof
write_data len 148, time nopts, type trailer atom -
c200a345c365dd35a31e7e62a9ae6c10 3203 delay-moov-elst-neg-cts
d81c3a0ce5940a2db74c99ad435e0560 3203 delay-moov-elst-neg-cts
write_data len 36, time nopts, type header atom ftyp
write_data len 1123, time nopts, type header atom -
write_data len 900, time 0, type sync atom moof
write_data len 908, time 1000000, type sync atom moof
write_data len 148, time nopts, type trailer atom -
868bb53d861d81b1c15ef4d59afc83b5 3115 empty-moov-neg-cts
3be575022e446855bca1e45b7942cc0c 3115 empty-moov-neg-cts
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment