Fix bug in TemporalFilterTest
This CL fixes the uninitialized access which was causing
a nightly test failure.
BUG=aomedia:2841
Change-Id: Iddf10c8244ab6bf673452c8a70546fb2443ce615
diff --git a/av1/encoder/temporal_filter.c b/av1/encoder/temporal_filter.c
index 96b8df4..9c66371 100644
--- a/av1/encoder/temporal_filter.c
+++ b/av1/encoder/temporal_filter.c
@@ -834,7 +834,8 @@
memset(tmp_mb_mode_info, 0, sizeof(MB_MODE_INFO));
mbd->mi = &tmp_mb_mode_info;
mbd->mi[0]->motion_mode = SIMPLE_TRANSLATION;
- // Allocate memory for predictor, accumulator and count.
+ // TODO(Jayasanker): Optimize buffers based on chroma subsampling and
+ // bit-depth. Allocate memory for predictor, accumulator and count.
uint8_t *pred8 = aom_memalign(32, num_planes * mb_pels * sizeof(uint8_t));
uint16_t *pred16 = aom_memalign(32, num_planes * mb_pels * sizeof(uint16_t));
uint32_t *accum = aom_memalign(16, num_planes * mb_pels * sizeof(uint32_t));
diff --git a/test/temporal_filter_test.cc b/test/temporal_filter_test.cc
index 21fb2ab..e360d51 100644
--- a/test/temporal_filter_test.cc
+++ b/test/temporal_filter_test.cc
@@ -81,12 +81,13 @@
void GenRandomData(int width, int height, int stride, int stride2,
int num_planes, int subsampling_x, int subsampling_y) {
uint8_t *src1p = src1_;
- uint8_t *src2p = src2_;
+ uint8_t *src2p;
for (int plane = 0; plane < num_planes; plane++) {
int plane_w = plane ? width >> subsampling_x : width;
int plane_h = plane ? height >> subsampling_y : height;
int plane_stride = plane ? stride >> subsampling_x : stride;
int plane_stride2 = plane ? stride2 >> subsampling_x : stride2;
+ src2p = src2_ + plane * stride2 * height;
for (int ii = 0; ii < plane_h; ii++) {
for (int jj = 0; jj < plane_w; jj++) {
src1p[jj] = rnd_.Rand8();
@@ -102,12 +103,13 @@
int num_planes, int subsampling_x, int subsampling_y,
uint8_t val) {
uint8_t *src1p = src1_;
- uint8_t *src2p = src2_;
+ uint8_t *src2p;
for (int plane = 0; plane < num_planes; plane++) {
int plane_w = plane ? width >> subsampling_x : width;
int plane_h = plane ? height >> subsampling_y : height;
int plane_stride = plane ? stride >> subsampling_x : stride;
int plane_stride2 = plane ? stride2 >> subsampling_x : stride2;
+ src2p = src2_ + plane * stride2 * height;
for (int ii = 0; ii < plane_h; ii++) {
for (int jj = 0; jj < plane_w; jj++) {
src1p[jj] = val;
@@ -196,8 +198,10 @@
MACROBLOCKD *mbd = (MACROBLOCKD *)malloc(sizeof(MACROBLOCKD));
mbd->bd = 8;
for (int plane = AOM_PLANE_Y; plane < num_planes; plane++) {
+ int plane_height = plane ? height >> subsampling_y : height;
+ int plane_stride = plane ? stride >> subsampling_x : stride;
ref_frame->buffers[plane] =
- ref_frame->buffer_alloc + plane * width * height;
+ ref_frame->buffer_alloc + plane * plane_stride * plane_height;
mbd->plane[plane].subsampling_x = plane ? subsampling_x : 0;
mbd->plane[plane].subsampling_y = plane ? subsampling_y : 0;
}
@@ -332,13 +336,14 @@
void GenRandomData(int width, int height, int stride, int stride2, int bd,
int subsampling_x, int subsampling_y, int num_planes) {
uint16_t *src1p = src1_;
- uint16_t *src2p = src2_;
+ uint16_t *src2p;
for (int plane = AOM_PLANE_Y; plane < num_planes; plane++) {
int plane_w = plane ? width >> subsampling_x : width;
int plane_h = plane ? height >> subsampling_y : height;
int plane_stride = plane ? stride >> subsampling_x : stride;
int plane_stride2 = plane ? stride2 >> subsampling_x : stride2;
const uint16_t max_val = (1 << bd) - 1;
+ src2p = src2_ + plane * stride2 * height;
for (int ii = 0; ii < plane_h; ii++) {
for (int jj = 0; jj < plane_w; jj++) {
src1p[jj] = rnd_.Rand16() & max_val;
@@ -354,12 +359,13 @@
int subsampling_x, int subsampling_y, int num_planes,
uint16_t val) {
uint16_t *src1p = src1_;
- uint16_t *src2p = src2_;
+ uint16_t *src2p;
for (int plane = AOM_PLANE_Y; plane < num_planes; plane++) {
int plane_w = plane ? width >> subsampling_x : width;
int plane_h = plane ? height >> subsampling_y : height;
int plane_stride = plane ? stride >> subsampling_x : stride;
int plane_stride2 = plane ? stride2 >> subsampling_x : stride2;
+ src2p = src2_ + plane * stride2 * height;
uint16_t max_val = (1 << bd) - 1;
for (int ii = 0; ii < plane_h; ii++) {
for (int jj = 0; jj < plane_w; jj++) {
@@ -450,8 +456,10 @@
MACROBLOCKD *mbd = (MACROBLOCKD *)malloc(sizeof(MACROBLOCKD));
mbd->bd = BD;
for (int plane = AOM_PLANE_Y; plane < num_planes; plane++) {
+ int plane_height = plane ? height >> subsampling_y : height;
+ int plane_stride = plane ? stride >> subsampling_x : stride;
ref_frame->buffers[plane] =
- ref_frame->buffer_alloc + plane * width * height;
+ ref_frame->buffer_alloc + plane * plane_stride * plane_height;
mbd->plane[plane].subsampling_x = plane ? subsampling_x : 0;
mbd->plane[plane].subsampling_y = plane ? subsampling_y : 0;
}