diff options
author | Vittorio Giovara <vittorio.giovara@gmail.com> | 2014-07-20 01:05:35 -0400 |
---|---|---|
committer | Vittorio Giovara <vittorio.giovara@gmail.com> | 2014-08-04 12:56:05 +0100 |
commit | f84a1b597c29dc035b8d5529ef88c2d7ff057820 (patch) | |
tree | bf2504960b962a10cfdb869caecaaad613ccb818 /libswscale/input.c | |
parent | e9abafca278f87e1ecc6d50091d99b73ff63c9a6 (diff) | |
download | ffmpeg-f84a1b597c29dc035b8d5529ef88c2d7ff057820.tar.gz |
swscale: support AV_PIX_FMT_YA16 as input
Based on a long debug session with Kostya.
Diffstat (limited to 'libswscale/input.c')
-rw-r--r-- | libswscale/input.c | 40 |
1 files changed, 40 insertions, 0 deletions
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: |