Fixes a part of ticket #503. Reviewed-by: Paul B Mahol Reviewed-by: Jean Firsttags/n0.10
@@ -302,6 +302,9 @@ static int init_image(TiffContext *s) | |||||
case 483: | case 483: | ||||
s->avctx->pix_fmt = s->le ? PIX_FMT_RGB48LE : PIX_FMT_RGB48BE; | s->avctx->pix_fmt = s->le ? PIX_FMT_RGB48LE : PIX_FMT_RGB48BE; | ||||
break; | break; | ||||
case 644: | |||||
s->avctx->pix_fmt = s->le ? PIX_FMT_RGBA64LE : PIX_FMT_RGBA64BE; | |||||
break; | |||||
default: | default: | ||||
av_log(s->avctx, AV_LOG_ERROR, | av_log(s->avctx, AV_LOG_ERROR, | ||||
"This format is not supported (bpp=%d, bppcount=%d)\n", | "This format is not supported (bpp=%d, bppcount=%d)\n", | ||||
@@ -647,13 +650,15 @@ static int decode_frame(AVCodecContext *avctx, | |||||
dst = p->data[0]; | dst = p->data[0]; | ||||
soff = s->bpp >> 3; | soff = s->bpp >> 3; | ||||
ssize = s->width * soff; | ssize = s->width * soff; | ||||
if (s->avctx->pix_fmt == PIX_FMT_RGB48LE) { | |||||
if (s->avctx->pix_fmt == PIX_FMT_RGB48LE || | |||||
s->avctx->pix_fmt == PIX_FMT_RGBA64LE) { | |||||
for (i = 0; i < s->height; i++) { | for (i = 0; i < s->height; i++) { | ||||
for (j = soff; j < ssize; j += 2) | for (j = soff; j < ssize; j += 2) | ||||
AV_WL16(dst + j, AV_RL16(dst + j) + AV_RL16(dst + j - soff)); | AV_WL16(dst + j, AV_RL16(dst + j) + AV_RL16(dst + j - soff)); | ||||
dst += stride; | dst += stride; | ||||
} | } | ||||
} else if (s->avctx->pix_fmt == PIX_FMT_RGB48BE) { | |||||
} else if (s->avctx->pix_fmt == PIX_FMT_RGB48BE || | |||||
s->avctx->pix_fmt == PIX_FMT_RGBA64BE) { | |||||
for (i = 0; i < s->height; i++) { | for (i = 0; i < s->height; i++) { | ||||
for (j = soff; j < ssize; j += 2) | for (j = soff; j < ssize; j += 2) | ||||
AV_WB16(dst + j, AV_RB16(dst + j) + AV_RB16(dst + j - soff)); | AV_WB16(dst + j, AV_RB16(dst + j) + AV_RB16(dst + j - soff)); | ||||
@@ -255,6 +255,14 @@ static int encode_frame(AVCodecContext * avctx, unsigned char *buf, | |||||
s->subsampling[1] = 1; | s->subsampling[1] = 1; | ||||
switch (avctx->pix_fmt) { | switch (avctx->pix_fmt) { | ||||
case PIX_FMT_RGBA64LE: | |||||
s->bpp = 64; | |||||
s->photometric_interpretation = 2; | |||||
bpp_tab[0] = 16; | |||||
bpp_tab[1] = 16; | |||||
bpp_tab[2] = 16; | |||||
bpp_tab[3] = 16; | |||||
break; | |||||
case PIX_FMT_RGB48LE: | case PIX_FMT_RGB48LE: | ||||
s->bpp = 48; | s->bpp = 48; | ||||
s->photometric_interpretation = 2; | s->photometric_interpretation = 2; | ||||
@@ -498,7 +506,7 @@ AVCodec ff_tiff_encoder = { | |||||
PIX_FMT_YUV420P, PIX_FMT_YUV422P, | PIX_FMT_YUV420P, PIX_FMT_YUV422P, | ||||
PIX_FMT_YUV444P, PIX_FMT_YUV410P, | PIX_FMT_YUV444P, PIX_FMT_YUV410P, | ||||
PIX_FMT_YUV411P, PIX_FMT_RGB48LE, | PIX_FMT_YUV411P, PIX_FMT_RGB48LE, | ||||
PIX_FMT_RGBA, PIX_FMT_NONE}, | |||||
PIX_FMT_RGBA, PIX_FMT_RGBA64LE, PIX_FMT_NONE}, | |||||
.long_name = NULL_IF_CONFIG_SMALL("TIFF image"), | .long_name = NULL_IF_CONFIG_SMALL("TIFF image"), | ||||
.priv_class = &tiffenc_class, | .priv_class = &tiffenc_class, | ||||
}; | }; |
@@ -22,7 +22,7 @@ | |||||
#define LIBAVCODEC_VERSION_MAJOR 53 | #define LIBAVCODEC_VERSION_MAJOR 53 | ||||
#define LIBAVCODEC_VERSION_MINOR 55 | #define LIBAVCODEC_VERSION_MINOR 55 | ||||
#define LIBAVCODEC_VERSION_MICRO 101 | |||||
#define LIBAVCODEC_VERSION_MICRO 102 | |||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | ||||
LIBAVCODEC_VERSION_MINOR, \ | LIBAVCODEC_VERSION_MINOR, \ | ||||