This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit a3681a2ed7b49e0d865d95b5e7ebcaabba29dba3 Author: Niklas Haas <[email protected]> AuthorDate: Mon Jul 6 15:03:07 2026 +0200 Commit: Niklas Haas <[email protected]> CommitDate: Fri Oct 2 14:11:50 2026 +0200 swscale/uops: move expand_bit from translation stage to optimizer In anticipation of SWS_OP_SCALE being nuked. Sponsored-by: Sovereign Tech Fund Signed-off-by: Niklas Haas <[email protected]> Signed-off-by: Ramiro Polla <[email protected]> --- libswscale/ops_optimizer.c | 18 +++++++++++++++--- libswscale/uops.c | 26 ++------------------------ 2 files changed, 17 insertions(+), 27 deletions(-) diff --git a/libswscale/ops_optimizer.c b/libswscale/ops_optimizer.c index a11fee293a..8a48c01fb1 100644 --- a/libswscale/ops_optimizer.c +++ b/libswscale/ops_optimizer.c @@ -1011,7 +1011,8 @@ static int solve_shuffle(const SwsUOpList *const uops, SwsUOp *out) return AVERROR(EINVAL); } -static int is_integer_scale(const SwsUOp *op, int64_t val) +/* Only checks exact integer scale ops */ +static bool is_scale(const SwsUOp *op, int64_t val) { if (op->uop != SWS_UOP_SCALE) return false; @@ -1035,7 +1036,7 @@ retry: switch (op->uop) { case SWS_UOP_TO_U16: - if (is_integer_scale(next, 0x101)) { + if (ff_sws_pixel_type_is_int(op->type) && is_scale(next, 0x101)) { op->uop = SWS_UOP_EXPAND_PAIR; ff_sws_uop_list_remove_at(uops, i + 1, 1); goto retry; @@ -1043,12 +1044,23 @@ retry: break; case SWS_UOP_TO_U32: - if (is_integer_scale(next, 0x1010101)) { + if (ff_sws_pixel_type_is_int(op->type) && is_scale(next, 0x1010101)) { op->uop = SWS_UOP_EXPAND_QUAD; ff_sws_uop_list_remove_at(uops, i + 1, 1); goto retry; } break; + + case SWS_UOP_SCALE: + if (flags & SWS_UOP_FLAG_EXPAND_BIT) { + const int bits = 8 * ff_sws_pixel_type_size(op->type); + if (is_scale(op, UINT64_MAX >> (64 - bits))) { + op->uop = SWS_UOP_EXPAND_BIT; + memset(&op->par, 0, sizeof(op->par)); + goto retry; + } + } + break; } } diff --git a/libswscale/uops.c b/libswscale/uops.c index dbcdc07d89..bd9c729402 100644 --- a/libswscale/uops.c +++ b/libswscale/uops.c @@ -547,24 +547,6 @@ static int translate_linear_op(SwsContext *ctx, SwsUOpList *ops, return ff_sws_uop_list_append(ops, &uop); } -static bool is_expand_bit(SwsPixelType type, AVRational64 factor) -{ - if (factor.den != 1) - return false; - - switch (type) { - case SWS_PIXEL_U8: return factor.num == UINT8_MAX; - case SWS_PIXEL_U16: return factor.num == UINT16_MAX; - case SWS_PIXEL_U32: return factor.num == UINT32_MAX; - case SWS_PIXEL_F32: return false; - case SWS_PIXEL_NONE: - case SWS_PIXEL_TYPE_NB: break; - } - - av_unreachable("Invalid pixel type!"); - return false; -} - static int translate_op(SwsContext *ctx, SwsUOpList *uops, SwsUOpFlags flags, const SwsOp *op, const SwsComps *input) { @@ -633,12 +615,8 @@ static int translate_op(SwsContext *ctx, SwsUOpList *uops, SwsUOpFlags flags, } break; case SWS_OP_SCALE: - if ((flags & SWS_UOP_FLAG_EXPAND_BIT) && is_expand_bit(op->type, op->scale.factor)) { - uop.uop = SWS_UOP_EXPAND_BIT; - } else { - uop.uop = SWS_UOP_SCALE; - uop.data.scalar = Q2PIXEL(op->scale.factor); - } + uop.uop = SWS_UOP_SCALE; + uop.data.scalar = Q2PIXEL(op->scale.factor); break; case SWS_OP_MIN: case SWS_OP_MAX: -- 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]
