[FFmpeg-devel] [GSOC] FLIF16 Decoder (and Encoder)

James Almer jamrial at gmail.com
Mon May 4 21:39:29 EEST 2020


On 5/4/2020 3:26 PM, Anamitra Ghorui wrote:
> Hello,
> 
> I have a question regerding the internal decoding/encoding API. There seems
> to be two functions that may be alternatively called, on the basis of whether
> they are defined or not, both defined in the AVCodec struct:
> 1. decode()
> 2. receive_frame()
> 
> From the comments above the definition of receive_frame():
> "Decode API with decoupled packet/frame dataflow. This function is called to get
> one output frame. It should call ff_decode_get_packet() to obtain input data."
> 
> From what I can see, if receive_frame() is not defined, a separate function is
> called, decode_simple_receive_frame(), which in turn calls 
> decode_receive_frame_internal(). 
> *   receive_frame() therefore allows more "fine grained" control on how the 
>     frame generation and return values are handled, from what I can see.
> *   But for most purposes defining decode() is enough.
> *   receive_frame() takes priority over decode().
> 
> Is this correct?

Yes. For a simple decoder, using AVCodec.decode() is enough. It is also
currently required if you want to implement frame threading.

Calls to AVCodec.decode() will always include a new packet to process,
even if you don't currently need one because you for example have more
frames to output with the data you already processed, whereas calls to
AVCodec.receive_frame() let you requests packets when you need them
using ff_decode_get_packet().


More information about the ffmpeg-devel mailing list