summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerome Jiang <jianj@google.com>2018-11-09 13:27:39 -0800
committerJerome Jiang <jianj@google.com>2018-11-09 22:45:24 -0800
commit2ac954dfd2e47afd0df2a6dece14d1689644e30c (patch)
treea681a69140514d96cb19f253eed27dd44c686919
parentc66fe1a8930cf1ad43b38dd7cb88f8ae0139b0b2 (diff)
downloadlibvpx-2ac954dfd2e47afd0df2a6dece14d1689644e30c.tar
libvpx-2ac954dfd2e47afd0df2a6dece14d1689644e30c.tar.gz
libvpx-2ac954dfd2e47afd0df2a6dece14d1689644e30c.tar.bz2
libvpx-2ac954dfd2e47afd0df2a6dece14d1689644e30c.zip
vp8: Init buffers and pred arrays for mt after allocation.
Buffers and arrays used for prediction are not initialized after allocation. BUG=902691 Change-Id: Ic727e5dab7456e91ec9d6c80694f60a1a3600640
-rw-r--r--vp8/decoder/threading.c14
-rw-r--r--vpx_scale/generic/yv12config.c8
2 files changed, 18 insertions, 4 deletions
diff --git a/vp8/decoder/threading.c b/vp8/decoder/threading.c
index 90e0f4d86..561922de3 100644
--- a/vp8/decoder/threading.c
+++ b/vp8/decoder/threading.c
@@ -15,8 +15,8 @@
#endif
#include "onyxd_int.h"
#include "vpx_mem/vpx_mem.h"
+#include "vp8/common/common.h"
#include "vp8/common/threading.h"
-
#include "vp8/common/loopfilter.h"
#include "vp8/common/extend.h"
#include "vpx_ports/vpx_timer.h"
@@ -761,22 +761,28 @@ void vp8mt_alloc_temp_buffers(VP8D_COMP *pbi, int width, int prev_mb_rows) {
/* Allocate memory for above_row buffers. */
CALLOC_ARRAY(pbi->mt_yabove_row, pc->mb_rows);
- for (i = 0; i < pc->mb_rows; ++i)
+ for (i = 0; i < pc->mb_rows; ++i) {
CHECK_MEM_ERROR(pbi->mt_yabove_row[i],
vpx_memalign(16, sizeof(unsigned char) *
(width + (VP8BORDERINPIXELS << 1))));
+ vp8_zero_array(pbi->mt_yabove_row[i], width + (VP8BORDERINPIXELS << 1));
+ }
CALLOC_ARRAY(pbi->mt_uabove_row, pc->mb_rows);
- for (i = 0; i < pc->mb_rows; ++i)
+ for (i = 0; i < pc->mb_rows; ++i) {
CHECK_MEM_ERROR(pbi->mt_uabove_row[i],
vpx_memalign(16, sizeof(unsigned char) *
(uv_width + VP8BORDERINPIXELS)));
+ vp8_zero_array(pbi->mt_uabove_row[i], uv_width + VP8BORDERINPIXELS);
+ }
CALLOC_ARRAY(pbi->mt_vabove_row, pc->mb_rows);
- for (i = 0; i < pc->mb_rows; ++i)
+ for (i = 0; i < pc->mb_rows; ++i) {
CHECK_MEM_ERROR(pbi->mt_vabove_row[i],
vpx_memalign(16, sizeof(unsigned char) *
(uv_width + VP8BORDERINPIXELS)));
+ vp8_zero_array(pbi->mt_vabove_row[i], uv_width + VP8BORDERINPIXELS);
+ }
/* Allocate memory for left_col buffers. */
CALLOC_ARRAY(pbi->mt_yleft_col, pc->mb_rows);
diff --git a/vpx_scale/generic/yv12config.c b/vpx_scale/generic/yv12config.c
index db1db37ce..287a5a098 100644
--- a/vpx_scale/generic/yv12config.c
+++ b/vpx_scale/generic/yv12config.c
@@ -61,6 +61,14 @@ int vp8_yv12_realloc_frame_buffer(YV12_BUFFER_CONFIG *ybf, int width,
if (!ybf->buffer_alloc) {
ybf->buffer_alloc = (uint8_t *)vpx_memalign(32, frame_size);
+#if defined(__has_feature)
+#if __has_feature(memory_sanitizer)
+ // This memset is needed for fixing the issue of using uninitialized
+ // value in msan test. It will cause a perf loss, so only do this for
+ // msan test.
+ memset(ybf->buffer_alloc, 0, frame_size);
+#endif
+#endif
ybf->buffer_alloc_sz = frame_size;
}