This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit 091149b187b01f2a6cfb503c0189c0ace09e1c76 Author: Niklas Haas <[email protected]> AuthorDate: Tue Jun 2 14:28:56 2026 +0200 Commit: Niklas Haas <[email protected]> CommitDate: Thu Jun 11 16:27:47 2026 +0000 swscale/ops: group filtered rw metadata into struct This is a minor cosmetic improvement that allows me to use more convenient names for a filter-related metadata fields, without confusion. Sponsored-by: Sovereign Tech Fund Signed-off-by: Niklas Haas <[email protected]> --- libswscale/aarch64/ops_impl_conv.c | 4 ++-- libswscale/ops.c | 16 ++++++++-------- libswscale/ops.h | 6 ++++-- libswscale/ops_dispatch.c | 6 +++--- libswscale/ops_memcpy.c | 4 ++-- libswscale/ops_optimizer.c | 20 ++++++++++---------- libswscale/uops.c | 8 ++++---- libswscale/vulkan/ops.c | 32 ++++++++++++++++---------------- tests/checkasm/sw_ops.c | 14 ++++++++------ 9 files changed, 57 insertions(+), 53 deletions(-) diff --git a/libswscale/aarch64/ops_impl_conv.c b/libswscale/aarch64/ops_impl_conv.c index a66b91b6fb..b360e86a8d 100644 --- a/libswscale/aarch64/ops_impl_conv.c +++ b/libswscale/aarch64/ops_impl_conv.c @@ -78,7 +78,7 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, /* Map SwsOpType to SwsAArch64OpType */ switch (op->op) { case SWS_OP_READ: - if (op->rw.filter) + if (op->rw.filter.op) return AVERROR(ENOTSUP); /** * The different types of read operations have been split into @@ -94,7 +94,7 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, out->op = AARCH64_SWS_OP_READ_PLANAR; break; case SWS_OP_WRITE: - if (op->rw.filter) + if (op->rw.filter.op) return AVERROR(ENOTSUP); /** * The different types of write operations have been split into diff --git a/libswscale/ops.c b/libswscale/ops.c index b28dbec75f..f18249cc1f 100644 --- a/libswscale/ops.c +++ b/libswscale/ops.c @@ -382,9 +382,9 @@ void ff_sws_op_list_update_comps(SwsOpList *ops) op->comps.max[i] = prev.max[i]; } - if (op->rw.filter) { + if (op->rw.filter.op) { const SwsComps prev = op->comps; - apply_filter_weights(&op->comps, &prev, op->rw.kernel); + apply_filter_weights(&op->comps, &prev, op->rw.filter.kernel); } break; case SWS_OP_SWAP_BYTES: @@ -590,7 +590,7 @@ static void op_uninit(SwsOp *op) { switch (op->op) { case SWS_OP_READ: - av_refstruct_unref(&op->rw.kernel); + av_refstruct_unref(&op->rw.filter.kernel); break; case SWS_OP_DITHER: av_refstruct_unref(&op->dither.matrix); @@ -652,8 +652,8 @@ SwsOpList *ff_sws_op_list_duplicate(const SwsOpList *ops) const SwsOp *op = ©->ops[i]; switch (op->op) { case SWS_OP_READ: - if (op->rw.kernel) - av_refstruct_ref(op->rw.kernel); + if (op->rw.filter.kernel) + av_refstruct_ref(op->rw.filter.kernel); break; case SWS_OP_DITHER: av_refstruct_ref(op->dither.matrix); @@ -866,12 +866,12 @@ void ff_sws_op_desc(AVBPrint *bp, const SwsOp *op) av_bprintf(bp, "%-20s: %d elem(s) %s >> %d", name, op->rw.elems, op->rw.packed ? "packed" : "planar", op->rw.frac); - if (!op->rw.filter) + if (!op->rw.filter.op) break; - const SwsFilterWeights *kernel = op->rw.kernel; + const SwsFilterWeights *kernel = op->rw.filter.kernel; av_bprintf(bp, " + %d tap %s filter (%c)", kernel->filter_size, kernel->name, - op->rw.filter == SWS_OP_FILTER_H ? 'H' : 'V'); + op->rw.filter.op == SWS_OP_FILTER_H ? 'H' : 'V'); break; case SWS_OP_LSHIFT: av_bprintf(bp, "%-20s: << %u", name, op->shift.amount); diff --git a/libswscale/ops.h b/libswscale/ops.h index ad0888f7a0..b58a060c6e 100644 --- a/libswscale/ops.h +++ b/libswscale/ops.h @@ -104,8 +104,10 @@ typedef struct SwsReadWriteOp { * Note: As with SWS_OP_FILTER_*, if a filter kernel is in use, the read * operation will always output floating point values. */ - SwsOpType filter; /* some value of SWS_OP_FILTER_* */ - SwsFilterWeights *kernel; /* (refstruct) */ + struct { + SwsOpType op; /* some value of SWS_OP_FILTER_* */ + SwsFilterWeights *kernel; /* (refstruct) */ + } filter; } SwsReadWriteOp; typedef struct SwsPackOp { diff --git a/libswscale/ops_dispatch.c b/libswscale/ops_dispatch.c index 7a9a527bcb..1186a8a73e 100644 --- a/libswscale/ops_dispatch.c +++ b/libswscale/ops_dispatch.c @@ -551,8 +551,8 @@ static int compile(SwsGraph *graph, const SwsOpBackend *backend, p->idx_out[i] = i < p->planes_out ? ops->plane_dst[i] : -1; } - const SwsFilterWeights *filter = read->rw.kernel; - if (read->rw.filter == SWS_OP_FILTER_V) { + const SwsFilterWeights *filter = read->rw.filter.kernel; + if (read->rw.filter.op == SWS_OP_FILTER_V) { p->offsets_y = av_refstruct_ref(filter->offsets); /* Compute relative pointer bumps for each output line */ @@ -570,7 +570,7 @@ static int compile(SwsGraph *graph, const SwsOpBackend *backend, } bump[filter->dst_size - 1] = 0; p->exec_base.in_bump_y = bump; - } else if (read->rw.filter == SWS_OP_FILTER_H) { + } else if (read->rw.filter.op == SWS_OP_FILTER_H) { /* Compute pixel offset map for each output line */ const int pixels = FFALIGN(filter->dst_size, p->comp.block_size); int32_t *offset = av_malloc_array(pixels, sizeof(*offset)); diff --git a/libswscale/ops_memcpy.c b/libswscale/ops_memcpy.c index cce7aa3013..00f3e79608 100644 --- a/libswscale/ops_memcpy.c +++ b/libswscale/ops_memcpy.c @@ -78,7 +78,7 @@ static int compile(SwsContext *ctx, const SwsOpList *ops, SwsCompiledOp *out) const SwsOp *op = &ops->ops[n]; switch (op->op) { case SWS_OP_READ: - if ((op->rw.packed && op->rw.elems != 1) || op->rw.frac || op->rw.filter) + if ((op->rw.packed && op->rw.elems != 1) || op->rw.frac || op->rw.filter.op) return AVERROR(ENOTSUP); for (int i = 0; i < op->rw.elems; i++) p.index[i] = i; @@ -121,7 +121,7 @@ static int compile(SwsContext *ctx, const SwsOpList *ops, SwsCompiledOp *out) break; case SWS_OP_WRITE: - if ((op->rw.packed && op->rw.elems != 1) || op->rw.frac || op->rw.filter) + if ((op->rw.packed && op->rw.elems != 1) || op->rw.frac || op->rw.filter.op) return AVERROR(ENOTSUP); p.num_planes = op->rw.elems; break; diff --git a/libswscale/ops_optimizer.c b/libswscale/ops_optimizer.c index 619c6cf42b..829bd3d0c9 100644 --- a/libswscale/ops_optimizer.c +++ b/libswscale/ops_optimizer.c @@ -412,7 +412,7 @@ retry: op->rw.elems = nb_planes; RET(ff_sws_op_list_insert_at(ops, n + 1, &(SwsOp) { .op = SWS_OP_SWIZZLE, - .type = op->rw.filter ? SWS_PIXEL_F32 : op->type, + .type = op->rw.filter.op ? SWS_PIXEL_F32 : op->type, .swizzle = swiz, })); goto retry; @@ -735,10 +735,10 @@ retry: case SWS_OP_FILTER_H: case SWS_OP_FILTER_V: /* Merge with prior simple planar read */ - if (prev->op == SWS_OP_READ && !prev->rw.filter && + if (prev->op == SWS_OP_READ && !prev->rw.filter.op && !prev->rw.packed && !prev->rw.frac) { - prev->rw.filter = op->op; - prev->rw.kernel = av_refstruct_ref(op->filter.kernel); + prev->rw.filter.op = op->op; + prev->rw.filter.kernel = av_refstruct_ref(op->filter.kernel); ff_sws_op_list_remove_at(ops, n, 1); goto retry; } @@ -803,7 +803,7 @@ int ff_sws_solve_shuffle(const SwsOpList *const ops, uint8_t shuffle[], return AVERROR(EINVAL); const SwsOp *read = ff_sws_op_list_input(ops); - if (!read || read->rw.frac || read->rw.filter || + if (!read || read->rw.frac || read->rw.filter.op || (!read->rw.packed && read->rw.elems > 1)) return AVERROR(ENOTSUP); @@ -854,7 +854,7 @@ int ff_sws_solve_shuffle(const SwsOpList *const ops, uint8_t shuffle[], } case SWS_OP_WRITE: { - if (op->rw.frac || op->rw.filter || + if (op->rw.frac || op->rw.filter.op || (!op->rw.packed && op->rw.elems > 1)) return AVERROR(ENOTSUP); @@ -938,10 +938,10 @@ static void get_input_size(const SwsOpList *ops, SwsFormat *fmt) fmt->height = ops->src.height; const SwsOp *read = ff_sws_op_list_input(ops); - if (read && read->rw.filter == SWS_OP_FILTER_V) { - fmt->height = read->rw.kernel->dst_size; - } else if (read && read->rw.filter == SWS_OP_FILTER_H) { - fmt->width = read->rw.kernel->dst_size; + if (read && read->rw.filter.op == SWS_OP_FILTER_V) { + fmt->height = read->rw.filter.kernel->dst_size; + } else if (read && read->rw.filter.op == SWS_OP_FILTER_H) { + fmt->width = read->rw.filter.kernel->dst_size; } } diff --git a/libswscale/uops.c b/libswscale/uops.c index 7af8a8af51..2de9c33eac 100644 --- a/libswscale/uops.c +++ b/libswscale/uops.c @@ -475,16 +475,16 @@ static int translate_rw_op(SwsContext *ctx, SwsUOpList *ops, SwsUOpFlags flags, }; /* Non-filtered reads don't care about the exact pixel contents */ - if (!op->rw.filter) + if (!op->rw.filter.op) uop.type = pixel_type_to_int(op->type); const bool is_read = op->op == SWS_OP_READ; - if (op->rw.filter) { + if (op->rw.filter.op) { if (op->op == SWS_OP_WRITE || op->rw.frac || op->rw.packed) return AVERROR(ENOTSUP); uop.par.filter.type = SWS_PIXEL_F32; - uop.data.kernel = av_refstruct_ref(op->rw.kernel); - if (op->rw.filter == SWS_OP_FILTER_H) { + uop.data.kernel = av_refstruct_ref(op->rw.filter.kernel); + if (op->rw.filter.op == SWS_OP_FILTER_H) { uop.uop = SWS_UOP_READ_PLANAR_FH; } else if (check_filter_fma(ctx, flags, op)) { uop.uop = SWS_UOP_READ_PLANAR_FV_FMA; diff --git a/libswscale/vulkan/ops.c b/libswscale/vulkan/ops.c index 702bbdf38f..e4f815124e 100644 --- a/libswscale/vulkan/ops.c +++ b/libswscale/vulkan/ops.c @@ -272,9 +272,9 @@ static int create_bufs(FFVulkanOpsCtx *s, VulkanPriv *p, const SwsOpList *ops) goto fail; p->nb_data_bufs++; } else if ((op->op == SWS_OP_READ || - op->op == SWS_OP_WRITE) && op->rw.filter) { + op->op == SWS_OP_WRITE) && op->rw.filter.op) { av_assert0(p->nb_data_bufs + 1 <= FF_ARRAY_ELEMS(p->data_bufs)); - err = create_filter_buf(s, p, op->rw.kernel, + err = create_filter_buf(s, p, op->rw.filter.kernel, &p->data_bufs[p->nb_data_bufs]); if (err < 0) goto fail; @@ -981,12 +981,12 @@ static int add_ops_spirv(SwsContext *sws, VulkanPriv *p, FFVulkanOpsCtx *s, d->id = spi_get_id(spi); d->binding = nb_data_bufs; var_id = d->id; - } else if (op->op == SWS_OP_READ && op->rw.filter) { + } else if (op->op == SWS_OP_READ && op->rw.filter.op) { if (id->nb_filter_bufs >= MAX_FILT_BUFS) return AVERROR(ENOTSUP); - const SwsFilterWeights *wd = op->rw.kernel; + const SwsFilterWeights *wd = op->rw.filter.kernel; struct FilterData *f = &id->filt[id->nb_filter_bufs++]; - f->filter = op->rw.filter; + f->filter = op->rw.filter.op; f->filter_size = wd->filter_size; f->dst_size = wd->dst_size; f->num_weights = wd->num_weights; @@ -1130,9 +1130,9 @@ static int add_ops_spirv(SwsContext *sws, VulkanPriv *p, FFVulkanOpsCtx *s, switch (op->op) { case SWS_OP_READ: - if (op->rw.frac) { + if (op->rw.frac || op->rw.filter.op) { return AVERROR(ENOTSUP); - } else if (op->rw.filter) { + } else if (op->rw.filter.op) { data = read_filtered(spi, id, ops, op, &id->filt[nb_filter_used++], in_img, gid, gi2); @@ -1152,7 +1152,7 @@ static int add_ops_spirv(SwsContext *sws, VulkanPriv *p, FFVulkanOpsCtx *s, } break; case SWS_OP_WRITE: - if (op->rw.frac || op->rw.filter) { + if (op->rw.frac || op->rw.filter.op) { return AVERROR(ENOTSUP); } else if (op->rw.packed) { spi_OpImageWrite(spi, out_img[ops->plane_dst[0]], dst_gid, data, @@ -1316,13 +1316,13 @@ static void read_glsl(const SwsOpList *ops, const SwsOp *op, FFVulkanShader *shd int idx, const char *type_name, const char *type_v, const char *type_s) { - const SwsFilterWeights *wd = op->rw.kernel; + const SwsFilterWeights *wd = op->rw.filter.kernel; const int interlaced = ops->src.interlaced; - if (op->rw.filter) { - const char *axis = op->rw.filter == SWS_OP_FILTER_H ? "pos.x" : "pos.y"; - const char *coord_x = op->rw.filter == SWS_OP_FILTER_H ? "o + i" : "pos.x"; + if (op->rw.filter.op) { + const char *axis = op->rw.filter.op == SWS_OP_FILTER_H ? "pos.x" : "pos.y"; + const char *coord_x = op->rw.filter.op == SWS_OP_FILTER_H ? "o + i" : "pos.x"; const char *coord_y; - if (op->rw.filter == SWS_OP_FILTER_H) + if (op->rw.filter.op == SWS_OP_FILTER_H) coord_y = interlaced ? "spos.y" : "pos.y"; else coord_y = interlaced ? "((o + i) * 2 + int(params.field))" : "o + i"; @@ -1411,10 +1411,10 @@ static int add_ops_glsl(SwsContext *sws, VulkanPriv *p, FFVulkanOpsCtx *s, nb_desc++; } else if (op->op == SWS_OP_FILTER_H || op->op == SWS_OP_FILTER_V || ((op->op == SWS_OP_READ || op->op == SWS_OP_WRITE) && - op->rw.filter)) { + op->rw.filter.op)) { const SwsFilterWeights *wd = (op->op == SWS_OP_READ || op->op == SWS_OP_WRITE) ? - op->rw.kernel : op->filter.kernel; + op->rw.filter.kernel : op->filter.kernel; snprintf(data_buf_name[nb_desc], 256, "filter_buf%i", n); snprintf(data_str_name[nb_desc], 256, "float filter_w%i[%i][%i];\n" @@ -1486,7 +1486,7 @@ static int add_ops_glsl(SwsContext *sws, VulkanPriv *p, FFVulkanOpsCtx *s, } case SWS_OP_WRITE: { const char *dst_pos = ops->dst.interlaced ? "dpos" : "pos"; - if (op->rw.frac || op->rw.filter) { + if (op->rw.frac || op->rw.filter.op) { return AVERROR(ENOTSUP); } else if (op->rw.packed) { GLSLF(1, imageStore(dst_img[%i], %s, %s(%s)); , diff --git a/tests/checkasm/sw_ops.c b/tests/checkasm/sw_ops.c index 90eb9d3fb7..01ffb0e048 100644 --- a/tests/checkasm/sw_ops.c +++ b/tests/checkasm/sw_ops.c @@ -173,8 +173,8 @@ static void check_compiled(const char *name, } int32_t in_bump_y[LINES]; - if (read_op->rw.filter == SWS_OP_FILTER_V) { - const int *offsets = read_op->rw.kernel->offsets; + if (read_op->rw.filter.op == SWS_OP_FILTER_V) { + const int *offsets = read_op->rw.filter.kernel->offsets; for (int y = 0; y < LINES - 1; y++) in_bump_y[y] = offsets[y + 1] - offsets[y] - 1; in_bump_y[LINES - 1] = 0; @@ -182,8 +182,8 @@ static void check_compiled(const char *name, } int32_t in_offset_x[PIXELS]; - if (read_op->rw.filter == SWS_OP_FILTER_H) { - const int *offsets = read_op->rw.kernel->offsets; + if (read_op->rw.filter.op == SWS_OP_FILTER_H) { + const int *offsets = read_op->rw.filter.kernel->offsets; const int rw_bits = rw_pixel_bits(read_op); for (int x = 0; x < PIXELS; x++) in_offset_x[x] = offsets[x] * rw_bits >> 3; @@ -466,8 +466,10 @@ static void check_filter(const char *name, const SwsUOp *uop) .op = SWS_OP_READ, .type = uop->type, .rw.elems = num, - .rw.filter = is_vert ? SWS_OP_FILTER_V : SWS_OP_FILTER_H, - .rw.kernel = filter, + .rw.filter = { + .op = is_vert ? SWS_OP_FILTER_V : SWS_OP_FILTER_H, + .kernel = filter, + }, }, { .op = SWS_OP_WRITE, .type = SWS_PIXEL_F32, _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
