[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