From f84a1b597c29dc035b8d5529ef88c2d7ff057820 Mon Sep 17 00:00:00 2001 From: Vittorio Giovara Date: Sun, 20 Jul 2014 01:05:35 -0400 Subject: swscale: support AV_PIX_FMT_YA16 as input Based on a long debug session with Kostya. --- libswscale/input.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'libswscale/input.c') diff --git a/libswscale/input.c b/libswscale/input.c index 1ffdfe534b..f583b3f214 100644 --- a/libswscale/input.c +++ b/libswscale/input.c @@ -419,6 +419,38 @@ static void bswap16UV_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *_src1, } } +static void read_ya16le_gray_c(uint8_t *dst, const uint8_t *src, int width, + uint32_t *unused) +{ + int i; + for (i = 0; i < width; i++) + AV_WN16(dst + i * 2, AV_RL16(src + i * 4)); +} + +static void read_ya16le_alpha_c(uint8_t *dst, const uint8_t *src, int width, + uint32_t *unused) +{ + int i; + for (i = 0; i < width; i++) + AV_WN16(dst + i * 2, AV_RL16(src + i * 4 + 2)); +} + +static void read_ya16be_gray_c(uint8_t *dst, const uint8_t *src, int width, + uint32_t *unused) +{ + int i; + for (i = 0; i < width; i++) + AV_WN16(dst + i * 2, AV_RB16(src + i * 4)); +} + +static void read_ya16be_alpha_c(uint8_t *dst, const uint8_t *src, int width, + uint32_t *unused) +{ + int i; + for (i = 0; i < width; i++) + AV_WN16(dst + i * 2, AV_RB16(src + i * 4 + 2)); +} + /* 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, @@ -987,6 +1019,14 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c) c->alpToYV12 = bswap16Y_c; break; #endif + case AV_PIX_FMT_YA16LE: + c->lumToYV12 = read_ya16le_gray_c; + c->alpToYV12 = read_ya16le_alpha_c; + break; + case AV_PIX_FMT_YA16BE: + c->lumToYV12 = read_ya16be_gray_c; + c->alpToYV12 = read_ya16be_alpha_c; + break; case AV_PIX_FMT_YUYV422: case AV_PIX_FMT_YVYU422: case AV_PIX_FMT_YA8: -- cgit v1.2.3