[FFmpeg-devel] [PATCH] libavu: add pkt_timebase to AVFrame.

wm4 nfxjfg at googlemail.com
Sun Jul 20 16:26:01 CEST 2014

On Fri, 18 Jul 2014 13:12:39 +0200
Michael Niedermayer <michaelni at gmx.at> wrote:

> On Fri, Jul 18, 2014 at 12:47:06PM +0200, Hendrik Leppkes wrote:
> > Am 18.07.2014 12:04 schrieb "Benoit Fouet" <benoit.fouet at free.fr>:
> > >
> > > In order to easily correlate pkt_duration to its real duration, add the
> > > packet time base information to the frame structure.
> > >
> > > Fixes issue #3052
> > 
> > The code in avcodec doesn't know the timebase, unless the user tells it.
> or the user uses libavformat with libavcodec
> > 
> > And if the user wants to tell it, there already is an avctx field for it
> > (pkt_timebase), no need to store it in the frame since its not going to
> > change in every frame.
> > 
> > As such, I'm not sure what this new field would solve.
> It would allow interpreting the AVFrame.pkt_duration without the need
> to have access to a AVCodecContext.
> AVFrames are part of libavutil, AVCodecContext is part of libavcodec

I don't agree. When you use AVFrame and AVPacket, you usually _do_ have
to cooperate with other parts of the libraries. For example, for
AVPacket you need to know the codec, which is another fixed value
exported by libavformat. Do you want to add a codec field to AVPacket?
No, you just make sure the receiver also gets the codec somehow. You can
do the same for the timebase. For AVFrame, you can't use it with
libavfilter without making sure the pixel format and dimensions match
with the input buffer. Same for the timebase.

Adding the timebase to AVFrame and AVPacket would be reasonable if it's
guaranteed that other parts of the libraries interpret them properly.
But they don't (because the timebase is a fixed constant over a stream
in the first place), and adding this field would lead to a confusing
situation where some parts of the code set the pkt_timebase, some maybe
even interpret it, but most code silently ignores it. The API is much
cleaner without this field.

> also we have a similar issue with AVPackets which dont store the
> timebase used by its time related fields.
> Which leads to the issue you describe above
> "The code in avcodec doesn't know the timebase, unless the user tells it."
> Where a timebase in AVPacket the user wouldnt manually have to deal
> with it. libavformats AVPacket would simply contain the timebase
> Fixing that with AVPackets is due to API/ABI rather hard though
> [...]

More information about the ffmpeg-devel mailing list