diff options
author | Carl Eugen Hoyos | 2016-06-14 17:02:34 +0200 |
---|---|---|
committer | Carl Eugen Hoyos | 2016-06-14 17:02:34 +0200 |
commit | d5ded429f25cf245f37556ec3076cade9d1fb67f (patch) | |
tree | c2933cb5b7b94537a93066a6d7b90d2e051d5fca /libavcodec/dpx.c | |
parent | 6bcc6fd55d280a17ff3031813dfc18cdfaf7ec81 (diff) |
lavc/dpx: Support decoding 10 bit colourspace with transparency information.
Fixes one sample from ticket #5639.
Diffstat (limited to 'libavcodec/dpx.c')
-rw-r--r-- | libavcodec/dpx.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/libavcodec/dpx.c b/libavcodec/dpx.c index af7276adbf..b439e1093b 100644 --- a/libavcodec/dpx.c +++ b/libavcodec/dpx.c @@ -256,11 +256,13 @@ static int decode_frame(AVCodecContext *avctx, avctx->pix_fmt = AV_PIX_FMT_RGBA; break; case 50100: - case 51100: case 50101: - case 51101: avctx->pix_fmt = AV_PIX_FMT_GBRP10; break; + case 51100: + case 51101: + avctx->pix_fmt = AV_PIX_FMT_GBRAP10; + break; case 50120: case 51120: case 50121: @@ -313,9 +315,10 @@ static int decode_frame(AVCodecContext *avctx, switch (bits_per_color) { case 10: for (x = 0; x < avctx->height; x++) { - uint16_t *dst[3] = {(uint16_t*)ptr[0], + uint16_t *dst[4] = {(uint16_t*)ptr[0], (uint16_t*)ptr[1], - (uint16_t*)ptr[2]}; + (uint16_t*)ptr[2], + (uint16_t*)ptr[3]}; for (y = 0; y < avctx->width; y++) { *dst[2]++ = read10in32(&buf, &rgbBuffer, &n_datum, endian); @@ -323,13 +326,13 @@ static int decode_frame(AVCodecContext *avctx, &n_datum, endian); *dst[1]++ = read10in32(&buf, &rgbBuffer, &n_datum, endian); - // For 10 bit, ignore alpha if (elements == 4) + *dst[3]++ = read10in32(&buf, &rgbBuffer, &n_datum, endian); } n_datum = 0; - for (i = 0; i < 3; i++) + for (i = 0; i < elements; i++) ptr[i] += p->linesize[i]; } break; |