[FFmpeg-devel] [PATCH 2/4] lavfi/buffersrc: add add av_buffersrc_close().
Michael Niedermayer
michaelni at gmx.at
Sat Aug 2 13:00:13 CEST 2014
On Wed, Jul 30, 2014 at 11:44:47PM +0200, Nicolas George wrote:
> Also deprecate adding a NULL frame to mark EOF.
>
> TODO APIchanges entry, version bump.
>
> Signed-off-by: Nicolas George <george at nsup.org>
> ---
> libavfilter/buffersrc.c | 40 ++++++++++++++++++++++++++++++----------
> libavfilter/buffersrc.h | 15 +++++++++++++++
> 2 files changed, 45 insertions(+), 10 deletions(-)
>
> diff --git a/libavfilter/buffersrc.c b/libavfilter/buffersrc.c
> index 27d3db0..6d71587 100644
> --- a/libavfilter/buffersrc.c
> +++ b/libavfilter/buffersrc.c
> @@ -63,6 +63,7 @@ typedef struct BufferSourceContext {
> char *channel_layout_str;
>
> int eof;
> + int64_t eof_pts;
> } BufferSourceContext;
>
> #define CHECK_VIDEO_PARAM_CHANGE(s, c, width, height, format)\
> @@ -77,6 +78,27 @@ typedef struct BufferSourceContext {
> return AVERROR(EINVAL);\
> }
>
> +static int push_if_flag(AVFilterContext *ctx, int flags)
> +{
> + return (flags & AV_BUFFERSRC_FLAG_PUSH) ?
> + ctx->output_pads[0].request_frame(ctx->outputs[0]) : 0;
> +}
> +
> +int av_buffersrc_close(AVFilterContext *ctx, int64_t pts, int flags)
> +{
> + BufferSourceContext *s = ctx->priv;
> +
> + if (pts == AV_NOPTS_VALUE) {
> + av_log(ctx, AV_LOG_WARNING, "No EOF timestamp\n");
> + /* FIXME use duration for audio */
> + pts = av_rescale_q(ctx->outputs[0]->current_pts,
> + AV_TIME_BASE_Q, ctx->outputs[0]->time_base) + 1;
> + }
> + s->eof_pts = pts;
> + s->eof = 1;
> + return push_if_flag(ctx, flags);
> +}
> +
> int attribute_align_arg av_buffersrc_write_frame(AVFilterContext *ctx, const AVFrame *frame)
> {
> return av_buffersrc_add_frame_flags(ctx, (AVFrame *)frame,
> @@ -125,8 +147,7 @@ static int av_buffersrc_add_frame_internal(AVFilterContext *ctx,
> s->nb_failed_requests = 0;
>
> if (!frame) {
> - s->eof = 1;
> - return 0;
> + return av_buffersrc_close(ctx, AV_NOPTS_VALUE, flags);
> } else if (s->eof)
> return AVERROR(EINVAL);
>
> @@ -177,11 +198,7 @@ static int av_buffersrc_add_frame_internal(AVFilterContext *ctx,
> return ret;
> }
>
> - if ((flags & AV_BUFFERSRC_FLAG_PUSH))
> - if ((ret = ctx->output_pads[0].request_frame(ctx->outputs[0])) < 0)
> - return ret;
> -
> - return 0;
> + return push_if_flag(ctx, flags);
> }
some of this patch seems to be factorizing code,
other add fuctionality like ff_filter_link_close()
all LGTM i think but maybe should be split
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
When you are offended at any man's fault, turn to yourself and study your
own failings. Then you will forget your anger. -- Epictetus
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20140802/601e3c0a/attachment.asc>
More information about the ffmpeg-devel
mailing list