[FFmpeg-devel] [PATCH] H.264 fix interlaced flag
Ivan Schreter
schreter
Tue Mar 3 21:18:45 CET 2009
Hi,
Michael Niedermayer wrote:
> On Tue, Mar 03, 2009 at 07:49:53PM +0100, Ivan Schreter wrote:
>
>> [...]
>> Index: libavcodec/h264.c
>> ===================================================================
>> --- libavcodec/h264.c (revision 17723)
>> +++ libavcodec/h264.c (working copy)
>> @@ -6805,7 +6805,7 @@
>> for (i = 0 ; i < num_clock_ts ; i++){
>> if(get_bits(&s->gb, 1)){ /* clock_timestamp_flag */
>> unsigned int full_timestamp_flag;
>> - skip_bits(&s->gb, 2); /* ct_type */
>> + h->sei_ct_type[i] = get_bits(&s->gb, 2);
>>
>
> h->sei_ct_type |= 1<<get_bits(&s->gb, 2);
> stores things in a, for us easier to use form
>
>
Hm, I could come to this idea to use bitset myself :-)
> [...]
>
>
>> @@ -7767,20 +7784,22 @@
>> switch (h->sei_pic_struct)
>> {
>> case SEI_PIC_STRUCT_FRAME:
>> - cur->interlaced_frame = 0;
>> + cur->interlaced_frame = h264_is_interlaced(h);
>> break;
>> case SEI_PIC_STRUCT_TOP_FIELD:
>> case SEI_PIC_STRUCT_BOTTOM_FIELD:
>> + cur->interlaced_frame = 1;
>> + break;
>> case SEI_PIC_STRUCT_TOP_BOTTOM:
>> case SEI_PIC_STRUCT_BOTTOM_TOP:
>> - cur->interlaced_frame = 1;
>> + cur->interlaced_frame = h264_is_interlaced(h);
>> break;
>> case SEI_PIC_STRUCT_TOP_BOTTOM_TOP:
>> case SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM:
>> // Signal the possibility of telecined film externally (pic_struct 5,6)
>> // From these hints, let the applications decide if they apply deinterlacing.
>> cur->repeat_pict = 1;
>> - cur->interlaced_frame = FIELD_OR_MBAFF_PICTURE;
>> + cur->interlaced_frame = h264_is_interlaced(h);
>> break;
>> case SEI_PIC_STRUCT_FRAME_DOUBLING:
>> // Force progressive here, as doubling interlaced frame is a bad idea.
>>
>
> this is incorrect
> ct_type should always be used if available, otherwise
> FIELD_OR_MBAFF_PICTURE should be.
> that at least is how i understand the spec, if this fails for some
> case iam interrested in the file
>
Updated patch attached.
BTW, I left frame doubling and tripling set interlaced to false. To be
completely consistent, possibly this should be done via ct_type as well
(but doubling and tripling will surely look bad interlaced...). What do
you think?
Regards,
Ivan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: h264_ct_type.patch
Type: text/x-patch
Size: 3030 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090303/bf8bd441/attachment.bin>
More information about the ffmpeg-devel
mailing list