diff options
author | hkuang <hkuang@google.com> | 2013-11-14 22:50:46 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-11-14 22:50:46 -0800 |
commit | aa43d6ba5f5fb7eaeca1d0573ecb16ea4d388197 (patch) | |
tree | 6ff3bfc5090953c49fa26fac842b924d88e0983d /libvpx/test/svc_test.cc | |
parent | a1b7a7bb1ccf3f479bbca69a52a76eb05789dbaf (diff) | |
parent | 9b35249446b07f40ac5fcc3205f2c048616efacc (diff) | |
download | android_external_libvpx-aa43d6ba5f5fb7eaeca1d0573ecb16ea4d388197.tar.gz android_external_libvpx-aa43d6ba5f5fb7eaeca1d0573ecb16ea4d388197.tar.bz2 android_external_libvpx-aa43d6ba5f5fb7eaeca1d0573ecb16ea4d388197.zip |
am 9b352494: Roll latest libvpx to fix scalling bug. Checkout is from master:Ib748eb287520c794631697204da6ebe19523ce95
* commit '9b35249446b07f40ac5fcc3205f2c048616efacc':
Roll latest libvpx to fix scalling bug. Checkout is from master:Ib748eb287520c794631697204da6ebe19523ce95
Diffstat (limited to 'libvpx/test/svc_test.cc')
-rw-r--r-- | libvpx/test/svc_test.cc | 101 |
1 files changed, 68 insertions, 33 deletions
diff --git a/libvpx/test/svc_test.cc b/libvpx/test/svc_test.cc index 5941cae..98a5d94 100644 --- a/libvpx/test/svc_test.cc +++ b/libvpx/test/svc_test.cc @@ -31,12 +31,16 @@ class SvcTest : public ::testing::Test { SvcTest() : codec_iface_(0), test_file_name_("hantro_collage_w352h288.yuv"), - decoder_(0) {} + codec_initialized_(false), + decoder_(0) { + memset(&svc_, 0, sizeof(svc_)); + memset(&codec_, 0, sizeof(codec_)); + memset(&codec_enc_, 0, sizeof(codec_enc_)); + } virtual ~SvcTest() {} virtual void SetUp() { - memset(&svc_, 0, sizeof(svc_)); svc_.first_frame_full_size = 1; svc_.encoding_mode = INTER_LAYER_PREDICTION_IP; svc_.log_level = SVC_LOG_DEBUG; @@ -61,6 +65,8 @@ class SvcTest : public ::testing::Test { virtual void TearDown() { vpx_svc_release(&svc_); + delete(decoder_); + if (codec_initialized_) vpx_codec_destroy(&codec_); } SvcContext svc_; @@ -68,22 +74,16 @@ class SvcTest : public ::testing::Test { struct vpx_codec_enc_cfg codec_enc_; vpx_codec_iface_t *codec_iface_; std::string test_file_name_; - + bool codec_initialized_; Decoder *decoder_; }; TEST_F(SvcTest, SvcInit) { - svc_.spatial_layers = 0; // use default layers - vpx_codec_err_t res = vpx_svc_init(&svc_, &codec_, codec_iface_, &codec_enc_); - EXPECT_EQ(VPX_CODEC_OK, res); - EXPECT_EQ(VPX_SS_DEFAULT_LAYERS, svc_.spatial_layers); - - res = vpx_svc_init(NULL, &codec_, codec_iface_, &codec_enc_); + // test missing parameters + vpx_codec_err_t res = vpx_svc_init(NULL, &codec_, codec_iface_, &codec_enc_); EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res); - res = vpx_svc_init(&svc_, NULL, codec_iface_, &codec_enc_); EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res); - res = vpx_svc_init(&svc_, &codec_, NULL, &codec_enc_); EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res); @@ -94,58 +94,88 @@ TEST_F(SvcTest, SvcInit) { res = vpx_svc_init(&svc_, &codec_, codec_iface_, &codec_enc_); EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res); + svc_.spatial_layers = 0; // use default layers + res = vpx_svc_init(&svc_, &codec_, codec_iface_, &codec_enc_); + EXPECT_EQ(VPX_CODEC_OK, res); + codec_initialized_ = true; + EXPECT_EQ(VPX_SS_DEFAULT_LAYERS, svc_.spatial_layers); +} + +TEST_F(SvcTest, InitTwoLayers) { svc_.spatial_layers = 2; vpx_svc_set_scale_factors(&svc_, "4/16,16*16"); // invalid scale values - res = vpx_svc_init(&svc_, &codec_, codec_iface_, &codec_enc_); + vpx_codec_err_t res = vpx_svc_init(&svc_, &codec_, codec_iface_, &codec_enc_); EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res); vpx_svc_set_scale_factors(&svc_, "4/16,16/16"); // valid scale values res = vpx_svc_init(&svc_, &codec_, codec_iface_, &codec_enc_); EXPECT_EQ(VPX_CODEC_OK, res); + codec_initialized_ = true; } -TEST_F(SvcTest, SetOptions) { - vpx_codec_err_t res = vpx_svc_set_options(NULL, "layers=3"); +TEST_F(SvcTest, InvalidOptions) { + vpx_codec_err_t res = vpx_svc_set_options(&svc_, NULL); EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res); - vpx_svc_set_options(&svc_, NULL); + res = vpx_svc_set_options(&svc_, "not-an-option=1"); + EXPECT_EQ(VPX_CODEC_OK, res); + res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_); EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res); +} - vpx_svc_set_options(&svc_, "layers=3"); +TEST_F(SvcTest, SetLayersOption) { + vpx_codec_err_t res = vpx_svc_set_options(&svc_, "layers=3"); + EXPECT_EQ(VPX_CODEC_OK, res); res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_); EXPECT_EQ(VPX_CODEC_OK, res); + codec_initialized_ = true; EXPECT_EQ(3, svc_.spatial_layers); +} - vpx_svc_set_options(&svc_, "not-an-option=1"); - res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_); - EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res); - - vpx_svc_set_options(&svc_, "encoding-mode=alt-ip"); +TEST_F(SvcTest, SetEncodingMode) { + vpx_codec_err_t res = vpx_svc_set_options(&svc_, "encoding-mode=alt-ip"); + EXPECT_EQ(VPX_CODEC_OK, res); res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_); EXPECT_EQ(VPX_CODEC_OK, res); + codec_initialized_ = true; EXPECT_EQ(ALT_INTER_LAYER_PREDICTION_IP, svc_.encoding_mode); +} - vpx_svc_set_options(&svc_, "layers=2 encoding-mode=ip"); +TEST_F(SvcTest, SetMultipleOptions) { + vpx_codec_err_t res = vpx_svc_set_options(&svc_, "layers=2 encoding-mode=ip"); res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_); EXPECT_EQ(VPX_CODEC_OK, res); + codec_initialized_ = true; EXPECT_EQ(2, svc_.spatial_layers); EXPECT_EQ(INTER_LAYER_PREDICTION_IP, svc_.encoding_mode); +} - vpx_svc_set_options(&svc_, "scale-factors=not-scale-factors"); +TEST_F(SvcTest, SetScaleFactorsOption) { + svc_.spatial_layers = 2; + vpx_codec_err_t res = + vpx_svc_set_options(&svc_, "scale-factors=not-scale-factors"); + EXPECT_EQ(VPX_CODEC_OK, res); res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_); EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res); - vpx_svc_set_options(&svc_, "scale-factors=1/3,2/3"); + res = vpx_svc_set_options(&svc_, "scale-factors=1/3,2/3"); + EXPECT_EQ(VPX_CODEC_OK, res); res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_); EXPECT_EQ(VPX_CODEC_OK, res); + codec_initialized_ = true; +} - vpx_svc_set_options(&svc_, "quantizers=not-quantizers"); +TEST_F(SvcTest, SetQuantizersOption) { + svc_.spatial_layers = 2; + vpx_codec_err_t res = vpx_svc_set_options(&svc_, "quantizers=not-quantizers"); + EXPECT_EQ(VPX_CODEC_OK, res); res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_); EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res); vpx_svc_set_options(&svc_, "quantizers=40,45"); res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_); EXPECT_EQ(VPX_CODEC_OK, res); + codec_initialized_ = true; } TEST_F(SvcTest, SetQuantizers) { @@ -157,15 +187,16 @@ TEST_F(SvcTest, SetQuantizers) { svc_.first_frame_full_size = 0; svc_.spatial_layers = 2; - res = vpx_svc_set_quantizers(&svc_, "40,30"); + res = vpx_svc_set_quantizers(&svc_, "40"); EXPECT_EQ(VPX_CODEC_OK, res); res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_); - EXPECT_EQ(VPX_CODEC_OK, res); + EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res); - res = vpx_svc_set_quantizers(&svc_, "40"); + res = vpx_svc_set_quantizers(&svc_, "40,30"); EXPECT_EQ(VPX_CODEC_OK, res); res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_); - EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res); + EXPECT_EQ(VPX_CODEC_OK, res); + codec_initialized_ = true; } TEST_F(SvcTest, SetScaleFactors) { @@ -177,15 +208,16 @@ TEST_F(SvcTest, SetScaleFactors) { svc_.first_frame_full_size = 0; svc_.spatial_layers = 2; - res = vpx_svc_set_scale_factors(&svc_, "4/16,16/16"); + res = vpx_svc_set_scale_factors(&svc_, "4/16"); EXPECT_EQ(VPX_CODEC_OK, res); res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_); - EXPECT_EQ(VPX_CODEC_OK, res); + EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res); - res = vpx_svc_set_scale_factors(&svc_, "4/16"); + res = vpx_svc_set_scale_factors(&svc_, "4/16,16/16"); EXPECT_EQ(VPX_CODEC_OK, res); res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_); - EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res); + EXPECT_EQ(VPX_CODEC_OK, res); + codec_initialized_ = true; } // test that decoder can handle an SVC frame as the first frame in a sequence @@ -200,6 +232,7 @@ TEST_F(SvcTest, DISABLED_FirstFrameHasLayers) { vpx_codec_err_t res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_); EXPECT_EQ(VPX_CODEC_OK, res); + codec_initialized_ = true; libvpx_test::I420VideoSource video(test_file_name_, kWidth, kHeight, codec_enc_.g_timebase.den, @@ -227,6 +260,7 @@ TEST_F(SvcTest, EncodeThreeFrames) { vpx_codec_err_t res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_); ASSERT_EQ(VPX_CODEC_OK, res); + codec_initialized_ = true; libvpx_test::I420VideoSource video(test_file_name_, kWidth, kHeight, codec_enc_.g_timebase.den, @@ -280,6 +314,7 @@ TEST_F(SvcTest, GetLayerResolution) { vpx_codec_err_t res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_); EXPECT_EQ(VPX_CODEC_OK, res); + codec_initialized_ = true; // ensure that requested layer is a valid layer uint32_t layer_width, layer_height; |