• Limin Wang's avatar
    avformat/mux: Set AV_PKT_FLAG_KEY for is_intra_only packet · 96e5e6ab
    Limin Wang authored
    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>
    96e5e6ab
internal.h 25.1 KB