[FFmpeg-devel] [PATCH] avcodec/dv_profile: dv files with wrong dsf flag - detect via buf_size

Marton Balint cus at passwd.hu
Wed Mar 17 00:12:35 EET 2021



On Tue, 16 Mar 2021, Marton Balint wrote:

>
>
> On Tue, 16 Mar 2021, Mark Plomer wrote:
>
>> Unfortunately it is not possible to move the hack to the bottom, because 
>> the "normal processing" (dv_profiles lookup loop) will catch it 
>> otherwise (with a wrong profile), because it does not check the frame_size:
>
> Then at least check the 50/60 flag as well in the VAUX source pack, e.g.:
>
> pal   = !!(frame[80 * 5 + 48 + 3] & 0x20);

And as far as I see, the more specific hack checking for codec_tag and 
similar can be removed then, because your check covers that case as well.

Regards,
Marton

>
> Regards,
> Marton
>
>
>>
>>     for (i = 0; i < FF_ARRAY_ELEMS(dv_profiles); i++)
>>         if (dsf == dv_profiles[i].dsf && stype == 
>> dv_profiles[i].video_stype)
>>             return &dv_profiles[i];
>>
>> But as the new "if" is very specific and catches an "invalid" 
>> combination only (with the frame_size check), it should not break 
>> anything, I think:
>>
>>     if (dsf == 0 && stype == dv_profiles[1].video_stype && buf_size == 
>> dv_profiles[1].frame_size)
>>
>> At least, I put the new hack after all other "pre-normal-processing" 
>> hacks ;-)
>>
>> Regards
>> Mark
>>
>> Am 13.03.21 um 17:48 schrieb Marton Balint:
>>>
>>>
>>> On Sat, 16 Jan 2021, Mark Plomer wrote:
>>>
>>>> Trying to fix https://trac.ffmpeg.org/ticket/8333
>>>>
>>>> Some of my old DV AVI files have the DSF-Flag of frames set to 0, 
>>>> although it is PAL (I think they were rendered with Ulead Media 
>>>> Studio Pro) ... this causes ffmpeg/VLC-player to produce/play 
>>>> corrupted video.
>>>>
>>>> In other players/editors it works fine including:
>>>>
>>>> - VirtualDub
>>>> - Windows Media Player
>>>> - AVCutty
>>>> - Ulead Media Studio Pro (very old)
>>>>
>>>> I had a look at VirtualDub ... there the PAL/NTSC detection is based 
>>>> on the frame rate from AVISTREAMINFO header (dwRate/dwScale) - see 
>>>> 
>> 
> https://github.com/Pavuucek/VirtualDub/blob/f47ebd2536f0034b048180d0b9cb9bde0ab10c73/src/VirtualDub/source/VideoSource.cpp#L1211
>>>>
>>>> As I don't know, how to access the AVI header info inside 
>>>> dvvideo_decode_frame()/ff_dv_frame_profile(), I tried another 
>>>> workaround by checking the buf_size against the dv_profile.
>>>>
>>>> It works fine now, but I don't know, if this is really the best 
>>>> solution ...
>>>
>>> --- a/libavcodec/dv_profile.c
>>> +++ b/libavcodec/dv_profile.c
>>> @@ -281,6 +281,10 @@ const AVDVProfile* 
>>> ff_dv_frame_profile(AVCodecContext* codec, const AVDVProfile
>>>         && codec->coded_height==576)
>>>          return &dv_profiles[1];
>>>
>>> +    /* hack for trac issue #8333, dv files with wrong dsf flag - 
>>> detect via buf_size */
>>> +    if (dsf == 0 && stype == dv_profiles[1].video_stype && buf_size 
>>> == dv_profiles[1].frame_size)
>>> +        return &dv_profiles[1];
>>> +
>>>
>>> If possible, then it is probably better to move this fallback to later 
>>> in the code, right after the hack for trac issue #217, so previous 
>>> hacks won't get broken...
>>>
>>> Regards,
>>> Marton
>>> _______________________________________________
>>> ffmpeg-devel mailing list
>>> ffmpeg-devel at ffmpeg.org
>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>
>>> To unsubscribe, visit link above, or email
>>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel at ffmpeg.org
>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>> To unsubscribe, visit link above, or email
>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".


More information about the ffmpeg-devel mailing list