Commit 29333daae7 for ffmpeg

commit 29333daae756042f373d8edc5d310219434797fb
Author: Ramiro Polla <ramiro.polla@gmail.com>
Date:   Sun Jul 19 12:12:43 2026 +0200

    swscale/uops: move some simple pixel functions to header file

    They are useful functions to be used elsewhere, and they are simple
    enough to make sense having them in a header file.

    Sponsored-by: Sovereign Tech Fund
    Signed-off-by: Ramiro Polla <ramiro.polla@gmail.com>

diff --git a/libswscale/uops.c b/libswscale/uops.c
index 316572d472..eb5b4e881c 100644
--- a/libswscale/uops.c
+++ b/libswscale/uops.c
@@ -47,36 +47,7 @@ static const struct {
 #undef UOP_NAME
 };

-static SwsPixel pixel_from_q64(SwsPixelType type, AVRational64 val)
-{
-    av_assert1(val.den != 0);
-    switch (type) {
-    case SWS_PIXEL_U8:  return (SwsPixel) { .u8  = val.num / val.den };
-    case SWS_PIXEL_U16: return (SwsPixel) { .u16 = val.num / val.den };
-    case SWS_PIXEL_U32: return (SwsPixel) { .u32 = val.num / val.den };
-    case SWS_PIXEL_F32: return (SwsPixel) { .f32 = (float) val.num / val.den };
-    case SWS_PIXEL_NONE:
-    case SWS_PIXEL_TYPE_NB: break;
-    }
-
-    av_unreachable("Invalid pixel type!");
-    return (SwsPixel) {0};
-}
-
-#define Q2PIXEL(val) pixel_from_q64(op->type, val)
-
-static bool pixel_is_1s(SwsPixelType type, SwsPixel val)
-{
-    switch (ff_sws_pixel_type_size(type)) {
-    case 1: return val.u8  == UINT8_MAX;
-    case 2: return val.u16 == UINT16_MAX;
-    case 4: return val.u32 == UINT32_MAX;
-    default: break;
-    }
-
-    av_unreachable("Invalid pixel type!");
-    return false;
-}
+#define Q2PIXEL(val) ff_sws_pixel_from_q64(op->type, val)

 void ff_sws_uop_name(const SwsUOp *op, char buf[SWS_UOP_NAME_MAX])
 {
@@ -267,8 +238,8 @@ static bool exact_prod(SwsPixelType type, SwsPixel coef,
     else if (!minq.den || !maxq.den)
         return false; /* unknown bounds */

-    const SwsPixel min = pixel_from_q64(type, minq);
-    const SwsPixel max = pixel_from_q64(type, maxq);
+    const SwsPixel min = ff_sws_pixel_from_q64(type, minq);
+    const SwsPixel max = ff_sws_pixel_from_q64(type, maxq);
     switch (type) {
     case SWS_PIXEL_F32:
         return exact_product_f32(coef.f32, min.f32) &&
@@ -610,7 +581,7 @@ static int translate_op(SwsContext *ctx, SwsUOpList *uops, SwsUOpFlags flags,
             uop.data.vec4[i] = px;
             if (v.num == 0)
                 uop.par.clear.zero |= SWS_COMP(i);
-            else if (pixel_is_1s(op->type, px))
+            else if (ff_sws_pixel_is_1s(op->type, px))
                 uop.par.clear.one |= SWS_COMP(i);
         }
         break;
diff --git a/libswscale/uops.h b/libswscale/uops.h
index f044da4547..a297070f76 100644
--- a/libswscale/uops.h
+++ b/libswscale/uops.h
@@ -30,6 +30,7 @@
  ***************************************************************************/

 #include "libavutil/attributes.h"
+#include "rational64.h"

 typedef struct SwsContext       SwsContext;
 typedef struct SwsFilterWeights SwsFilterWeights;
@@ -87,6 +88,30 @@ typedef union SwsPixel {
 /* Ensures (SwsPixel) {0} is properly initialized to all zeros */
 static_assert(sizeof(SwsPixel) == sizeof(char[4]), "SwsPixel size mismatch");

+static inline SwsPixel ff_sws_pixel_from_q64(SwsPixelType type, AVRational64 val)
+{
+    switch (type) {
+    case SWS_PIXEL_U8:  return (SwsPixel) { .u8  = val.num / val.den };
+    case SWS_PIXEL_U16: return (SwsPixel) { .u16 = val.num / val.den };
+    case SWS_PIXEL_U32: return (SwsPixel) { .u32 = val.num / val.den };
+    case SWS_PIXEL_F32: return (SwsPixel) { .f32 = (float) val.num / val.den };
+    case SWS_PIXEL_NONE:
+    case SWS_PIXEL_TYPE_NB: break;
+    }
+    return (SwsPixel) {0};
+}
+
+static inline bool ff_sws_pixel_is_1s(SwsPixelType type, SwsPixel val)
+{
+    switch (ff_sws_pixel_type_size(type)) {
+    case 1: return val.u8  == UINT8_MAX;
+    case 2: return val.u16 == UINT16_MAX;
+    case 4: return val.u32 == UINT32_MAX;
+    default: break;
+    }
+    return false;
+}
+
 /**
  * Bit-mask of components. Exact meaning depends on the usage context.
  */