diff options
author | Vittorio Giovara <vittorio.giovara@gmail.com> | 2014-12-17 16:01:45 +0100 |
---|---|---|
committer | Vittorio Giovara <vittorio.giovara@gmail.com> | 2014-12-18 23:27:14 +0100 |
commit | 210461c0a83a5625560fa1d92229200dc7fb869b (patch) | |
tree | 037f905fcdeb29b83de9a27fe99df3d30899208f /libavcodec | |
parent | 596b5c488fa1d40f114a64d3b73e1863cab073fb (diff) | |
download | ffmpeg-210461c0a83a5625560fa1d92229200dc7fb869b.tar.gz |
imgconvert: check memory allocations and propagate errors
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/imgconvert.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/libavcodec/imgconvert.c b/libavcodec/imgconvert.c index 365dc54c57..2d32602385 100644 --- a/libavcodec/imgconvert.c +++ b/libavcodec/imgconvert.c @@ -427,13 +427,15 @@ static void deinterlace_bottom_field(uint8_t *dst, int dst_wrap, deinterlace_line(dst,src_m2,src_m1,src_0,src_0,src_0,width); } -static void deinterlace_bottom_field_inplace(uint8_t *src1, int src_wrap, - int width, int height) +static int deinterlace_bottom_field_inplace(uint8_t *src1, int src_wrap, + int width, int height) { uint8_t *src_m1, *src_0, *src_p1, *src_p2; int y; uint8_t *buf; buf = av_malloc(width); + if (!buf) + return AVERROR(ENOMEM); src_m1 = src1; memcpy(buf,src_m1,width); @@ -450,12 +452,13 @@ static void deinterlace_bottom_field_inplace(uint8_t *src1, int src_wrap, /* do last line */ deinterlace_line_inplace(buf,src_m1,src_0,src_0,src_0,width); av_free(buf); + return 0; } int avpicture_deinterlace(AVPicture *dst, const AVPicture *src, enum AVPixelFormat pix_fmt, int width, int height) { - int i; + int i, ret; if (pix_fmt != AV_PIX_FMT_YUV420P && pix_fmt != AV_PIX_FMT_YUVJ420P && @@ -491,8 +494,11 @@ int avpicture_deinterlace(AVPicture *dst, const AVPicture *src, } } if (src == dst) { - deinterlace_bottom_field_inplace(dst->data[i], dst->linesize[i], - width, height); + ret = deinterlace_bottom_field_inplace(dst->data[i], + dst->linesize[i], + width, height); + if (ret < 0) + return ret; } else { deinterlace_bottom_field(dst->data[i],dst->linesize[i], src->data[i], src->linesize[i], |