]> granicus.if.org Git - libvpx/commitdiff
Fix bug 837 (Part 2): Handle increase in frame width
authorAdrian Grange <agrange@google.com>
Thu, 21 Aug 2014 15:15:23 +0000 (08:15 -0700)
committerAdrian Grange <agrange@google.com>
Thu, 21 Aug 2014 15:15:23 +0000 (08:15 -0700)
The case where frame width increases but the overall memory
size required to hold the mi arrays does not was not
handled.

Change-Id: I72e70b912a7d1766687ad682979f1c9ee124449b

vp9/decoder/vp9_decodeframe.c

index a0fff458c9011cab5ba85bf8d11beab246cd8b0c..572ab0efc1e3193f40f39a2d333976253f8dfdd0 100644 (file)
@@ -627,11 +627,12 @@ static void resize_context_buffers(VP9_COMMON *cm, int width, int height) {
                        "Width and height beyond allowed size.");
 #endif
   if (cm->width != width || cm->height != height) {
-    const int new_rows = ALIGN_POWER_OF_TWO(height,
-                                            MI_SIZE_LOG2) >> MI_SIZE_LOG2;
-    const int new_cols = ALIGN_POWER_OF_TWO(width,
-                                            MI_SIZE_LOG2) >> MI_SIZE_LOG2;
-    if (calc_mi_size(new_rows) * calc_mi_size(new_cols) > cm->mi_alloc_size) {
+    const int new_mi_rows =
+        calc_mi_size(ALIGN_POWER_OF_TWO(height, MI_SIZE_LOG2) >> MI_SIZE_LOG2);
+    const int new_mi_cols =
+        calc_mi_size(ALIGN_POWER_OF_TWO(width,  MI_SIZE_LOG2) >> MI_SIZE_LOG2);
+    if (new_mi_cols > cm->mi_stride ||
+        (new_mi_rows * new_mi_cols > cm->mi_alloc_size)) {
       if (vp9_alloc_context_buffers(cm, width, height))
         vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR,
                            "Failed to allocate context buffers");