|
|
|
@ -69,15 +69,16 @@ static int decode_frame(AVCodecContext *avctx, void *data, |
|
|
|
|
unsigned int px_inc; |
|
|
|
|
unsigned int planes = c->planes; |
|
|
|
|
unsigned char *planemap = c->planemap; |
|
|
|
|
int ret; |
|
|
|
|
|
|
|
|
|
if (c->pic.data[0]) |
|
|
|
|
avctx->release_buffer(avctx, &c->pic); |
|
|
|
|
|
|
|
|
|
c->pic.reference = 0; |
|
|
|
|
c->pic.buffer_hints = FF_BUFFER_HINTS_VALID; |
|
|
|
|
if (ff_get_buffer(avctx, &c->pic) < 0){ |
|
|
|
|
if ((ret = ff_get_buffer(avctx, &c->pic)) < 0) { |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); |
|
|
|
|
return -1; |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* Set data pointer after line lengths */ |
|
|
|
@ -101,14 +102,14 @@ static int decode_frame(AVCodecContext *avctx, void *data, |
|
|
|
|
/* Decode a row of this plane */ |
|
|
|
|
while (dlen > 0) { |
|
|
|
|
if (dp + 1 >= buf + buf_size) |
|
|
|
|
return -1; |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
if ((count = *dp++) <= 127) { |
|
|
|
|
count++; |
|
|
|
|
dlen -= count + 1; |
|
|
|
|
if (pixptr + count * px_inc > pixptr_end) |
|
|
|
|
break; |
|
|
|
|
if (dp + count > buf + buf_size) |
|
|
|
|
return -1; |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
while (count--) { |
|
|
|
|
*pixptr = *dp++; |
|
|
|
|
pixptr += px_inc; |
|
|
|
@ -185,7 +186,7 @@ static av_cold int decode_init(AVCodecContext *avctx) |
|
|
|
|
default: |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "Error: Unsupported color depth: %u.\n", |
|
|
|
|
avctx->bits_per_coded_sample); |
|
|
|
|
return -1; |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|