---
 libswscale/input.c            | 28 ++++++++++++++++++++++++++++
 libswscale/swscale-test.c     |  4 +++-
 libswscale/swscale_internal.h |  4 +++-
 libswscale/swscale_unscaled.c |  1 +
 libswscale/utils.c            |  2 ++
 5 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/libswscale/input.c b/libswscale/input.c
index 1ffdfe5..538c6e4 100644
--- a/libswscale/input.c
+++ b/libswscale/input.c
@@ -419,6 +419,26 @@ static void bswap16UV_c(uint8_t *_dstU, uint8_t *_dstV, 
const uint8_t *_src1,
     }
 }
 
+static void bswap16gray_c(uint8_t *_dst, const uint8_t *_src, int width,
+                          uint32_t *unused)
+{
+    int i;
+    const uint16_t *src = (const uint16_t *)_src;
+    uint16_t *dst       = (uint16_t *)_dst;
+    for (i = 0; i < width; i++)
+        dst[i] = av_bswap16(src[i * 2]);
+}
+
+static void bswap16alpha_c(uint8_t *_dst, const uint8_t *_src, int width,
+                           uint32_t *unused)
+{
+    int i;
+    const uint16_t *src = (const uint16_t *)_src;
+    uint16_t *dst       = (uint16_t *)_dst;
+    for (i = 0; i < width; i++)
+        dst[i] = av_bswap16(src[i * 2 + 1]);
+}
+
 /* This is almost identical to the previous, end exists only because
  * yuy2ToY/UV)(dst, src + 1, ...) would have 100% unaligned accesses. */
 static void uyvyToY_c(uint8_t *dst, const uint8_t *src, int width,
@@ -961,6 +981,10 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
         c->lumToYV12 = bswap16Y_c;
         c->alpToYV12 = bswap16Y_c;
         break;
+    case AV_PIX_FMT_YA16LE:
+        c->lumToYV12 = bswap16gray_c;
+        c->alpToYV12 = bswap16alpha_c;
+        break;
 #else
     case AV_PIX_FMT_YUV444P9BE:
     case AV_PIX_FMT_YUV422P9BE:
@@ -986,6 +1010,10 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
         c->lumToYV12 = bswap16Y_c;
         c->alpToYV12 = bswap16Y_c;
         break;
+    case AV_PIX_FMT_YA16BE:
+        c->lumToYV12 = bswap16gray_c;
+        c->alpToYV12 = bswap16alpha_c;
+        break;
 #endif
     case AV_PIX_FMT_YUYV422:
     case AV_PIX_FMT_YVYU422:
diff --git a/libswscale/swscale-test.c b/libswscale/swscale-test.c
index 7cf2dc0..8063519 100644
--- a/libswscale/swscale-test.c
+++ b/libswscale/swscale-test.c
@@ -39,7 +39,9 @@
     ((x) == AV_PIX_FMT_GRAY8       ||     \
      (x) == AV_PIX_FMT_YA8         ||     \
      (x) == AV_PIX_FMT_GRAY16BE    ||     \
-     (x) == AV_PIX_FMT_GRAY16LE)
+     (x) == AV_PIX_FMT_GRAY16LE    ||     \
+     (x) == AV_PIX_FMT_YA16BE      ||     \
+     (x) == AV_PIX_FMT_YA16LE)
 #define hasChroma(x)                   \
     (!(isGray(x)                ||     \
        (x) == AV_PIX_FMT_MONOBLACK ||     \
diff --git a/libswscale/swscale_internal.h b/libswscale/swscale_internal.h
index 4aef961..a0daa07 100644
--- a/libswscale/swscale_internal.h
+++ b/libswscale/swscale_internal.h
@@ -608,7 +608,9 @@ static av_always_inline int isRGB(enum AVPixelFormat 
pix_fmt)
     ((x) == AV_PIX_FMT_GRAY8       ||  \
      (x) == AV_PIX_FMT_YA8         ||  \
      (x) == AV_PIX_FMT_GRAY16BE    ||  \
-     (x) == AV_PIX_FMT_GRAY16LE)
+     (x) == AV_PIX_FMT_GRAY16LE    ||  \
+     (x) == AV_PIX_FMT_YA16BE      ||  \
+     (x) == AV_PIX_FMT_YA16LE)
 #endif
 
 #define isRGBinInt(x)                  \
diff --git a/libswscale/swscale_unscaled.c b/libswscale/swscale_unscaled.c
index fdda4ac..2907918 100644
--- a/libswscale/swscale_unscaled.c
+++ b/libswscale/swscale_unscaled.c
@@ -1053,6 +1053,7 @@ void ff_get_unscaled_swscale(SwsContext *c)
         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_BGR565) ||
         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_BGRA64) ||
         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GRAY16) ||
+        IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_YA16)   ||
         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_RGB444) ||
         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_RGB48)  ||
         IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_RGB555) ||
diff --git a/libswscale/utils.c b/libswscale/utils.c
index ae121f8..3a8531d 100644
--- a/libswscale/utils.c
+++ b/libswscale/utils.c
@@ -155,6 +155,8 @@ static const FormatEntry format_entries[AV_PIX_FMT_NB] = {
     [AV_PIX_FMT_BGR444LE]    = { 1, 1 },
     [AV_PIX_FMT_BGR444BE]    = { 1, 1 },
     [AV_PIX_FMT_YA8]         = { 1, 0 },
+    [AV_PIX_FMT_YA16BE]      = { 1, 0 },
+    [AV_PIX_FMT_YA16LE]      = { 1, 0 },
     [AV_PIX_FMT_BGR48BE]     = { 1, 1 },
     [AV_PIX_FMT_BGR48LE]     = { 1, 1 },
     [AV_PIX_FMT_BGRA64BE]    = { 0, 0, 1 },
-- 
1.8.5.2 (Apple Git-48)

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to