Commit 8b27f76b authored by Benoit Fouet's avatar Benoit Fouet

Check allocations on init.

Originally committed as revision 15476 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 809a23a5
...@@ -62,11 +62,12 @@ static const uint8_t corrector_type_0[24] = { ...@@ -62,11 +62,12 @@ static const uint8_t corrector_type_0[24] = {
static const uint8_t corrector_type_2[8] = { 9, 7, 6, 8, 5, 4, 3, 2 }; static const uint8_t corrector_type_2[8] = { 9, 7, 6, 8, 5, 4, 3, 2 };
static av_cold void build_modpred(Indeo3DecodeContext *s) static av_cold int build_modpred(Indeo3DecodeContext *s)
{ {
int i, j; int i, j;
s->ModPred = av_malloc(8 * 128); if (!(s->ModPred = av_malloc(8 * 128)))
return AVERROR(ENOMEM);
for (i=0; i < 128; ++i) { for (i=0; i < 128; ++i) {
s->ModPred[i+0*128] = i > 126 ? 254 : 2*(i + 1 - ((i + 1) % 2)); s->ModPred[i+0*128] = i > 126 ? 254 : 2*(i + 1 - ((i + 1) % 2));
...@@ -81,7 +82,8 @@ static av_cold void build_modpred(Indeo3DecodeContext *s) ...@@ -81,7 +82,8 @@ static av_cold void build_modpred(Indeo3DecodeContext *s)
s->ModPred[i+7*128] = 2*(i + 5 - ((i + 4) % 9)); s->ModPred[i+7*128] = 2*(i + 5 - ((i + 4) % 9));
} }
s->corrector_type = av_malloc(24 * 256); if (!(s->corrector_type = av_malloc(24 * 256)))
return AVERROR(ENOMEM);
for (i=0; i < 24; ++i) { for (i=0; i < 24; ++i) {
for (j=0; j < 256; ++j) { for (j=0; j < 256; ++j) {
...@@ -90,6 +92,8 @@ static av_cold void build_modpred(Indeo3DecodeContext *s) ...@@ -90,6 +92,8 @@ static av_cold void build_modpred(Indeo3DecodeContext *s)
corrector_type_2[j - 248]; corrector_type_2[j - 248];
} }
} }
return 0;
} }
static void iv_Decode_Chunk(Indeo3DecodeContext *s, uint8_t *cur, static void iv_Decode_Chunk(Indeo3DecodeContext *s, uint8_t *cur,
...@@ -98,7 +102,7 @@ static void iv_Decode_Chunk(Indeo3DecodeContext *s, uint8_t *cur, ...@@ -98,7 +102,7 @@ static void iv_Decode_Chunk(Indeo3DecodeContext *s, uint8_t *cur,
const uint8_t *buf2, int min_width_160); const uint8_t *buf2, int min_width_160);
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
static av_cold void iv_alloc_frames(Indeo3DecodeContext *s) static av_cold int iv_alloc_frames(Indeo3DecodeContext *s)
{ {
int luma_width, luma_height, luma_pixels, chroma_width, chroma_height, int luma_width, luma_height, luma_pixels, chroma_width, chroma_height,
chroma_pixels, i; chroma_pixels, i;
...@@ -122,7 +126,7 @@ static av_cold void iv_alloc_frames(Indeo3DecodeContext *s) ...@@ -122,7 +126,7 @@ static av_cold void iv_alloc_frames(Indeo3DecodeContext *s)
(chroma_pixels + chroma_width) * 4; (chroma_pixels + chroma_width) * 4;
if(!(s->iv_frame[0].the_buf = av_malloc(bufsize))) if(!(s->iv_frame[0].the_buf = av_malloc(bufsize)))
return; return AVERROR(ENOMEM);
s->iv_frame[0].y_w = s->iv_frame[1].y_w = luma_width; s->iv_frame[0].y_w = s->iv_frame[1].y_w = luma_width;
s->iv_frame[0].y_h = s->iv_frame[1].y_h = luma_height; s->iv_frame[0].y_h = s->iv_frame[1].y_h = luma_height;
s->iv_frame[0].uv_w = s->iv_frame[1].uv_w = chroma_width; s->iv_frame[0].uv_w = s->iv_frame[1].uv_w = chroma_width;
...@@ -151,6 +155,8 @@ static av_cold void iv_alloc_frames(Indeo3DecodeContext *s) ...@@ -151,6 +155,8 @@ static av_cold void iv_alloc_frames(Indeo3DecodeContext *s)
s->iv_frame[1].Vbuf[-i] = 0x80; s->iv_frame[1].Vbuf[-i] = 0x80;
s->iv_frame[1].Vbuf[chroma_pixels+i-1] = 0x80; s->iv_frame[1].Vbuf[chroma_pixels+i-1] = 0x80;
} }
return 0;
} }
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
...@@ -1050,16 +1056,19 @@ static void iv_Decode_Chunk(Indeo3DecodeContext *s, ...@@ -1050,16 +1056,19 @@ static void iv_Decode_Chunk(Indeo3DecodeContext *s,
static av_cold int indeo3_decode_init(AVCodecContext *avctx) static av_cold int indeo3_decode_init(AVCodecContext *avctx)
{ {
Indeo3DecodeContext *s = avctx->priv_data; Indeo3DecodeContext *s = avctx->priv_data;
int ret = 0;
s->avctx = avctx; s->avctx = avctx;
s->width = avctx->width; s->width = avctx->width;
s->height = avctx->height; s->height = avctx->height;
avctx->pix_fmt = PIX_FMT_YUV410P; avctx->pix_fmt = PIX_FMT_YUV410P;
build_modpred(s); if (!(ret = build_modpred(s)))
iv_alloc_frames(s); ret = iv_alloc_frames(s);
if (ret)
iv_free_func(s);
return 0; return ret;
} }
static int indeo3_decode_frame(AVCodecContext *avctx, static int indeo3_decode_frame(AVCodecContext *avctx,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment