diff --git a/README.chromium b/README.chromium
index 2c97ef119cdd98d369633cc5aa9d1c895785c163..5a5abef93740dec06b6a9ee638cdd35f8361944e 100644
--- a/README.chromium
+++ b/README.chromium
@@ -1,6 +1,6 @@
 Name: libyuv
 URL: http://code.google.com/p/libyuv/
-Version: 1673
+Version: 1674
 License: BSD
 License File: LICENSE
 
diff --git a/include/libyuv/version.h b/include/libyuv/version.h
index ea589a0c0d4aefa828f80fdd0a7aaf8a0045ee8d..59f5a6d7ff6345a6e24c46b3903e6d7fa8930d5d 100644
--- a/include/libyuv/version.h
+++ b/include/libyuv/version.h
@@ -11,6 +11,6 @@
 #ifndef INCLUDE_LIBYUV_VERSION_H_
 #define INCLUDE_LIBYUV_VERSION_H_
 
-#define LIBYUV_VERSION 1673
+#define LIBYUV_VERSION 1674
 
 #endif  // INCLUDE_LIBYUV_VERSION_H_
diff --git a/unit_test/compare_test.cc b/unit_test/compare_test.cc
index 55f5ffde486f378c8126832505fb5f1b2baf478e..fbcebd8b9641443cbe0287b4e9ea99b7fda1ae41 100644
--- a/unit_test/compare_test.cc
+++ b/unit_test/compare_test.cc
@@ -316,6 +316,78 @@ TEST_F(LibYUVCompareTest, BenchmarkHammingDistance) {
   free_aligned_buffer_page_end(src_b);
 }
 
+// Tests low levels match reference C for specified size.
+// The opt implementations have size limitations
+// For NEON the counters are 16 bit so the shorts overflow after 65536 bytes.
+// So doing one less iteration of the loop is the maximum.
+#if defined(HAS_HAMMINGDISTANCE_NEON)
+static const int kMaxOptCount = 65536 - 32;  // 65504
+#else
+static const int kMaxOptCount = (1 << (32 - 3)) - 64;  // 536870848
+#endif
+
+TEST_F(LibYUVCompareTest, TestHammingDistance_Opt) {
+  uint32 h1 = 0;
+  align_buffer_page_end(src_a, benchmark_width_ * benchmark_height_);
+  align_buffer_page_end(src_b, benchmark_width_ * benchmark_height_);
+  memset(src_a, 255u, benchmark_width_ * benchmark_height_);
+  memset(src_b, 0, benchmark_width_ * benchmark_height_);
+
+  uint64 h0 = ComputeHammingDistance(src_a, src_b,
+                                     benchmark_width_ * benchmark_height_);
+  EXPECT_EQ(benchmark_width_ * benchmark_height_ * 8ULL, h0);
+
+  for (int i = 0; i < benchmark_iterations_; ++i) {
+#if defined(HAS_HAMMINGDISTANCE_NEON)
+    h1 = HammingDistance_NEON(src_a, src_b,
+                              benchmark_width_ * benchmark_height_);
+#elif defined(HAS_HAMMINGDISTANCE_AVX2)
+    int has_avx2 = TestCpuFlag(kCpuHasAVX2);
+    if (has_avx2) {
+      h1 = HammingDistance_AVX2(src_a, src_b,
+                                benchmark_width_ * benchmark_height_);
+    } else {
+      int has_ssse3 = TestCpuFlag(kCpuHasSSSE3);
+      if (has_ssse3) {
+        h1 = HammingDistance_SSSE3(src_a, src_b,
+                                   benchmark_width_ * benchmark_height_);
+      } else {
+        h1 = HammingDistance_X86(src_a, src_b,
+                                 benchmark_width_ * benchmark_height_);
+      }
+    }
+#elif defined(HAS_HAMMINGDISTANCE_X86)
+    h1 =
+        HammingDistance_X86(src_a, src_b, benchmark_width_ * benchmark_height_);
+#else
+    h1 = HammingDistance_C(src_a, src_b, benchmark_width_ * benchmark_height_);
+#endif
+  }
+  // A large count will cause the low level to potentially overflow so the
+  // result can not be expected to be correct.
+  // TODO(fbarchard): Consider expecting the low 16 bits to match.
+  if ((benchmark_width_ * benchmark_height_) <= kMaxOptCount) {
+    EXPECT_EQ(benchmark_width_ * benchmark_height_ * 8U, h1);
+  } else {
+    if (benchmark_width_ * benchmark_height_ * 8ULL !=
+        static_cast<uint64>(h1)) {
+      printf(
+          "warning - HammingDistance_Opt %u does not match %llu "
+          "but length of %u is longer than guaranteed.\n",
+          h1, benchmark_width_ * benchmark_height_ * 8ULL,
+          benchmark_width_ * benchmark_height_);
+    } else {
+      printf(
+          "warning - HammingDistance_Opt %u matches but length of %u "
+          "is longer than guaranteed.\n",
+          h1, benchmark_width_ * benchmark_height_);
+    }
+  }
+
+  free_aligned_buffer_page_end(src_a);
+  free_aligned_buffer_page_end(src_b);
+}
+
 TEST_F(LibYUVCompareTest, TestHammingDistance) {
   align_buffer_page_end(src_a, benchmark_width_ * benchmark_height_);
   align_buffer_page_end(src_b, benchmark_width_ * benchmark_height_);