]> granicus.if.org Git - libvpx/commitdiff
Fix Issue #679: vp9 C loop filter produces valgrind warning.
authorhkuang <hkuang@google.com>
Thu, 9 Jan 2014 18:36:50 +0000 (10:36 -0800)
committerhkuang <hkuang@google.com>
Fri, 10 Jan 2014 18:24:21 +0000 (10:24 -0800)
Fix the valgrind error due to access uninitialized
memory in loopfilter.

Change-Id: I52fccf5ede845ee1f4c13d3bd909b8f220c0bdff

vpx_scale/generic/yv12config.c

index fc05d8ca73439d5a21e7f433647e326e9e01a82d..994e8430c23d553570060994066714ef8e5c2269 100644 (file)
@@ -175,6 +175,11 @@ int vp9_realloc_frame_buffer(YV12_BUFFER_CONFIG *ybf,
           return -1;
         }
 
+        // This memset is needed for fixing valgrind error from C loop filter
+        // due to access uninitialized memory in frame border. It could be
+        // removed if border is totally removed.
+        vpx_memset(ext_fb->data, 0, ext_fb->size);
+
         ybf->buffer_alloc = yv12_align_addr(ext_fb->data, 32);
       }
     } else {
@@ -183,16 +188,21 @@ int vp9_realloc_frame_buffer(YV12_BUFFER_CONFIG *ybf,
         if (ybf->buffer_alloc)
           vpx_free(ybf->buffer_alloc);
         ybf->buffer_alloc = vpx_memalign(32, frame_size);
+        if (!ybf->buffer_alloc)
+          return -1;
+
         ybf->buffer_alloc_sz = frame_size;
+
+        // This memset is needed for fixing valgrind error from C loop filter
+        // due to access uninitialized memory in frame boarder. It could be
+        // removed if border is totally removed.
+        vpx_memset(ybf->buffer_alloc, 0, ybf->buffer_alloc_sz);
       }
 
       if (ybf->buffer_alloc_sz < frame_size)
         return -1;
     }
 
-    if (!ybf->buffer_alloc)
-      return -1;
-
     /* Only support allocating buffers that have a border that's a multiple
      * of 32. The border restriction is required to get 16-byte alignment of
      * the start of the chroma rows without introducing an arbitrary gap