[FFmpeg-devel] [RFC] Interlaced material, pix_fmt change, auto-inserted scaler

Mark Himsley mark at mdsh.com
Wed Jul 27 15:38:27 CEST 2011


On 26/07/11 21:33, Reimar Döffinger wrote:
> On Tue, Jul 26, 2011 at 09:11:20PM +0100, Mark Himsley wrote:
>> On 26/07/11 13:29, Michael Niedermayer wrote:
>>> but not pushed, due to:
>>>
>>>   --- ./tests/ref/vsynth1/dnxhd_1080i    2011-07-14 21:41:40.425374187 +0200
>>> +++ tests/data/fate/vsynth1-dnxhd_1080i 2011-07-26 13:45:49.895749789 +0200
>>> @@ -1,4 +1,4 @@
>>>   34949ea38da2cf6a8406ad600ad95cfa *./tests/data/vsynth1/dnxhd-1080i.mov
>>>   3031875 ./tests/data/vsynth1/dnxhd-1080i.mov
>>> -0c651e840f860592f0d5b66030d9fa32 *./tests/data/dnxhd_1080i.vsynth1.out.yuv
>>> -stddev:    6.29 PSNR: 32.15 MAXDIFF:   64 bytes:   760320/  7603200
>>> +3c3226518a0f56468bf56a6682e31fae *./tests/data/dnxhd_1080i.vsynth1.out.yuv
>>> +stddev:   14.22 PSNR: 25.07 MAXDIFF:  119 bytes:   760320/  7603200
>>> make: *** [fate-vsynth1-dnxhd_1080i] Error 1
>>> make: *** Waiting for unfinished jobs....
>>> --- ./tests/ref/vsynth1/dv  2011-07-11 03:51:36.225253709 +0200
>>> +++ tests/data/fate/vsynth1-dv  2011-07-26 13:45:53.105749789 +0200
>>> @@ -1,8 +1,8 @@
>>>   27ade3031b17214cf81c19cbf70f37d7 *./tests/data/vsynth1/dv.dv
>>>   7200000 ./tests/data/vsynth1/dv.dv
>>> -02ac7cdeab91d4d5621e7ce96dddc498 *./tests/data/dv.vsynth1.out.yuv
>>> -stddev:    6.90 PSNR: 31.34 MAXDIFF:   76 bytes:  7603200/  7603200
>>> +31b3c8f0fa8ae336c561ccdee5738376 *./tests/data/dv.vsynth1.out.yuv
>>> +stddev:   12.83 PSNR: 25.96 MAXDIFF:  125 bytes:  7603200/  7603200
>>>   bd67f2431db160d4bb6dcd791cea6efd *./tests/data/vsynth1/dv411.dv
>>>   7200000 ./tests/data/vsynth1/dv411.dv
>>> -b6640a3a572353f51284acb746eb00c4 *./tests/data/dv.vsynth1.out.yuv
>>> -stddev:   30.76 PSNR: 18.37 MAXDIFF:  205 bytes:  7603200/  7603200
>>> +7baa332c913fc9b65b7b24830acd74e0 *./tests/data/dv.vsynth1.out.yuv
>>> +stddev:   31.72 PSNR: 18.10 MAXDIFF:  206 bytes:  7603200/  7603200
>>> make: *** [fate-vsynth1-dv] Error 1
>>> --- ./tests/ref/vsynth1/dv50    2011-07-11 03:51:36.225253709 +0200
>>> +++ tests/data/fate/vsynth1-dv50    2011-07-26 13:45:53.885749789 +0200
>>> @@ -1,4 +1,4 @@
>>>   26dba84f0ea895b914ef5b333d8394ac *./tests/data/vsynth1/dv50.dv
>>>   14400000 ./tests/data/vsynth1/dv50.dv
>>> -a2ff093e93ffed10f730fa21df02fc50 *./tests/data/dv50.vsynth1.out.yuv
>>> -stddev:    1.72 PSNR: 43.38 MAXDIFF:   29 bytes:  7603200/  7603200
>>> +0f612929578f4955c88690b36a783d79 *./tests/data/dv50.vsynth1.out.yuv
>>> +stddev:   20.25 PSNR: 22.00 MAXDIFF:  224 bytes:  7603200/  7603200
>>>
>>>
>>> [...]
>>
>> I think I understand the output of fate. Taking the last example,
>> it's suggesting that the PSNR has reduced from over 43 to 22, which
>> would be a devastating difference.
>>
>> So, that's DV, DV50, DV411 and dnxhd_1080i. I wonder - are these all
>> formats where the decoder always flags the video as interlaced?
>
> Probably yes. For DV that could be fixed, if you search for dv_video_control
> in dv.c that should find you the location where the encoder writes the
> interlaced flag and where you could add code to read it again.
> However I'm not convinced how using interlaced scaling would explain
> such a major PSNR loss.

It is the case that using interlaced scaling has created such a major 
PSNR loss. I've been stepping through the processes that fate executes 
for the failing codecs (scale a cif sized reference file up to 720x576, 
then scale it back down to cif) and it's easy to see the loss of quality 
in the scale down when the video filter is scale=352:288:interl=1.

I am very surprised by that low PSNR, but I honestly haven't looked at 
the code to work out why it's so. Studying the output file, the 
horizontal and vertical resolution is half of what I expected.

So for the moment I withdraw this patch.

-- 
Mark


More information about the ffmpeg-devel mailing list