[FFmpeg-devel] [PATCH] Add float user_rdiv[4] to allow user options to apply correctly

Stone Chen chen.stonechen at gmail.com
Sat Feb 24 18:16:01 EET 2024


Sorry I just realized I messed up my git commit (new to git), I've attached
a patch file with that correction.

On Sat, Feb 24, 2024 at 10:49 AM Stone Chen <chen.stonechen at gmail.com>
wrote:

> Previously to support dynamic reconfigurations of the matrix string (e.g.
> 0m), the rdiv values would always be cleared to 0.f, causing the rdiv to be
> recalculated based on the new filter. This however had the side effect of
> always ignoring user specified rdiv values.
>
> Instead float user_rdiv[0] is added to ConvolutionContext which will store
> the user specified rdiv values. Then the original rdiv array will store
> either the user_rdiv or the automatically calculated 1/sum.
>
> This fixes trac #10294, #10867
> ---
>  libavfilter/convolution.h    | 3 ++-
>  libavfilter/vf_convolution.c | 9 +++++----
>  2 files changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/libavfilter/convolution.h b/libavfilter/convolution.h
> index e44bfb5da8..ee7477ef89 100644
> --- a/libavfilter/convolution.h
> +++ b/libavfilter/convolution.h
> @@ -34,13 +34,14 @@ typedef struct ConvolutionContext {
>      const AVClass *class;
>
>      char *matrix_str[4];
> -    float rdiv[4];
> +    float user_rdiv[4];
>      float bias[4];
>      int mode[4];
>      float scale;
>      float delta;
>      int planes;
>
> +    float rdiv[4];
>      int size[4];
>      int depth;
>      int max;
> diff --git a/libavfilter/vf_convolution.c b/libavfilter/vf_convolution.c
> index a00bb2b3c4..96c478d791 100644
> --- a/libavfilter/vf_convolution.c
> +++ b/libavfilter/vf_convolution.c
> @@ -40,10 +40,10 @@ static const AVOption convolution_options[] = {
>      { "1m", "set matrix for 2nd plane", OFFSET(matrix_str[1]),
> AV_OPT_TYPE_STRING, {.str="0 0 0 0 1 0 0 0 0"}, 0, 0, FLAGS },
>      { "2m", "set matrix for 3rd plane", OFFSET(matrix_str[2]),
> AV_OPT_TYPE_STRING, {.str="0 0 0 0 1 0 0 0 0"}, 0, 0, FLAGS },
>      { "3m", "set matrix for 4th plane", OFFSET(matrix_str[3]),
> AV_OPT_TYPE_STRING, {.str="0 0 0 0 1 0 0 0 0"}, 0, 0, FLAGS },
> -    { "0rdiv", "set rdiv for 1st plane", OFFSET(rdiv[0]),
> AV_OPT_TYPE_FLOAT, {.dbl=0.0}, 0.0, INT_MAX, FLAGS},
> -    { "1rdiv", "set rdiv for 2nd plane", OFFSET(rdiv[1]),
> AV_OPT_TYPE_FLOAT, {.dbl=0.0}, 0.0, INT_MAX, FLAGS},
> -    { "2rdiv", "set rdiv for 3rd plane", OFFSET(rdiv[2]),
> AV_OPT_TYPE_FLOAT, {.dbl=0.0}, 0.0, INT_MAX, FLAGS},
> -    { "3rdiv", "set rdiv for 4th plane", OFFSET(rdiv[3]),
> AV_OPT_TYPE_FLOAT, {.dbl=0.0}, 0.0, INT_MAX, FLAGS},
> +    { "0rdiv", "set rdiv for 1st plane", OFFSET(user_rdiv[0]),
> AV_OPT_TYPE_FLOAT, {.dbl=0.0}, 0.0, INT_MAX, FLAGS},
> +    { "1rdiv", "set rdiv for 2nd plane", OFFSET(user_rdiv[1]),
> AV_OPT_TYPE_FLOAT, {.dbl=0.0}, 0.0, INT_MAX, FLAGS},
> +    { "2rdiv", "set rdiv for 3rd plane", OFFSET(user_rdiv[2]),
> AV_OPT_TYPE_FLOAT, {.dbl=0.0}, 0.0, INT_MAX, FLAGS},
> +    { "3rdiv", "set rdiv for 4th plane", OFFSET(user_rdiv[3]),
> AV_OPT_TYPE_FLOAT, {.dbl=0.0}, 0.0, INT_MAX, FLAGS},
>      { "0bias", "set bias for 1st plane", OFFSET(bias[0]),
> AV_OPT_TYPE_FLOAT, {.dbl=0.0}, 0.0, INT_MAX, FLAGS},
>      { "1bias", "set bias for 2nd plane", OFFSET(bias[1]),
> AV_OPT_TYPE_FLOAT, {.dbl=0.0}, 0.0, INT_MAX, FLAGS},
>      { "2bias", "set bias for 3rd plane", OFFSET(bias[2]),
> AV_OPT_TYPE_FLOAT, {.dbl=0.0}, 0.0, INT_MAX, FLAGS},
> @@ -669,6 +669,7 @@ static int param_init(AVFilterContext *ctx)
>          for (i = 0; i < 4; i++) {
>              int *matrix = (int *)s->matrix[i];
>              char *orig, *p, *arg, *saveptr = NULL;
> +            s->rdiv[i] = s->user_rdiv[i];
>              float sum = 1.f;
>
>              p = orig = av_strdup(s->matrix_str[i]);
> --
> 2.43.2
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Add-float-user_rdiv-4-to-allow-user-options-to-apply.patch
Type: text/x-patch
Size: 3659 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20240224/05604827/attachment.bin>


More information about the ffmpeg-devel mailing list