X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Ftiffenc.c;h=7361614505f6a947568fdb1dcc3800d957b1adc5;hb=5eb353e0cd62ad212634c14e4b863554c0bc6161;hp=587e98e2774558183878d5624f99a03a8eb7b592;hpb=92ef4be4ab9fbb7d901b22e0036a4ca90b00a476;p=ffmpeg diff --git a/libavcodec/tiffenc.c b/libavcodec/tiffenc.c index 587e98e2774..7361614505f 100644 --- a/libavcodec/tiffenc.c +++ b/libavcodec/tiffenc.c @@ -121,7 +121,7 @@ static void add_entry(TiffEncoderContext * s, { uint8_t *entries_ptr = s->entries + 12 * s->num_entries; - assert(s->num_entries < TIFF_MAX_ENTRY); + av_assert0(s->num_entries < TIFF_MAX_ENTRY); bytestream_put_le16(&entries_ptr, tag); bytestream_put_le16(&entries_ptr, type); @@ -193,13 +193,24 @@ static void pack_yuv(TiffEncoderContext * s, uint8_t * dst, int lnum) 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]]; - for (i = 0; i < w; i++){ - for (j = 0; j < s->subsampling[1]; j++) - for (k = 0; k < s->subsampling[0]; k++) - *dst++ = p->data[0][(lnum + j) * p->linesize[0] + - i * s->subsampling[0] + k]; - *dst++ = *pu++; - *dst++ = *pv++; + 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++) + *dst++ = p->data[0][FFMIN(lnum + j, s->height-1) * p->linesize[0] + + FFMIN(i * s->subsampling[0] + k, s->width-1)]; + *dst++ = *pu++; + *dst++ = *pv++; + } + }else{ + for (i = 0; i < w; i++){ + for (j = 0; j < s->subsampling[1]; j++) + for (k = 0; k < s->subsampling[0]; k++) + *dst++ = p->data[0][(lnum + j) * p->linesize[0] + + i * s->subsampling[0] + k]; + *dst++ = *pu++; + *dst++ = *pv++; + } } }