On Tue, Aug 19, 2014 at 01:54:58AM -0300, James Almer wrote:
Signed-off-by: James Almer jamr...@gmail.com
---
Seems to work great with yuv deflate tiff images created with our tiff encoder
libavcodec/tiff.c | 71
+++
1 file changed, 35 insertions(+), 36 deletions(-)
diff --git a/libavcodec/tiff.c b/libavcodec/tiff.c
index 73bf828..7acfe7b 100644
--- a/libavcodec/tiff.c
+++ b/libavcodec/tiff.c
@@ -283,6 +283,34 @@ static int deinvert_buffer(TiffContext *s, const uint8_t
*src, int size)
return 0;
}
+static void unpack_yuv(TiffContext *s, AVFrame *p,
+ const uint8_t *src, int lnum)
+{
+int i, j, k;
+int w = (s-width - 1) / s-subsampling[0] + 1;
+uint8_t *pu = p-data[1][lnum / s-subsampling[1] * p-linesize[1]];
+uint8_t *pv = p-data[2][lnum / s-subsampling[1] * p-linesize[2]];
+if (s-width % s-subsampling[0] || s-height % s-subsampling[1]) {
+for (i = 0; i w; i++) {
+for (j = 0; j s-subsampling[1]; j++)
+for (k = 0; k s-subsampling[0]; k++)
+p-data[0][FFMIN(lnum + j, s-height-1) * p-linesize[0]
+
+ FFMIN(i * s-subsampling[0] + k, s-width-1)]
= *src++;
+*pu++ = *src++;
+*pv++ = *src++;
+}
+}else{
+for (i = 0; i w; i++) {
+for (j = 0; j s-subsampling[1]; j++)
+for (k = 0; k s-subsampling[0]; k++)
+p-data[0][(lnum + j) * p-linesize[0] +
+ i * s-subsampling[0] + k] = *src++;
+*pu++ = *src++;
+*pv++ = *src++;
+}
+}
+}
+
#if CONFIG_ZLIB
static int tiff_uncompress(uint8_t *dst, unsigned long *len, const uint8_t
*src,
int size)
@@ -305,9 +333,9 @@ static int tiff_uncompress(uint8_t *dst, unsigned long
*len, const uint8_t *src,
return zret == Z_STREAM_END ? Z_OK : zret;
}
-static int tiff_unpack_zlib(TiffContext *s, uint8_t *dst, int stride,
+static int tiff_unpack_zlib(TiffContext *s, AVFrame *p, uint8_t *dst, int
stride,
const uint8_t *src, int size,
-int width, int lines)
+int width, int lines, int strip_start)
{
uint8_t *zbuf;
unsigned long outlen;
@@ -338,6 +366,10 @@ static int tiff_unpack_zlib(TiffContext *s, uint8_t
*dst, int stride,
} else {
memcpy(dst, src, width);
}
+if (s-photometric == TIFF_PHOTOMETRIC_YCBCR) {
+unpack_yuv(s, p, dst, strip_start + line);
+line += s-subsampling[1] - 1;
+}
is photometric guranteed to match the pix_fmt ?
iam asking as i dont see that being ensured by the code but i might
be missing something
if they could mismatch, id assume it might crash
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
The real ebay dictionary, page 2
100% positive feedback - All either got their money back or didnt complain
Best seller ever, very honest - Seller refunded buyer after failed scam
signature.asc
Description: Digital signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel