This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository legacy-imlib2.

View the commit online.

commit 2f5bf344b13e58e394eb46f5dfd9136581428234
Author: Chema Gonzalez <che...@meta.com>
AuthorDate: Tue May 13 08:42:17 2025 -0700

    Y4M loader: add support for 10-bit 4:2:2
    
    Current implementation just discards the last 2 bits.
    
    Tested:
    ```
    $ src/bin/.libs/imlib2_view test/images/img-8x8.yuv422p10.full_range.y4m
    $ feh test/images/img-8x8.yuv422p10.full_range.y4m
    ```
---
 src/modules/loaders/loader_y4m.c             |  30 +++++++++++++++++++++++++++
 test/images/img-8x8.yuv422p10.full_range.y4m | Bin 0 -> 337 bytes
 2 files changed, 30 insertions(+)

diff --git a/src/modules/loaders/loader_y4m.c b/src/modules/loaders/loader_y4m.c
index 5a4bcda..0b7629b 100644
--- a/src/modules/loaders/loader_y4m.c
+++ b/src/modules/loaders/loader_y4m.c
@@ -47,6 +47,7 @@ typedef struct {
         Y4M_PARSE_CS_444,
         Y4M_PARSE_CS_MONO,
         Y4M_PARSE_CS_420P10,
+        Y4M_PARSE_CS_422P10,
         Y4M_PARSE_CS_444P10,
     } colour_space;
     enum {
@@ -216,6 +217,11 @@ y4m__parse_params(Y4mParse *res, const uint8_t **start, const uint8_t *end)
                 res->colour_space = Y4M_PARSE_CS_420;
                 res->depth = 8;
             }
+            else if (y4m__match("422p10", 6, &p, end))
+            {
+                res->colour_space = Y4M_PARSE_CS_422P10;
+                res->depth = 10;
+            }
             else if (y4m__match("422", 3, &p, end))
             {
                 res->colour_space = Y4M_PARSE_CS_422;
@@ -346,6 +352,11 @@ y4m_parse_frame(Y4mParse *res)
         sdiv = 2;
         voff = (npixels * 3) / 2;
         break;
+    case Y4M_PARSE_CS_422P10:
+        res->frame_data_len = npixels * 2 * 2;
+        sdiv = 2;
+        voff = (npixels * 3) / 2;
+        break;
     case Y4M_PARSE_CS_444:
         res->frame_data_len = npixels * 3;
         sdiv = 1;
@@ -474,6 +485,7 @@ _load(ImlibImage *im, int load_data)
         conv = conv_mono;
         break;
     case Y4M_PARSE_CS_422:
+    case Y4M_PARSE_CS_422P10:
         if (y4m.range == Y4M_PARSE_RANGE_FULL)
             conv = J422ToARGB;
         else
@@ -525,6 +537,10 @@ _load(ImlibImage *im, int load_data)
         {
             buf_size = (y4m.w * y4m.h * 3) >> 1;
         }
+        else if (y4m.colour_space == Y4M_PARSE_CS_422P10)
+        {
+            buf_size = (y4m.w * y4m.h * 2);
+        }
         else if (y4m.colour_space == Y4M_PARSE_CS_444P10)
         {
             buf_size = (y4m.w * y4m.h * 3);
@@ -541,6 +557,10 @@ _load(ImlibImage *im, int load_data)
         {
             voff = (npixels * 5) / 4;
         }
+        else if (y4m.colour_space == Y4M_PARSE_CS_422P10)
+        {
+            voff = (npixels * 3) / 2;
+        }
         else if (y4m.colour_space == Y4M_PARSE_CS_444P10)
         {
             voff = npixels * 2;
@@ -554,6 +574,10 @@ _load(ImlibImage *im, int load_data)
         {
             sdiv = 2;
         }
+        else if (y4m.colour_space == Y4M_PARSE_CS_422P10)
+        {
+            sdiv = 2;
+        }
         else if (y4m.colour_space == Y4M_PARSE_CS_444P10)
         {
             sdiv = 1;
@@ -567,6 +591,12 @@ _load(ImlibImage *im, int load_data)
                        y4m.v, y4m.v_stride, buf_y, buf_stride_y,
                        buf_u, buf_stride_u, buf_v, buf_stride_v, y4m.w, y4m.h);
         }
+        else if (y4m.colour_space == Y4M_PARSE_CS_422P10)
+        {
+            I210ToI422(y4m.y, y4m.y_stride, y4m.u, y4m.u_stride,
+                       y4m.v, y4m.v_stride, buf_y, buf_stride_y,
+                       buf_u, buf_stride_u, buf_v, buf_stride_v, y4m.w, y4m.h);
+        }
         else if (y4m.colour_space == Y4M_PARSE_CS_444P10)
         {
             I410ToI444(y4m.y, y4m.y_stride, y4m.u, y4m.u_stride,
diff --git a/test/images/img-8x8.yuv422p10.full_range.y4m b/test/images/img-8x8.yuv422p10.full_range.y4m
new file mode 100644
index 0000000..10ba15c
Binary files /dev/null and b/test/images/img-8x8.yuv422p10.full_range.y4m differ

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to