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;
     }
