diff options
| author | Stefano Sabatini <[email protected]> | 2012-06-25 21:29:56 +0200 | 
|---|---|---|
| committer | Stefano Sabatini <[email protected]> | 2012-06-26 11:42:51 +0200 | 
| commit | 79a7451d069f17c72e566d8e76a75c15cc25c515 (patch) | |
| tree | fa20214e7adebff03efda0fae363f9c453a843d2 /ffplay.c | |
| parent | 720ec620123bf12f1effc311285f8f501c40e5c6 (diff) | |
ffplay: add configure_filtergraph() helper
Will help factorization with the pending -af patch, and add some checks
missing in the original code.
Diffstat (limited to 'ffplay.c')
| -rw-r--r-- | ffplay.c | 62 | 
1 files changed, 39 insertions, 23 deletions
| @@ -1547,6 +1547,44 @@ static int get_video_frame(VideoState *is, AVFrame *frame, int64_t *pts, AVPacke  }  #if CONFIG_AVFILTER +static int configure_filtergraph(AVFilterGraph *graph, const char *filtergraph, +                                 AVFilterContext *source_ctx, AVFilterContext *sink_ctx) +{ +    int ret; +    AVFilterInOut *outputs = NULL, *inputs = NULL; + +    if (filtergraph) { +        outputs = avfilter_inout_alloc(); +        inputs  = avfilter_inout_alloc(); +        if (!outputs || !inputs) { +            ret = AVERROR(ENOMEM); +            goto fail; +        } + +        outputs->name       = av_strdup("in"); +        outputs->filter_ctx = source_ctx; +        outputs->pad_idx    = 0; +        outputs->next       = NULL; + +        inputs->name        = av_strdup("out"); +        inputs->filter_ctx  = sink_ctx; +        inputs->pad_idx     = 0; +        inputs->next        = NULL; + +        if ((ret = avfilter_graph_parse(graph, filtergraph, &inputs, &outputs, NULL)) < 0) +            goto fail; +    } else { +        if ((ret = avfilter_link(source_ctx, 0, sink_ctx, 0)) < 0) +            goto fail; +    } + +    return avfilter_graph_config(graph, NULL); +fail: +    avfilter_inout_free(&outputs); +    avfilter_inout_free(&inputs); +    return ret; +} +  static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const char *vfilters)  {      static const enum PixelFormat pix_fmts[] = { PIX_FMT_YUV420P, PIX_FMT_NONE }; @@ -1587,29 +1625,7 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c      if ((ret = avfilter_link(filt_format, 0, filt_out, 0)) < 0)          return ret; - -    if (vfilters) { -        AVFilterInOut *outputs = avfilter_inout_alloc(); -        AVFilterInOut *inputs  = avfilter_inout_alloc(); - -        outputs->name    = av_strdup("in"); -        outputs->filter_ctx = filt_src; -        outputs->pad_idx = 0; -        outputs->next    = NULL; - -        inputs->name    = av_strdup("out"); -        inputs->filter_ctx = filt_format; -        inputs->pad_idx = 0; -        inputs->next    = NULL; - -        if ((ret = avfilter_graph_parse(graph, vfilters, &inputs, &outputs, NULL)) < 0) -            return ret; -    } else { -        if ((ret = avfilter_link(filt_src, 0, filt_format, 0)) < 0) -            return ret; -    } - -    if ((ret = avfilter_graph_config(graph, NULL)) < 0) +    if ((ret = configure_filtergraph(graph, vfilters, filt_src, filt_format)) < 0)          return ret;      is->in_video_filter  = filt_src; | 
