Merge "Fixed memory leak with svc_test.cc"
This commit is contained in:
commit
5f86576187
105
test/svc_test.cc
105
test/svc_test.cc
@ -31,12 +31,16 @@ class SvcTest : public ::testing::Test {
|
|||||||
SvcTest()
|
SvcTest()
|
||||||
: codec_iface_(0),
|
: codec_iface_(0),
|
||||||
test_file_name_("hantro_collage_w352h288.yuv"),
|
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 ~SvcTest() {}
|
||||||
|
|
||||||
virtual void SetUp() {
|
virtual void SetUp() {
|
||||||
memset(&svc_, 0, sizeof(svc_));
|
|
||||||
svc_.first_frame_full_size = 1;
|
svc_.first_frame_full_size = 1;
|
||||||
svc_.encoding_mode = INTER_LAYER_PREDICTION_IP;
|
svc_.encoding_mode = INTER_LAYER_PREDICTION_IP;
|
||||||
svc_.log_level = SVC_LOG_DEBUG;
|
svc_.log_level = SVC_LOG_DEBUG;
|
||||||
@ -61,6 +65,8 @@ class SvcTest : public ::testing::Test {
|
|||||||
|
|
||||||
virtual void TearDown() {
|
virtual void TearDown() {
|
||||||
vpx_svc_release(&svc_);
|
vpx_svc_release(&svc_);
|
||||||
|
delete(decoder_);
|
||||||
|
if (codec_initialized_) vpx_codec_destroy(&codec_);
|
||||||
}
|
}
|
||||||
|
|
||||||
SvcContext svc_;
|
SvcContext svc_;
|
||||||
@ -68,22 +74,16 @@ class SvcTest : public ::testing::Test {
|
|||||||
struct vpx_codec_enc_cfg codec_enc_;
|
struct vpx_codec_enc_cfg codec_enc_;
|
||||||
vpx_codec_iface_t *codec_iface_;
|
vpx_codec_iface_t *codec_iface_;
|
||||||
std::string test_file_name_;
|
std::string test_file_name_;
|
||||||
|
bool codec_initialized_;
|
||||||
Decoder *decoder_;
|
Decoder *decoder_;
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST_F(SvcTest, SvcInit) {
|
TEST_F(SvcTest, SvcInit) {
|
||||||
svc_.spatial_layers = 0; // use default layers
|
// test missing parameters
|
||||||
vpx_codec_err_t res = vpx_svc_init(&svc_, &codec_, codec_iface_, &codec_enc_);
|
vpx_codec_err_t res = vpx_svc_init(NULL, &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_);
|
|
||||||
EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
|
EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
|
||||||
|
|
||||||
res = vpx_svc_init(&svc_, NULL, codec_iface_, &codec_enc_);
|
res = vpx_svc_init(&svc_, NULL, codec_iface_, &codec_enc_);
|
||||||
EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
|
EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
|
||||||
|
|
||||||
res = vpx_svc_init(&svc_, &codec_, NULL, &codec_enc_);
|
res = vpx_svc_init(&svc_, &codec_, NULL, &codec_enc_);
|
||||||
EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
|
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_);
|
res = vpx_svc_init(&svc_, &codec_, codec_iface_, &codec_enc_);
|
||||||
EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
|
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;
|
svc_.spatial_layers = 2;
|
||||||
vpx_svc_set_scale_factors(&svc_, "4/16,16*16"); // invalid scale values
|
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);
|
EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
|
||||||
|
|
||||||
vpx_svc_set_scale_factors(&svc_, "4/16,16/16"); // valid scale values
|
vpx_svc_set_scale_factors(&svc_, "4/16,16/16"); // valid scale values
|
||||||
res = vpx_svc_init(&svc_, &codec_, codec_iface_, &codec_enc_);
|
res = vpx_svc_init(&svc_, &codec_, codec_iface_, &codec_enc_);
|
||||||
EXPECT_EQ(VPX_CODEC_OK, res);
|
EXPECT_EQ(VPX_CODEC_OK, res);
|
||||||
|
codec_initialized_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(SvcTest, SetOptions) {
|
TEST_F(SvcTest, InvalidOptions) {
|
||||||
vpx_codec_err_t res = vpx_svc_set_options(NULL, "layers=3");
|
vpx_codec_err_t res = vpx_svc_set_options(&svc_, NULL);
|
||||||
EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
|
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);
|
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_);
|
res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
|
||||||
EXPECT_EQ(VPX_CODEC_OK, res);
|
EXPECT_EQ(VPX_CODEC_OK, res);
|
||||||
|
codec_initialized_ = true;
|
||||||
EXPECT_EQ(3, svc_.spatial_layers);
|
EXPECT_EQ(3, svc_.spatial_layers);
|
||||||
|
}
|
||||||
|
|
||||||
vpx_svc_set_options(&svc_, "not-an-option=1");
|
TEST_F(SvcTest, SetEncodingMode) {
|
||||||
res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
|
vpx_codec_err_t res = vpx_svc_set_options(&svc_, "encoding-mode=alt-ip");
|
||||||
EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
|
EXPECT_EQ(VPX_CODEC_OK, res);
|
||||||
|
|
||||||
vpx_svc_set_options(&svc_, "encoding-mode=alt-ip");
|
|
||||||
res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
|
res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
|
||||||
EXPECT_EQ(VPX_CODEC_OK, res);
|
EXPECT_EQ(VPX_CODEC_OK, res);
|
||||||
|
codec_initialized_ = true;
|
||||||
EXPECT_EQ(ALT_INTER_LAYER_PREDICTION_IP, svc_.encoding_mode);
|
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_);
|
res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
|
||||||
EXPECT_EQ(VPX_CODEC_OK, res);
|
EXPECT_EQ(VPX_CODEC_OK, res);
|
||||||
|
codec_initialized_ = true;
|
||||||
EXPECT_EQ(2, svc_.spatial_layers);
|
EXPECT_EQ(2, svc_.spatial_layers);
|
||||||
EXPECT_EQ(INTER_LAYER_PREDICTION_IP, svc_.encoding_mode);
|
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_);
|
res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
|
||||||
EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
|
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_);
|
res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
|
||||||
EXPECT_EQ(VPX_CODEC_OK, res);
|
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_);
|
res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
|
||||||
EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
|
EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
|
||||||
|
|
||||||
vpx_svc_set_options(&svc_, "quantizers=40,45");
|
vpx_svc_set_options(&svc_, "quantizers=40,45");
|
||||||
res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
|
res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
|
||||||
EXPECT_EQ(VPX_CODEC_OK, res);
|
EXPECT_EQ(VPX_CODEC_OK, res);
|
||||||
|
codec_initialized_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(SvcTest, SetQuantizers) {
|
TEST_F(SvcTest, SetQuantizers) {
|
||||||
@ -157,15 +187,16 @@ TEST_F(SvcTest, SetQuantizers) {
|
|||||||
|
|
||||||
svc_.first_frame_full_size = 0;
|
svc_.first_frame_full_size = 0;
|
||||||
svc_.spatial_layers = 2;
|
svc_.spatial_layers = 2;
|
||||||
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_OK, res);
|
|
||||||
|
|
||||||
res = vpx_svc_set_quantizers(&svc_, "40");
|
res = vpx_svc_set_quantizers(&svc_, "40");
|
||||||
EXPECT_EQ(VPX_CODEC_OK, res);
|
EXPECT_EQ(VPX_CODEC_OK, res);
|
||||||
res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
|
res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
|
||||||
EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
|
EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
|
||||||
|
|
||||||
|
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_OK, res);
|
||||||
|
codec_initialized_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(SvcTest, SetScaleFactors) {
|
TEST_F(SvcTest, SetScaleFactors) {
|
||||||
@ -177,15 +208,16 @@ TEST_F(SvcTest, SetScaleFactors) {
|
|||||||
|
|
||||||
svc_.first_frame_full_size = 0;
|
svc_.first_frame_full_size = 0;
|
||||||
svc_.spatial_layers = 2;
|
svc_.spatial_layers = 2;
|
||||||
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_OK, res);
|
|
||||||
|
|
||||||
res = vpx_svc_set_scale_factors(&svc_, "4/16");
|
res = vpx_svc_set_scale_factors(&svc_, "4/16");
|
||||||
EXPECT_EQ(VPX_CODEC_OK, res);
|
EXPECT_EQ(VPX_CODEC_OK, res);
|
||||||
res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
|
res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
|
||||||
EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
|
EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
|
||||||
|
|
||||||
|
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_OK, res);
|
||||||
|
codec_initialized_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// test that decoder can handle an SVC frame as the first frame in a sequence
|
// 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_codec_err_t res =
|
||||||
vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
|
vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
|
||||||
EXPECT_EQ(VPX_CODEC_OK, res);
|
EXPECT_EQ(VPX_CODEC_OK, res);
|
||||||
|
codec_initialized_ = true;
|
||||||
|
|
||||||
libvpx_test::I420VideoSource video(test_file_name_, kWidth, kHeight,
|
libvpx_test::I420VideoSource video(test_file_name_, kWidth, kHeight,
|
||||||
codec_enc_.g_timebase.den,
|
codec_enc_.g_timebase.den,
|
||||||
@ -227,6 +260,7 @@ TEST_F(SvcTest, EncodeThreeFrames) {
|
|||||||
vpx_codec_err_t res =
|
vpx_codec_err_t res =
|
||||||
vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
|
vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
|
||||||
ASSERT_EQ(VPX_CODEC_OK, res);
|
ASSERT_EQ(VPX_CODEC_OK, res);
|
||||||
|
codec_initialized_ = true;
|
||||||
|
|
||||||
libvpx_test::I420VideoSource video(test_file_name_, kWidth, kHeight,
|
libvpx_test::I420VideoSource video(test_file_name_, kWidth, kHeight,
|
||||||
codec_enc_.g_timebase.den,
|
codec_enc_.g_timebase.den,
|
||||||
@ -280,6 +314,7 @@ TEST_F(SvcTest, GetLayerResolution) {
|
|||||||
vpx_codec_err_t res =
|
vpx_codec_err_t res =
|
||||||
vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
|
vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
|
||||||
EXPECT_EQ(VPX_CODEC_OK, res);
|
EXPECT_EQ(VPX_CODEC_OK, res);
|
||||||
|
codec_initialized_ = true;
|
||||||
|
|
||||||
// ensure that requested layer is a valid layer
|
// ensure that requested layer is a valid layer
|
||||||
uint32_t layer_width, layer_height;
|
uint32_t layer_width, layer_height;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user