|
|
|
@@ -64,6 +64,7 @@ typedef struct RsccContext { |
|
|
|
/* zlib interaction */ |
|
|
|
uint8_t *inflated_buf; |
|
|
|
uLongf inflated_size; |
|
|
|
int valid_pixels |
|
|
|
} RsccContext; |
|
|
|
|
|
|
|
static av_cold int rscc_init(AVCodecContext *avctx) |
|
|
|
@@ -347,8 +348,11 @@ static int rscc_decode_frame(AVCodecContext *avctx, void *data, |
|
|
|
} |
|
|
|
memcpy (frame->data[1], ctx->palette, AVPALETTE_SIZE); |
|
|
|
} |
|
|
|
|
|
|
|
*got_frame = 1; |
|
|
|
// We only return a picture when enough of it is undamaged, this avoids copying nearly broken frames around |
|
|
|
if (ctx->valid_pixels < ctx->inflated_size) |
|
|
|
ctx->valid_pixels += pixel_size; |
|
|
|
if (ctx->valid_pixels >= ctx->inflated_size * (100 - avctx->discard_damaged_percentage) / 100) |
|
|
|
*got_frame = 1; |
|
|
|
|
|
|
|
ret = avpkt->size; |
|
|
|
end: |
|
|
|
|