aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/svq1enc.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2015-01-18 21:25:06 +0100
committerMichael Niedermayer <michaelni@gmx.at>2015-01-18 21:25:06 +0100
commit79888388e7c4ca596354f1c093e1c655df7824b8 (patch)
tree011b8dc14ec0499e145b134ec8c768a8d75d23b7 /libavcodec/svq1enc.c
parent2a3af77284412b56eb0085f4b97d9db5aa04a64f (diff)
downloadffmpeg-79888388e7c4ca596354f1c093e1c655df7824b8.tar.gz
avcodec/svq1enc: fix error handling/cleanup in case of ff_get_buffer() or scratchbuffer alloc failure
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/svq1enc.c')
-rw-r--r--libavcodec/svq1enc.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/libavcodec/svq1enc.c b/libavcodec/svq1enc.c
index 552f39d381..0c5971b4bb 100644
--- a/libavcodec/svq1enc.c
+++ b/libavcodec/svq1enc.c
@@ -590,14 +590,20 @@ static int svq1_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
}
if (!s->current_picture->data[0]) {
- if ((ret = ff_get_buffer(avctx, s->current_picture, 0))< 0 ||
- (ret = ff_get_buffer(avctx, s->last_picture, 0)) < 0) {
+ if ((ret = ff_get_buffer(avctx, s->current_picture, 0)) < 0) {
return ret;
}
- s->scratchbuf = av_malloc(s->current_picture->linesize[0] * 16 * 3);
}
- if (!s->scratchbuf)
- return AVERROR(ENOMEM);
+ if (!s->last_picture->data[0]) {
+ if ((ret = ff_get_buffer(avctx, s->last_picture, 0)) < 0) {
+ return ret;
+ }
+ }
+ if (!s->scratchbuf) {
+ s->scratchbuf = av_malloc_array(s->current_picture->linesize[0], 16 * 3);
+ if (!s->scratchbuf)
+ return AVERROR(ENOMEM);
+ }
FFSWAP(AVFrame*, s->current_picture, s->last_picture);