summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhkuang <hkuang@google.com>2014-06-23 14:59:20 -0700
committerhkuang <hkuang@google.com>2014-06-24 11:20:43 -0700
commit5e7242dfda069046dced13cac8170bfe0fdb5f05 (patch)
treeddc1b72013d76b7c9259942941be34476305cb9c
parent8357292a5a9ff0cc09616c11c17cf4bf61503b3b (diff)
downloadlibvpx-5e7242dfda069046dced13cac8170bfe0fdb5f05.tar
libvpx-5e7242dfda069046dced13cac8170bfe0fdb5f05.tar.gz
libvpx-5e7242dfda069046dced13cac8170bfe0fdb5f05.tar.bz2
libvpx-5e7242dfda069046dced13cac8170bfe0fdb5f05.zip
Add unit test to test user_priv parameter.
Change-Id: I6ba6171e43e0a43331ee0a7b698590b143979c44
-rw-r--r--test/decode_test_driver.cc7
-rw-r--r--test/decode_test_driver.h3
-rw-r--r--test/test.mk1
-rw-r--r--test/user_priv_test.cc87
4 files changed, 97 insertions, 1 deletions
diff --git a/test/decode_test_driver.cc b/test/decode_test_driver.cc
index 778c9a3c4..655b09055 100644
--- a/test/decode_test_driver.cc
+++ b/test/decode_test_driver.cc
@@ -24,12 +24,17 @@ vpx_codec_err_t Decoder::PeekStream(const uint8_t *cxdata, size_t size,
}
vpx_codec_err_t Decoder::DecodeFrame(const uint8_t *cxdata, size_t size) {
+ return DecodeFrame(cxdata, size, NULL);
+}
+
+vpx_codec_err_t Decoder::DecodeFrame(const uint8_t *cxdata, size_t size,
+ void *user_priv) {
vpx_codec_err_t res_dec;
InitOnce();
REGISTER_STATE_CHECK(
res_dec = vpx_codec_decode(&decoder_,
cxdata, static_cast<unsigned int>(size),
- NULL, 0));
+ user_priv, 0));
return res_dec;
}
diff --git a/test/decode_test_driver.h b/test/decode_test_driver.h
index ada2946c8..dd3593e1e 100644
--- a/test/decode_test_driver.h
+++ b/test/decode_test_driver.h
@@ -54,6 +54,9 @@ class Decoder {
vpx_codec_err_t DecodeFrame(const uint8_t *cxdata, size_t size);
+ vpx_codec_err_t DecodeFrame(const uint8_t *cxdata, size_t size,
+ void *user_priv);
+
DxDataIterator GetDxData() {
return DxDataIterator(&decoder_);
}
diff --git a/test/test.mk b/test/test.mk
index 7a3eaa9aa..a8397235d 100644
--- a/test/test.mk
+++ b/test/test.mk
@@ -30,6 +30,7 @@ LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += cq_test.cc
LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += keyframe_test.cc
LIBVPX_TEST_SRCS-$(CONFIG_VP9_DECODER) += external_frame_buffer_test.cc
+LIBVPX_TEST_SRCS-$(CONFIG_VP9_DECODER) += user_priv_test.cc
LIBVPX_TEST_SRCS-$(CONFIG_VP9_ENCODER) += active_map_test.cc
LIBVPX_TEST_SRCS-$(CONFIG_VP9_ENCODER) += borders_test.cc
LIBVPX_TEST_SRCS-$(CONFIG_VP9_ENCODER) += cpu_speed_test.cc
diff --git a/test/user_priv_test.cc b/test/user_priv_test.cc
new file mode 100644
index 000000000..38eef1c92
--- /dev/null
+++ b/test/user_priv_test.cc
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2013 The WebM project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include <cstdio>
+#include <cstdlib>
+#include <string>
+#include "third_party/googletest/src/include/gtest/gtest.h"
+#include "./vpx_config.h"
+#include "test/codec_factory.h"
+#include "test/decode_test_driver.h"
+#include "test/ivf_video_source.h"
+#include "test/md5_helper.h"
+#include "test/util.h"
+#if CONFIG_WEBM_IO
+#include "test/webm_video_source.h"
+#endif
+#include "vpx_mem/vpx_mem.h"
+
+namespace {
+
+using std::string;
+
+#if CONFIG_WEBM_IO
+// Decodes |filename|. Passes in user_priv data when calling DecodeFrame and
+// compares the user_priv from return img with the original user_priv to see if
+// they match. Both the pointer values and the values inside the addresses
+// should match.
+string DecodeFile(const string &filename) {
+ libvpx_test::WebMVideoSource video(filename);
+ video.Init();
+
+ vpx_codec_dec_cfg_t cfg = {0};
+ libvpx_test::VP9Decoder decoder(cfg, 0);
+
+ libvpx_test::MD5 md5;
+ int frame_num = 0;
+ for (video.Begin(); video.cxdata(); video.Next()) {
+ void *user_priv = reinterpret_cast<void *>(&frame_num);
+ const vpx_codec_err_t res =
+ decoder.DecodeFrame(video.cxdata(), video.frame_size(),
+ (frame_num == 0) ? NULL : user_priv);
+ if (res != VPX_CODEC_OK) {
+ EXPECT_EQ(VPX_CODEC_OK, res) << decoder.DecodeError();
+ break;
+ }
+ libvpx_test::DxDataIterator dec_iter = decoder.GetDxData();
+ const vpx_image_t *img = NULL;
+
+ // Get decompressed data.
+ while ((img = dec_iter.Next())) {
+ if (frame_num == 0) {
+ // user_priv pointer value should be the same.
+ EXPECT_EQ(img->user_priv, reinterpret_cast<void *>(NULL)) <<
+ "user_priv pointer value does not match.";
+ } else {
+ // user_priv pointer value should be the same.
+ EXPECT_EQ(img->user_priv, reinterpret_cast<void *>(&frame_num)) <<
+ "user_priv pointer value does not match.";
+ // value in user_priv pointer should also be the same.
+ EXPECT_EQ(*reinterpret_cast<int *>(img->user_priv), frame_num) <<
+ "Value in user_priv does not match.";
+ }
+ md5.Add(img);
+ }
+
+ frame_num++;
+ }
+ return string(md5.Get());
+}
+
+TEST(UserPrivTest, VideoDecode) {
+ // no tiles or frame parallel; this exercises the decoding to test the
+ // user_priv.
+ EXPECT_STREQ("b35a1b707b28e82be025d960aba039bc",
+ DecodeFile("vp90-2-03-size-226x226.webm").c_str());
+}
+
+#endif // CONFIG_WEBM_IO
+
+} // namespace