diff options
Diffstat (limited to 'ffmpeg/libavcodec/mimic.c')
| -rw-r--r-- | ffmpeg/libavcodec/mimic.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/ffmpeg/libavcodec/mimic.c b/ffmpeg/libavcodec/mimic.c index 85c6a1a..31d6393 100644 --- a/ffmpeg/libavcodec/mimic.c +++ b/ffmpeg/libavcodec/mimic.c @@ -116,7 +116,8 @@ static av_cold int mimic_decode_end(AVCodecContext *avctx) MimicContext *ctx = avctx->priv_data; int i; - av_free(ctx->swap_buf); + av_freep(&ctx->swap_buf); + ctx->swap_buf_size = 0; for (i = 0; i < FF_ARRAY_ELEMS(ctx->frames); i++) { if (ctx->frames[i].f) @@ -175,7 +176,7 @@ static int mimic_decode_update_thread_context(AVCodecContext *avctx, const AVCod for (i = 0; i < FF_ARRAY_ELEMS(dst->frames); i++) { ff_thread_release_buffer(avctx, &dst->frames[i]); - if (src->frames[i].f->data[0]) { + if (i != src->next_cur_index && src->frames[i].f->data[0]) { ret = ff_thread_ref_frame(&dst->frames[i], &src->frames[i]); if (ret < 0) return ret; @@ -388,8 +389,8 @@ static int mimic_decode_frame(AVCodecContext *avctx, void *data, avctx->height = height; avctx->pix_fmt = AV_PIX_FMT_YUV420P; for (i = 0; i < 3; i++) { - ctx->num_vblocks[i] = -((-height) >> (3 + !!i)); - ctx->num_hblocks[i] = width >> (3 + !!i); + ctx->num_vblocks[i] = FF_CEIL_RSHIFT(height, 3 + !!i); + ctx->num_hblocks[i] = width >> (3 + !!i); } } else if (width != ctx->avctx->width || height != ctx->avctx->height) { avpriv_request_sample(avctx, "Resolution changing"); @@ -465,6 +466,7 @@ static av_cold int mimic_init_thread_copy(AVCodecContext *avctx) AVCodec ff_mimic_decoder = { .name = "mimic", + .long_name = NULL_IF_CONFIG_SMALL("Mimic"), .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_MIMIC, .priv_data_size = sizeof(MimicContext), @@ -472,7 +474,6 @@ AVCodec ff_mimic_decoder = { .close = mimic_decode_end, .decode = mimic_decode_frame, .capabilities = CODEC_CAP_DR1 | CODEC_CAP_FRAME_THREADS, - .long_name = NULL_IF_CONFIG_SMALL("Mimic"), .update_thread_context = ONLY_IF_THREADS_ENABLED(mimic_decode_update_thread_context), .init_thread_copy = ONLY_IF_THREADS_ENABLED(mimic_init_thread_copy), }; |
