Index: source/libvpx/vp9/decoder/vp9_decoder.c |
diff --git a/source/libvpx/vp9/decoder/vp9_decoder.c b/source/libvpx/vp9/decoder/vp9_decoder.c |
index 288d8690ca244fb2c9ded53f629e83af974d66ae..7991a39e61019529a505966886d5251fb7f95524 100644 |
--- a/source/libvpx/vp9/decoder/vp9_decoder.c |
+++ b/source/libvpx/vp9/decoder/vp9_decoder.c |
@@ -50,7 +50,6 @@ static void initialize_dec(void) { |
static void vp9_dec_setup_mi(VP9_COMMON *cm) { |
cm->mi = cm->mip + cm->mi_stride + 1; |
- memset(cm->mip, 0, cm->mi_stride * (cm->mi_rows + 1) * sizeof(*cm->mip)); |
cm->mi_grid_visible = cm->mi_grid_base + cm->mi_stride + 1; |
memset(cm->mi_grid_base, 0, |
cm->mi_stride * (cm->mi_rows + 1) * sizeof(*cm->mi_grid_base)); |
@@ -212,6 +211,9 @@ vpx_codec_err_t vp9_set_reference_dec(VP9_COMMON *cm, |
// Find an empty frame buffer. |
const int free_fb = get_free_fb(cm); |
+ if (cm->new_fb_idx == INVALID_IDX) |
+ return VPX_CODEC_MEM_ERROR; |
+ |
// Decrease ref_count since it will be increased again in |
// ref_cnt_fb() below. |
--frame_bufs[free_fb].ref_count; |
@@ -299,7 +301,10 @@ int vp9_receive_compressed_data(VP9Decoder *pbi, |
&& frame_bufs[cm->new_fb_idx].ref_count == 0) |
pool->release_fb_cb(pool->cb_priv, |
&frame_bufs[cm->new_fb_idx].raw_frame_buffer); |
+ // Find a free frame buffer. Return error if can not find any. |
cm->new_fb_idx = get_free_fb(cm); |
+ if (cm->new_fb_idx == INVALID_IDX) |
+ return VPX_CODEC_MEM_ERROR; |
// Assign a MV array to the frame buffer. |
cm->cur_frame = &pool->frame_bufs[cm->new_fb_idx]; |