On Wed, 12 Apr 2017, Nicolas George wrote:

Le tridi 23 germinal, an CCXXV, Marton Balint a écrit :
Note that the above code which I moved returns 0 if ff_request_frame returns
AVERROR_EOF. As far as I see, this can only happen a few times, not
infinitely, so I am not sure if this is an error or not, so I kept is as it
was before.

There are exactly three acceptable behaviours for request_frame() and
all the functions it calls:

* it pushes a frame and returns 0;

* it issues a ff_request_frame() on the input and returns 0;

* it returns EOF or an error.

If the "few times" correspond to frames pushed, then it is ok.
Otherwise, it is not. lavfi will not activate filters saying "hey, you
told me last time you had nothing to do, but just in case I am taking
news". A filter should never do nothing.

Well, then I guess the doc/filtering_design.txt is outdated, because
it uses term "making progress towards producing a frame" when returning 0

There is also an example code snippet there:

        if (frames_queued) {
            push_one_frame();
            return 0;
        }
        input = input_where_a_frame_is_most_needed();
        ret = ff_request_frame(input);
        if (ret == AVERROR_EOF) {
            process_eof_on_input();
        } else if (ret < 0) {
            return ret;
        }
        return 0;

Am I getting this right, process_eof_on_input() should be extended to

process_eof_on_input();
if (!frames_queued)
    return AVERROR_EOF;
push_one_frame();

Regards,
Marton
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to