[FFmpeg-devel] [PATCH] lavfi/showwaves: make use of AV_OPT_TYPE_RATIONAL

Stefano Sabatini stefasab at gmail.com
Sun Mar 17 01:12:31 CET 2013


On date Saturday 2013-03-16 19:04:25 +0000, Paul B Mahol encoded:
> Signed-off-by: Paul B Mahol <onemda at gmail.com>
> ---
>  libavfilter/avf_showwaves.c | 21 +++------------------
>  1 file changed, 3 insertions(+), 18 deletions(-)
> 
> diff --git a/libavfilter/avf_showwaves.c b/libavfilter/avf_showwaves.c
> index 5d2c1ab..2380403 100644
> --- a/libavfilter/avf_showwaves.c
> +++ b/libavfilter/avf_showwaves.c
> @@ -41,7 +41,6 @@ enum ShowWavesMode {
>  typedef struct {
>      const AVClass *class;
>      int w, h;
> -    char *rate_str;
>      AVRational rate;
>      int buf_idx;
>      AVFrame *outpicref;
> @@ -55,8 +54,8 @@ typedef struct {
>  #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
>  
>  static const AVOption showwaves_options[] = {
> -    { "rate", "set video rate", OFFSET(rate_str), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, FLAGS },
> -    { "r",    "set video rate", OFFSET(rate_str), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, FLAGS },
> +    { "rate", "set video rate", OFFSET(rate), AV_OPT_TYPE_RATIONAL, {.dbl = 25}, 1, INT_MAX, FLAGS },
> +    { "r",    "set video rate", OFFSET(rate), AV_OPT_TYPE_RATIONAL, {.dbl = 25}, 1, INT_MAX, FLAGS },
>      { "size", "set video size", OFFSET(w), AV_OPT_TYPE_IMAGE_SIZE, {.str = "600x240"}, 0, 0, FLAGS },
>      { "s",    "set video size", OFFSET(w), AV_OPT_TYPE_IMAGE_SIZE, {.str = "600x240"}, 0, 0, FLAGS },
>      { "n",    "set how many samples to show in the same point", OFFSET(n), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, FLAGS },
> @@ -88,7 +87,6 @@ static av_cold void uninit(AVFilterContext *ctx)
>  {
>      ShowWavesContext *showwaves = ctx->priv;
>  
> -    av_freep(&showwaves->rate_str);
>      av_frame_free(&showwaves->outpicref);
>  }
>  
> @@ -131,22 +129,9 @@ static int config_output(AVFilterLink *outlink)
>      AVFilterContext *ctx = outlink->src;
>      AVFilterLink *inlink = ctx->inputs[0];
>      ShowWavesContext *showwaves = ctx->priv;
> -    int err;
> -
> -    if (showwaves->n && showwaves->rate_str) {
> -        av_log(ctx, AV_LOG_ERROR, "Options 'n' and 'rate' cannot be set at the same time\n");
> -        return AVERROR(EINVAL);
> -    }
>  
> -    if (!showwaves->n) {
> -        if (!showwaves->rate_str)
> -            showwaves->rate = (AVRational){25,1}; /* set default value */
> -        else if ((err = av_parse_video_rate(&showwaves->rate, showwaves->rate_str)) < 0) {
> -            av_log(ctx, AV_LOG_ERROR, "Invalid frame rate: '%s'\n", showwaves->rate_str);
> -            return err;

Not OK, since a video rate is not just a rational but accepts
abbreviations and performs some additional checks on the value. 

A possibility would be to add a VIDEO_RATE option if you want to avoid
this.
-- 
FFmpeg = Faithful & Faithful Multimedia Problematic Ermetic Game


More information about the ffmpeg-devel mailing list