mirror of https://git.ffmpeg.org/ffmpeg.git
libschroedingerdec: fix leaking of framewithpts
Also preserve the return value from ff_get_buffer(). Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com> Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
This commit is contained in:
parent
8c3a643808
commit
dc2ad09493
|
@ -218,6 +218,7 @@ static int libschroedinger_decode_frame(AVCodecContext *avctx,
|
||||||
int outer = 1;
|
int outer = 1;
|
||||||
SchroParseUnitContext parse_ctx;
|
SchroParseUnitContext parse_ctx;
|
||||||
LibSchroFrameContext *framewithpts = NULL;
|
LibSchroFrameContext *framewithpts = NULL;
|
||||||
|
int ret;
|
||||||
|
|
||||||
*got_frame = 0;
|
*got_frame = 0;
|
||||||
|
|
||||||
|
@ -308,9 +309,9 @@ static int libschroedinger_decode_frame(AVCodecContext *avctx,
|
||||||
framewithpts = ff_schro_queue_pop(&p_schro_params->dec_frame_queue);
|
framewithpts = ff_schro_queue_pop(&p_schro_params->dec_frame_queue);
|
||||||
|
|
||||||
if (framewithpts && framewithpts->frame && framewithpts->frame->components[0].stride) {
|
if (framewithpts && framewithpts->frame && framewithpts->frame->components[0].stride) {
|
||||||
if (ff_get_buffer(avctx, avframe, 0) < 0) {
|
if ((ret = ff_get_buffer(avctx, avframe, 0)) < 0) {
|
||||||
av_log(avctx, AV_LOG_ERROR, "Unable to allocate buffer\n");
|
av_log(avctx, AV_LOG_ERROR, "Unable to allocate buffer\n");
|
||||||
return AVERROR(ENOMEM);
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(avframe->data[0],
|
memcpy(avframe->data[0],
|
||||||
|
@ -337,15 +338,17 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
||||||
avframe->linesize[2] = framewithpts->frame->components[2].stride;
|
avframe->linesize[2] = framewithpts->frame->components[2].stride;
|
||||||
|
|
||||||
*got_frame = 1;
|
*got_frame = 1;
|
||||||
|
|
||||||
/* Now free the frame resources. */
|
|
||||||
libschroedinger_decode_frame_free(framewithpts->frame);
|
|
||||||
av_free(framewithpts);
|
|
||||||
} else {
|
} else {
|
||||||
data = NULL;
|
data = NULL;
|
||||||
*got_frame = 0;
|
*got_frame = 0;
|
||||||
}
|
}
|
||||||
return buf_size;
|
ret = buf_size;
|
||||||
|
end:
|
||||||
|
/* Now free the frame resources. */
|
||||||
|
if (framewithpts && framewithpts->frame)
|
||||||
|
libschroedinger_decode_frame_free(framewithpts->frame);
|
||||||
|
av_freep(&framewithpts);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue