[FFmpeg-devel] [PATCH] avcodec/dvdec: correctly set interlaced and tff

Baptiste Coudurier baptiste.coudurier at gmail.com
Wed Sep 11 23:29:31 EEST 2019


Hey Carl,

> On Sep 11, 2019, at 12:38 PM, Carl Eugen Hoyos <ceffmpeg at gmail.com> wrote:
> 
> Am Mi., 11. Sept. 2019 um 21:31 Uhr schrieb Baptiste Coudurier
> <baptiste.coudurier at gmail.com>:
>> 
>> ---
>> libavcodec/dvdec.c | 13 ++++++++++---
>> 1 file changed, 10 insertions(+), 3 deletions(-)
>> 
>> diff --git a/libavcodec/dvdec.c b/libavcodec/dvdec.c
>> index 4345cd9e29..cfa0fb9905 100644
>> --- a/libavcodec/dvdec.c
>> +++ b/libavcodec/dvdec.c
>> @@ -592,12 +592,19 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, void *data,
>> 
>>     if ((ret = ff_thread_get_buffer(avctx, &frame, 0)) < 0)
>>         return ret;
>> -    frame.f->interlaced_frame = 1;
>> -    frame.f->top_field_first  = 0;
>> 
>>     /* Determine the codec's field order from the packet */
>>     if ( *vsc_pack == dv_video_control ) {
>> -        frame.f->top_field_first = !(vsc_pack[3] & 0x40);
>> +        if (avctx->height == 720) {
>> +            frame.f->interlaced_frame = 0;
>> +            frame.f->top_field_first = 0;
>> +        } else if (avctx->height == 1080) {
>> +            frame.f->interlaced_frame = 1;
>> +            frame.f->top_field_first = (vsc_pack[3] & 0x40) == 0x40;
>> +        } else {
>> +            frame.f->interlaced_frame = (vsc_pack[3] & 0x10) == 0x10;
>> +            frame.f->top_field_first = !(vsc_pack[3] & 0x40);
> 
> Does this fix ticket #5092?

Yes, I think it does

— 
Baptiste Coudurier



More information about the ffmpeg-devel mailing list