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]

Reply via email to