• 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
Name
Last commit
Last update
..
api Loading commit data...
checkasm Loading commit data...
dnn Loading commit data...
fate Loading commit data...
filtergraphs Loading commit data...
ref Loading commit data...
.gitignore Loading commit data...
Makefile Loading commit data...
audiogen.c Loading commit data...
audiomatch.c Loading commit data...
base64.c Loading commit data...
copycooker.sh Loading commit data...
extended.ffconcat Loading commit data...
fate-run.sh Loading commit data...
fate-valgrind.supp Loading commit data...
fate.sh Loading commit data...
md5.sh Loading commit data...
refcmp-metadata.awk Loading commit data...
reference.pnm Loading commit data...
rotozoom.c Loading commit data...
simple1.ffconcat Loading commit data...
simple2.ffconcat Loading commit data...
test.ffmeta Loading commit data...
tiny_psnr.c Loading commit data...
tiny_ssim.c Loading commit data...
utils.c Loading commit data...
videogen.c Loading commit data...