[FFmpeg-devel] [PATCH 1/2] avfilter/framesync: allocate FFFrameSyncIn internally
Stefano Sabatini
stefasab at gmail.com
Mon Oct 7 12:45:07 CEST 2013
On date Saturday 2013-10-05 20:19:23 +0000, Paul B Mahol encoded:
> Signed-off-by: Paul B Mahol <onemda at gmail.com>
> ---
> libavfilter/dualinput.c | 8 ++++++--
> libavfilter/dualinput.h | 1 -
> libavfilter/framesync.c | 9 ++++++++-
> libavfilter/framesync.h | 7 ++++---
> 4 files changed, 18 insertions(+), 7 deletions(-)
>
> diff --git a/libavfilter/dualinput.c b/libavfilter/dualinput.c
> index 97e15cb..5e6432a 100644
> --- a/libavfilter/dualinput.c
> +++ b/libavfilter/dualinput.c
> @@ -42,9 +42,13 @@ static int process_frame(FFFrameSync *fs)
>
> int ff_dualinput_init(AVFilterContext *ctx, FFDualInputContext *s)
> {
> - FFFrameSyncIn *in = s->fs.in;
> + FFFrameSyncIn *in;
> + int ret;
>
> - ff_framesync_init(&s->fs, ctx, 2);
> + if ((ret = ff_framesync_init(&s->fs, ctx, 2)) < 0)
> + return ret;
> +
> + in = s->fs.in;
> s->fs.opaque = s;
> s->fs.on_event = process_frame;
> in[0].time_base = ctx->inputs[0]->time_base;
> diff --git a/libavfilter/dualinput.h b/libavfilter/dualinput.h
> index 0ec0ea7..5ff23e6 100644
> --- a/libavfilter/dualinput.h
> +++ b/libavfilter/dualinput.h
> @@ -31,7 +31,6 @@
>
> typedef struct {
> FFFrameSync fs;
> - FFFrameSyncIn second_input; /* must be immediately after fs */
>
> AVFrame *(*process)(AVFilterContext *ctx, AVFrame *main, const AVFrame *second);
> int shortest; ///< terminate stream when the second input terminates
> diff --git a/libavfilter/framesync.c b/libavfilter/framesync.c
> index 12db50c..bdac40b 100644
> --- a/libavfilter/framesync.c
> +++ b/libavfilter/framesync.c
> @@ -46,11 +46,16 @@ enum {
> STATE_EOF,
> };
>
> -void ff_framesync_init(FFFrameSync *fs, void *parent, unsigned nb_in)
> +int ff_framesync_init(FFFrameSync *fs, void *parent, unsigned nb_in)
> {
> fs->class = &framesync_class;
> fs->parent = parent;
> fs->nb_in = nb_in;
> +
> + fs->in = av_calloc(nb_in, sizeof(*fs->in));
> + if (!fs->in)
> + return AVERROR(ENOMEM);
> + return 0;
> }
>
> static void framesync_sync_level_update(FFFrameSync *fs)
> @@ -267,6 +272,8 @@ void ff_framesync_uninit(FFFrameSync *fs)
> av_frame_free(&fs->in[i].frame_next);
> ff_bufqueue_discard_all(&fs->in[i].queue);
> }
> +
> + av_freep(&fs->in);
> }
>
> int ff_framesync_process_frame(FFFrameSync *fs, unsigned all)
> diff --git a/libavfilter/framesync.h b/libavfilter/framesync.h
> index 2072781..7ba99d5 100644
> --- a/libavfilter/framesync.h
> +++ b/libavfilter/framesync.h
> @@ -201,9 +201,9 @@ typedef struct FFFrameSync {
> uint8_t eof;
>
> /**
> - * Array of inputs; all inputs must be in consecutive memory
> + * Pointer to array of inputs.
> */
> - FFFrameSyncIn in[1]; /* must be the last field */
> + FFFrameSyncIn *in;
>
> } FFFrameSync;
>
> @@ -215,8 +215,9 @@ typedef struct FFFrameSync {
> * @param fs frame sync structure to initialize
> * @param parent parent object, used for logging
> * @param nb_in number of inputs
> + * @return >= 0 for success or a negative error code
> */
> -void ff_framesync_init(FFFrameSync *fs, void *parent, unsigned nb_in);
> +int ff_framesync_init(FFFrameSync *fs, void *parent, unsigned nb_in);
Don't you need to update other users as well?
LGTM if tested otherwise.
--
FFmpeg = Freak & Faithful Murdering Proud Extroverse Gorilla
More information about the ffmpeg-devel
mailing list