summaryrefslogtreecommitdiff
path: root/libavcodec/wcmv.c
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2019-09-03 23:53:46 -0300
committerJames Almer <jamrial@gmail.com>2019-09-04 10:07:12 -0300
commit343f8d514e521ea52fc64aab0ddf1d497b0e4cec (patch)
tree4364b83a45649ef673e21ed1bd2ead6bcabeae5c /libavcodec/wcmv.c
parent5102999223f2614cf06a8fc801a3f0dd8b0c4ea3 (diff)
avcodec/wcmv: prevent frame copying when outputting duplicate frames
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavcodec/wcmv.c')
-rw-r--r--libavcodec/wcmv.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/libavcodec/wcmv.c b/libavcodec/wcmv.c
index 2f21c1430c..d7a3cbd1b7 100644
--- a/libavcodec/wcmv.c
+++ b/libavcodec/wcmv.c
@@ -45,7 +45,7 @@ static int decode_frame(AVCodecContext *avctx,
{
WCMVContext *s = avctx->priv_data;
AVFrame *frame = data;
- int skip, blocks, zret, ret, intra = 0, bpp = s->bpp;
+ int skip, blocks, zret, ret, intra = 0, flags = 0, bpp = s->bpp;
GetByteContext gb;
uint8_t *dst;
@@ -56,11 +56,13 @@ static int decode_frame(AVCodecContext *avctx,
}
bytestream2_init(&gb, avpkt->data, avpkt->size);
+ blocks = bytestream2_get_le16(&gb);
+ if (!blocks)
+ flags |= FF_REGET_BUFFER_FLAG_READONLY;
- if ((ret = ff_reget_buffer(avctx, s->prev_frame, 0)) < 0)
+ if ((ret = ff_reget_buffer(avctx, s->prev_frame, flags)) < 0)
return ret;
- blocks = bytestream2_get_le16(&gb);
if (blocks > 5) {
GetByteContext bgb;
int x = 0, size;