This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit ae7e2412b75986f2282a03f8a0d36e20da321954 Author: Niklas Haas <[email protected]> AuthorDate: Tue Nov 3 20:49:12 2026 +0100 Commit: Niklas Haas <[email protected]> CommitDate: Sun Nov 8 01:48:12 2026 +0000 swscale/x86/ops: pack the filter private data Signed-off-by: Niklas Haas <[email protected]> --- libswscale/x86/ops.c | 38 ++++++++++++++++++++++++++++++-------- libswscale/x86/ops_float.asm | 12 ++++++------ 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/libswscale/x86/ops.c b/libswscale/x86/ops.c index 3c6e783bd6..ab9a5c7a8f 100644 --- a/libswscale/x86/ops.c +++ b/libswscale/x86/ops.c @@ -43,11 +43,18 @@ static int setup_rw_packed(const SwsImplParams *params, SwsImplResult *out) return 0; } +/* Private data for the filter kernels; layout hard-coded in ops_float.asm */ +typedef struct FilterPriv { + void *weights; + size_t filter_size; +} FilterPriv; + +static_assert(offsetof(FilterPriv, filter_size) == sizeof(void *), + "FilterPriv layout mismatch"); + static int setup_filter_v(const SwsImplParams *params, SwsImplResult *out) { const SwsFilterWeights *filter = params->uop->data.kernel; - static_assert(sizeof(out->priv.ptr) <= sizeof(int32_t[2]), - ">8 byte pointers not supported"); /* Pre-convert weights to float */ float *weights = ff_refstruct_calloc(filter->num_weights, sizeof(float)); @@ -57,8 +64,13 @@ static int setup_filter_v(const SwsImplParams *params, SwsImplResult *out) for (int i = 0; i < filter->num_weights; i++) weights[i] = (float) filter->weights[i] / SWS_FILTER_SCALE; - out->ref = out->priv.ptr = weights; - out->priv.uptr[1] = filter->filter_size; + const FilterPriv priv = { + .weights = weights, + .filter_size = filter->filter_size, + }; + + SWS_OP_PRIV_PACK(out, priv); + out->ref = priv.weights; return 0; } @@ -149,8 +161,13 @@ static int setup_filter_h(const SwsImplParams *params, SwsImplResult *out) } } - out->ref = out->priv.ptr = weights.ptr; - out->priv.uptr[1] = aligned_size; + const FilterPriv priv = { + .weights = weights.ptr, + .filter_size = aligned_size, + }; + + SWS_OP_PRIV_PACK(out, priv); + out->ref = priv.weights; for (int i = 0; i < 4; i++) { if (uop->mask & SWS_COMP(i)) @@ -235,8 +252,13 @@ static int setup_filter_h_4x4(const SwsImplParams *params, SwsImplResult *out) } } - out->ref = out->priv.ptr = weights.ptr; - out->priv.uptr[1] = aligned_size * sizeof_weights; + const FilterPriv priv = { + .weights = weights.ptr, + .filter_size = aligned_size * sizeof_weights, + }; + + SWS_OP_PRIV_PACK(out, priv); + out->ref = priv.weights; for (int i = 0; i < 4; i++) { if (uop->mask & SWS_COMP(i)) diff --git a/libswscale/x86/ops_float.asm b/libswscale/x86/ops_float.asm index fe46cffe9d..54facff8aa 100644 --- a/libswscale/x86/ops_float.asm +++ b/libswscale/x86/ops_float.asm @@ -93,8 +93,8 @@ IF W, %1 mw2, m11, m12 assert_idn FILTER_TYPE, SWS_PIXEL_F32 %assign SIZEOF_WEIGHT 4 - mov weights, [implq + SwsOpImpl.priv] ; float *weights - mov fltsize, [implq + SwsOpImpl.priv + 8] ; size_t filter_size + mov weights, [implq + SwsOpImpl.priv] ; float *weights + mov fltsize, [implq + SwsOpImpl.priv + gprsize] ; size_t filter_size ; weights += filter_size * y * sizeof(float) mov tmp2q, fltsize imul tmp2q, yq @@ -216,7 +216,7 @@ assert_idn FILTER_TYPE, SWS_PIXEL_F32 %endif mov tmp0q, [execq + SwsOpExec.in_offset_x] - mov fltsize, [implq + SwsOpImpl.priv + 8] ; size_t filter_size + mov fltsize, [implq + SwsOpImpl.priv + gprsize] ; size_t filter_size mov tmp2d, bxd shl_log2 tmp2q, FILTER_WIDTH ; x := bx * FILTER_WIDTH movu m14, [tmp0q + 4 * tmp2q] ; &exec->in_offset_x[x] @@ -428,9 +428,9 @@ assert_idn FILTER_TYPE, SWS_PIXEL_F32 push offset2q push offset3q shl_log2 bxq, FILTER_WIDTH ; x := bx * FILTER_WIDTH - mov weights, [implq + SwsOpImpl.priv] ; int16_t *weights - mov tmp1d, [implq + SwsOpImpl.priv + 8] ; size_t filter_size - mov offsets, [execq + SwsOpExec.in_offset_x] ; int32_t *offsets + mov weights, [implq + SwsOpImpl.priv] ; int16_t *weights + mov tmp1d, [implq + SwsOpImpl.priv + gprsize] ; size_t filter_size + mov offsets, [execq + SwsOpExec.in_offset_x] ; int32_t *offsets lea offsets, [offsets + 4 * bxq] ; offsets += x * sizeof(int32_t) imul bxq, fltsize add weights, bxq ; weights += x * filter_size -- To stop receiving notification emails like this one, please contact [email protected]. _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
