[FFmpeg-devel] [PATCH] h264 ticks and time base
Baptiste Coudurier
baptiste.coudurier
Sat Jun 20 11:40:21 CEST 2009
Michael Niedermayer wrote:
> On Fri, Jun 19, 2009 at 11:15:46PM -0700, Baptiste Coudurier wrote:
>> Michael Niedermayer wrote:
>>> On Wed, Jun 17, 2009 at 04:58:34PM -0700, Baptiste Coudurier wrote:
>>>> Michael Niedermayer wrote:
>>>>> On Sun, Jun 14, 2009 at 10:42:11PM -0700, Baptiste Coudurier wrote:
>>>>>> Hi,
>>>>>>
>>>>>> 1) Set avctx time_base in h264 parser.
>>>>>> 2) Set avctx ticks_per_frame in h264 decoder.
>>>>>>
>>>>>> I don't get this code in decode_init in h264.c
>>>>>>
>>>>>> reset_sei(h);
>>>>>> if(avctx->codec_id == CODEC_ID_H264){
>>>>>> if(avctx->ticks_per_frame == 1){
>>>>>> s->avctx->time_base.den *=2;
>>>>>> }
>>>>>> avctx->ticks_per_frame = 2;
>>>>>> }
>>>>>> return 0;
>>>>>>
>>>>>> avctx->ticks_per_frame is not set before calling the decoder
>>>>>> in any case. Should that be removed ?
>>>>> what do you mean by "that" ?
>>>> the if(avctx->ticks_per_frame == 1)
>>> i think it was needed because the codec might be ininted then closed and
>>> then ininted again, but i may misremember
>> Oh, hackish isn't it ?
>
> do you have a better idea?
Removing it.
>> Nothing seems to set ticks_per_frame to 1 in h264 though.
>
> no, 1 is the default
> the first init of h264 sets it to 2 and doubles the time_base
> the second must not double time_base again, the == 1 check
> avoids it
> if a demuxer meant to set the field rate instead of the frame rate
> it can set ticks_per_frame to 2
Demuxer is not supposed to set avctx->time_base.
Decoder has to override it in all case.
So my proposition is:
Remove this code and always set it to 2.
Do not set avctx->time_base in demuxer nor to r_frame_rate in
av_find_stream_info.
If timebase is not set, well it's not set and user knows it's unavailable.
--
Baptiste COUDURIER GnuPG Key Id: 0x5C1ABAAA
Key fingerprint 8D77134D20CC9220201FC5DB0AC9325C5C1ABAAA
FFmpeg maintainer http://www.ffmpeg.org
More information about the ffmpeg-devel
mailing list