diff options
author | Vittorio Giovara <vittorio.giovara@gmail.com> | 2015-10-19 14:34:09 +0200 |
---|---|---|
committer | Vittorio Giovara <vittorio.giovara@gmail.com> | 2015-10-25 22:44:21 +0100 |
commit | 3c5cf2a31b4b29a8e4282cbe6a3f0617c14698b8 (patch) | |
tree | 896d87b205a68af5b6fe7d4a58a95a7e086fb5be | |
parent | 447b5b278c689b21bbb7b5747c8773145cbd9448 (diff) | |
download | ffmpeg-3c5cf2a31b4b29a8e4282cbe6a3f0617c14698b8.tar.gz |
screenpresso: Drop parameter change check
Size can never change, allowing us to use ff_reget_buffer, and to
simplify the code a little.
-rw-r--r-- | libavcodec/screenpresso.c | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/libavcodec/screenpresso.c b/libavcodec/screenpresso.c index d25d0ebb9d..6c434de827 100644 --- a/libavcodec/screenpresso.c +++ b/libavcodec/screenpresso.c @@ -80,6 +80,12 @@ static av_cold int screenpresso_init(AVCodecContext *avctx) avctx->pix_fmt = AV_PIX_FMT_BGR24; + /* Allocate maximum size possible, a full frame */ + ctx->inflated_size = avctx->width * avctx->height * 3; + ctx->inflated_buf = av_malloc(ctx->inflated_size); + if (!ctx->inflated_buf) + return AVERROR(ENOMEM); + return 0; } @@ -100,6 +106,7 @@ static int screenpresso_decode_frame(AVCodecContext *avctx, void *data, { ScreenpressoContext *ctx = avctx->priv_data; AVFrame *frame = data; + uLongf length = ctx->inflated_size; int keyframe; int ret; @@ -117,30 +124,18 @@ static int screenpresso_decode_frame(AVCodecContext *avctx, void *data, } keyframe = (avpkt->data[0] == 0x73); - /* Resize deflate buffer and frame on resolution change */ - if (ctx->inflated_size != avctx->width * avctx->height * 3) { - av_frame_unref(ctx->current); - ret = ff_get_buffer(avctx, ctx->current, AV_GET_BUFFER_FLAG_REF); - if (ret < 0) - return ret; - - /* If malloc fails, reset len to avoid preserving an invalid value */ - ctx->inflated_size = avctx->width * avctx->height * 3; - ret = av_reallocp(&ctx->inflated_buf, ctx->inflated_size); - if (ret < 0) { - ctx->inflated_size = 0; - return ret; - } - } - /* Inflate the frame after the 2 byte header */ - ret = uncompress(ctx->inflated_buf, &ctx->inflated_size, + ret = uncompress(ctx->inflated_buf, &length, avpkt->data + 2, avpkt->size - 2); if (ret) { av_log(avctx, AV_LOG_ERROR, "Deflate error %d.\n", ret); return AVERROR_UNKNOWN; } + ret = ff_reget_buffer(avctx, ctx->current); + if (ret < 0) + return ret; + /* When a keyframe is found, copy it (flipped) */ if (keyframe) av_image_copy_plane(ctx->current->data[0] + |