[FFmpeg-devel] [PATCH] avfilter/internal: Improve docs about ff_request_frame()
James Darnley
james.darnley at gmail.com
Tue Jul 14 22:33:13 CEST 2015
On 2015-07-14 21:47, Michael Niedermayer wrote:
> On Tue, Jul 14, 2015 at 08:42:40PM +0200, James Darnley wrote:
>> On 2015-07-14 19:50, Michael Niedermayer wrote:
>>> + * One example of a source returning AVERROR(EAGAIN) is a buffer into which the
>>> + * user application pushes new data, it cannot fullfill a request
>>> + * or know its at EOF until the user application has given it this
>>> + * information
>>
>> I don't find this clear.
>
> ok
> so please help me reword this in a way that is clear
I do want to but me knowledge of how filters are supposed to operate is
limited.
> you have a filter A which can contain a frame, or no frame
> it has a single buffer (it could have more but single is simpler as an
> example)
> if it has a frame in its buffer and the next filter does a
> ff_request_frame() on it it returns that frame and returns success
> (0) from the ff_request_frame() call
> if it does not have a frame in its buffer its screwed and has to
> return AVERROR(EAGAIN)
> until the user application gives it a frame by external means or
> tells it that EOF has been reached
Okay. Don't make the doxy comment too verbose with examples. I'll look
again at writing_filters.txt and my example and see if I can explain
things better there.
>> This is internal, isn't it?
>
> yes, it is, it should be public API though its required for
> implementing filters
Sorry if I wasn't clear. When I meant "internal" I meant internal to
lavfi, as in only filters need to use or care about this function. Not
external users of lavfi, say a player or a video encoder.
>> What does a "user
>> application" matter to a filter, or someone writing a filter?
>
> Derek complained on IRC that the "why" isnt documented, so
> i tried to document it.
>
>
>>
>> Perhaps something about filters rather than applications?
>>
>> One example of a source returning AVERROR(EAGAIN) is a filter which
>> buffers frames and cannot fulfil a request until "some event happens" or
>> the filter cannot know it is as EOF until "some other event happens".
>
> This misses the main point and it is possibly why derek was confused
> about the API
>
> EAGAIN here means "please return all the way back to the user
> application so it can perform the next transcode step and refill
> the filter graphs source _IF_ that is how the application interfaces
> to the filergraph"
Fair enough. I didn't understand how requests were supposed to work
either and I think my example filter is wrong about them. This latest
round of attention is helping.
> new patch:
> commit 6628dd2aa001ec23de306840a41f05947abdf326
> Author: Michael Niedermayer <michael at niedermayer.cc>
> Date: Tue Jul 14 19:44:59 2015 +0200
>
> avfilter/internal: Improve docs about ff_request_frame()
>
> Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
>
> diff --git a/libavfilter/internal.h b/libavfilter/internal.h
> index a7ec751..f1938f9 100644
> --- a/libavfilter/internal.h
> +++ b/libavfilter/internal.h
> @@ -305,8 +305,24 @@ int ff_poll_frame(AVFilterLink *link);
> /**
> * Request an input frame from the filter at the other end of the link.
> *
> + * The input filter may pass the request on to its inputs, fulfill the
> + * request from an internal buffer or any other means specific to its function.
Can I suggest a blank line here between the above line and the one below?
> + * When the end of a stream is reached AVERROR_EOF is returned and no further frames.
The line above is longer than 80 characters. Are we supposed to stick
to that for comments? Can I also ask for another blank line here, just
to clearly separate these two return conditions.
> + * When a filter is unable to output a frame for example due to its sources
> + * being unable to do so or because it depends on external means pushing data
> + * into it then AVERROR(EAGAIN) is returned.
> + * It is important that a AVERROR(EAGAIN) return is returned all the way to the
> + * caller (generally eventually a user application) as this step may (but does
> + * not have to be) neccessary to provide the input with the next frame.
Much better in my opinion, except for necessary (one 'c').
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 603 bytes
Desc: OpenPGP digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20150714/f0795313/attachment.sig>
More information about the ffmpeg-devel
mailing list