avfilter/vf_gainmap: don't use sizeof(AVGainMapParams)

It's not part of the ABI.

Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
James Almer committed 2026-10-06 13:24:15 -03:00
1 parent 91c4a5258c
commit a01246f079
1 file changed
+17 -14
+17 -14
View File
@@ -110,7 +110,8 @@ typedef struct GainMapContext {
enum GainMapMeasure measure;
/* Generated gain map parameters (recomputed per frame) */
AVGainMapParams params;
AVGainMapParams *params;
size_t params_size;
} GainMapContext;
typedef struct ThreadData {
@@ -171,8 +172,8 @@ static void setup_range(AVFilterContext *ctx, int ch, AVRational min, AVRational
s->quant_offset[ch] = -minf * s->quant_scale[ch];
}
s->params.channels[ch].gain_map_min = min;
s->params.channels[ch].gain_map_max = max;
s->params->channels[ch].gain_map_min = min;
s->params->channels[ch].gain_map_max = max;
av_log(ctx, AV_LOG_TRACE, "channel %d: measured min=%g max=%g\n",
ch, av_q2d(min), av_q2d(max));
}
@@ -181,7 +182,7 @@ static void setup_gamma(AVFilterContext *ctx, int ch, AVRational gamma)
{
GainMapContext *s = ctx->priv;
s->quant_gamma[ch] = av_q2d(gamma);
s->params.channels[ch].gamma = gamma;
s->params->channels[ch].gamma = gamma;
av_log(ctx, AV_LOG_TRACE, "channel %d: measured gamma=%g\n",
ch, s->quant_gamma[ch]);
}
@@ -208,15 +209,17 @@ static av_cold int init(AVFilterContext *ctx)
"parameters from the input frame.\n");
}
s->params = (AVGainMapParams) {
.version = 0,
.nb_channels = s->nb_channels,
.use_base_color_space = s->colorspace == GAINMAP_CSP_BASE,
/* payload metadata recomputed per frame */
};
s->params = av_gain_map_params_alloc(&s->params_size);
if (!s->params)
return AVERROR(ENOMEM);
/* payload metadata recomputed per frame */
s->params->version = 0;
s->params->nb_channels = s->nb_channels;
s->params->use_base_color_space = s->colorspace == GAINMAP_CSP_BASE;
for (int c = 0; c < s->nb_channels; c++) {
struct AVGainMapChannel *ch = &s->params.channels[c];
struct AVGainMapChannel *ch = &s->params->channels[c];
ch->base_offset = s->base_offset;
ch->alternate_offset = s->alt_offset;
if (!(s->measure & MEASURE_RANGE))
@@ -338,8 +341,8 @@ static int setup_colorspace(AVFilterContext *ctx, const AVFrame *base, const AVF
double alt_lw = s->alt_nits.den ? av_q2d(s->alt_nits) : frame_luminance(alt);
double base_headroom = fmax(log2(base_lw / SDR_DIFFUSE_WHITE), 0.0);
double alt_headroom = fmax(log2(alt_lw / SDR_DIFFUSE_WHITE), 0.0);
s->params.base_hdr_headroom = quantq(base_headroom, AV_ROUND_NEAR_INF);
s->params.alternate_hdr_headroom = quantq(alt_headroom, AV_ROUND_NEAR_INF);
s->params->base_hdr_headroom = quantq(base_headroom, AV_ROUND_NEAR_INF);
s->params->alternate_hdr_headroom = quantq(alt_headroom, AV_ROUND_NEAR_INF);
s->sign = FFDIFFSIGN(alt_headroom, base_headroom);
if (!s->sign) {
/* No-op, set up empty gain map */
@@ -680,7 +683,7 @@ skip:;
goto fail;
}
*params = s->params;
memcpy(params, s->params, s->params_size);
if (av_gain_map_params_validate(params) < 0)
return AVERROR_BUG; /* should never happen */