diff --git a/test/encode_test_driver.cc b/test/encode_test_driver.cc
index 79299a7..6ad10bd 100644
--- a/test/encode_test_driver.cc
+++ b/test/encode_test_driver.cc
@@ -88,13 +88,14 @@
   int usage = AOM_USAGE_GOOD_QUALITY;
   switch (mode) {
     case kOnePassGood:
-    case kTwoPassGood: break;
+    case kTwoPassGood:
+    case kLowComplexityDecode: break;
     case kRealTime: usage = AOM_USAGE_REALTIME; break;
     case kAllIntra: usage = AOM_USAGE_ALL_INTRA; break;
     default: ASSERT_TRUE(false) << "Unexpected mode " << mode;
   }
   mode_ = mode;
-  passes_ = (mode == kTwoPassGood) ? 2 : 1;
+  passes_ = (mode == kTwoPassGood || mode == kLowComplexityDecode) ? 2 : 1;
 
   const aom_codec_err_t res = codec_->DefaultEncoderConfig(&cfg_, usage);
   ASSERT_EQ(AOM_CODEC_OK, res);
diff --git a/test/encode_test_driver.h b/test/encode_test_driver.h
index 1dd7b21..a589ae2 100644
--- a/test/encode_test_driver.h
+++ b/test/encode_test_driver.h
@@ -28,7 +28,13 @@
 class CodecFactory;
 class VideoSource;
 
-enum TestMode { kRealTime, kOnePassGood, kTwoPassGood, kAllIntra };
+enum TestMode {
+  kRealTime,
+  kOnePassGood,
+  kTwoPassGood,
+  kAllIntra,
+  kLowComplexityDecode
+};
 #define ALL_TEST_MODES                                                     \
   ::testing::Values(::libaom_test::kRealTime, ::libaom_test::kOnePassGood, \
                     ::libaom_test::kTwoPassGood)
diff --git a/test/end_to_end_psnr_test.cc b/test/end_to_end_psnr_test.cc
index 0daa44d..e0e744b 100644
--- a/test/end_to_end_psnr_test.cc
+++ b/test/end_to_end_psnr_test.cc
@@ -11,6 +11,7 @@
 
 #include <memory>
 #include <ostream>
+#include <unordered_map>
 
 #include "gtest/gtest.h"
 
@@ -66,6 +67,22 @@
 #endif
 };
 
+// List of psnr thresholds for speed settings 1-3 and low complexity decode mode
+// keys: content -> speed -> PSNR threshold
+std::unordered_map<std::string, std::unordered_map<int, double>>
+    kPsnrThresholdLcMode = { { "SDR_Animal_oqo7.y4m",
+                               {
+                                   { 1, 27.9 },
+                                   { 2, 27.8 },
+                                   { 3, 27.3 },
+                               } },
+                             { "SDR_Health_rtd0_720p.y4m",
+                               {
+                                   { 1, 41.8 },
+                                   { 2, 41.4 },
+                                   { 3, 41.1 },
+                               } } };
+
 // Encoding modes tested
 const libaom_test::TestMode kEncodingModeVectors[] = {
   ::libaom_test::kTwoPassGood,
@@ -73,6 +90,11 @@
   ::libaom_test::kRealTime,
 };
 
+const TestVideoParam kTestVectorsLcMode[] = {
+  { "SDR_Animal_oqo7.y4m", 8, AOM_IMG_FMT_I420, AOM_BITS_8, 0 },
+  { "SDR_Health_rtd0_720p.y4m", 8, AOM_IMG_FMT_I420, AOM_BITS_8, 0 },
+};
+
 // Speed settings tested
 const int kCpuUsedVectors[] = { 1, 2, 3, 5, 6 };
 
@@ -91,7 +113,8 @@
   void SetUp() override {
     InitializeConfig(encoding_mode_);
     if (encoding_mode_ == ::libaom_test::kOnePassGood ||
-        encoding_mode_ == ::libaom_test::kTwoPassGood) {
+        encoding_mode_ == ::libaom_test::kTwoPassGood ||
+        encoding_mode_ == ::libaom_test::kLowComplexityDecode) {
       cfg_.g_lag_in_frames = 5;
     } else if (encoding_mode_ == ::libaom_test::kRealTime) {
       cfg_.rc_buf_sz = 1000;
@@ -113,8 +136,16 @@
   void PreEncodeFrameHook(::libaom_test::VideoSource *video,
                           ::libaom_test::Encoder *encoder) override {
     if (video->frame() == 0) {
-      encoder->Control(AV1E_SET_FRAME_PARALLEL_DECODING, 1);
-      encoder->Control(AV1E_SET_TILE_COLUMNS, 4);
+      if (encoding_mode_ == ::libaom_test::kLowComplexityDecode) {
+        ASSERT_LE(cpu_used_, 3);
+        encoder->Control(AV1E_SET_TILE_COLUMNS, 1);
+        encoder->Control(AV1E_SET_TILE_ROWS, 1);
+        encoder->Control(AV1E_SET_ENABLE_CDEF, 0);
+        encoder->Control(AV1E_SET_ENABLE_LOW_COMPLEXITY_DECODE, 1);
+      } else {
+        encoder->Control(AV1E_SET_FRAME_PARALLEL_DECODING, 1);
+        encoder->Control(AV1E_SET_TILE_COLUMNS, 4);
+      }
       encoder->Control(AOME_SET_CPUUSED, cpu_used_);
       // Test screen coding tools at cpu_used = 1 && encoding mode is two-pass.
       if (cpu_used_ == 1 && encoding_mode_ == ::libaom_test::kTwoPassGood)
@@ -122,7 +153,8 @@
       else
         encoder->Control(AV1E_SET_TUNE_CONTENT, AOM_CONTENT_DEFAULT);
       if (encoding_mode_ == ::libaom_test::kOnePassGood ||
-          encoding_mode_ == ::libaom_test::kTwoPassGood) {
+          encoding_mode_ == ::libaom_test::kTwoPassGood ||
+          encoding_mode_ == ::libaom_test::kLowComplexityDecode) {
         encoder->Control(AOME_SET_ENABLEAUTOALTREF, 1);
         encoder->Control(AOME_SET_ARNR_MAXFRAMES, 7);
         encoder->Control(AOME_SET_ARNR_STRENGTH, 5);
@@ -138,7 +170,10 @@
   }
 
   double GetPsnrThreshold() {
-    return kPsnrThreshold[cpu_used_][encoding_mode_];
+    if (encoding_mode_ == ::libaom_test::kLowComplexityDecode)
+      return kPsnrThresholdLcMode[test_video_param_.filename][cpu_used_];
+    else
+      return kPsnrThreshold[cpu_used_][encoding_mode_];
   }
 
   void DoTest() {
@@ -182,6 +217,10 @@
 
 class EndToEndAllIntraTest : public EndToEndTest {};
 
+class EndToEndLcModeTestLarge : public EndToEndTest {};
+
+class EndToEndLcModeTest : public EndToEndTest {};
+
 TEST_P(EndToEndTestLarge, EndtoEndPSNRTest) { DoTest(); }
 
 TEST_P(EndToEndTest, EndtoEndPSNRTest) { DoTest(); }
@@ -190,6 +229,10 @@
 
 TEST_P(EndToEndAllIntraTest, EndtoEndPSNRTest) { DoTest(); }
 
+TEST_P(EndToEndLcModeTestLarge, EndtoEndPSNRTest) { DoTest(); }
+
+TEST_P(EndToEndLcModeTest, EndtoEndPSNRTest) { DoTest(); }
+
 AV1_INSTANTIATE_TEST_SUITE(EndToEndTestLarge,
                            ::testing::ValuesIn(kEncodingModeVectors),
                            ::testing::ValuesIn(kTestVectors),
@@ -209,4 +252,15 @@
                            ::testing::Values(::libaom_test::kAllIntra),
                            ::testing::Values(kTestVectors[0]),  // 420
                            ::testing::Values(6));               // cpu_used
+
+AV1_INSTANTIATE_TEST_SUITE(
+    EndToEndLcModeTestLarge,
+    ::testing::Values(::libaom_test::kLowComplexityDecode),
+    ::testing::ValuesIn(kTestVectorsLcMode),
+    ::testing::Values(1, 3));  // cpu_used
+
+AV1_INSTANTIATE_TEST_SUITE(
+    EndToEndLcModeTest, ::testing::Values(::libaom_test::kLowComplexityDecode),
+    ::testing::ValuesIn(kTestVectorsLcMode),
+    ::testing::Values(2));  // cpu_used
 }  // namespace
