Merge "vp9: Add nonref frame buffer test."
This commit is contained in:
commit
adbb4c4d32
@ -34,7 +34,8 @@ struct ExternalFrameBuffer {
|
|||||||
// Class to manipulate a list of external frame buffers.
|
// Class to manipulate a list of external frame buffers.
|
||||||
class ExternalFrameBufferList {
|
class ExternalFrameBufferList {
|
||||||
public:
|
public:
|
||||||
ExternalFrameBufferList() : num_buffers_(0), ext_fb_list_(NULL) {}
|
ExternalFrameBufferList()
|
||||||
|
: num_buffers_(0), num_used_buffers_(0), ext_fb_list_(NULL) {}
|
||||||
|
|
||||||
virtual ~ExternalFrameBufferList() {
|
virtual ~ExternalFrameBufferList() {
|
||||||
for (int i = 0; i < num_buffers_; ++i) {
|
for (int i = 0; i < num_buffers_; ++i) {
|
||||||
@ -71,6 +72,8 @@ class ExternalFrameBufferList {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SetFrameBuffer(idx, fb);
|
SetFrameBuffer(idx, fb);
|
||||||
|
|
||||||
|
num_used_buffers_++;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,6 +109,7 @@ class ExternalFrameBufferList {
|
|||||||
}
|
}
|
||||||
EXPECT_EQ(1, ext_fb->in_use);
|
EXPECT_EQ(1, ext_fb->in_use);
|
||||||
ext_fb->in_use = 0;
|
ext_fb->in_use = 0;
|
||||||
|
num_used_buffers_--;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,6 +125,8 @@ class ExternalFrameBufferList {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int num_used_buffers() const { return num_used_buffers_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Returns the index of the first free frame buffer. Returns |num_buffers_|
|
// Returns the index of the first free frame buffer. Returns |num_buffers_|
|
||||||
// if there are no free frame buffers.
|
// if there are no free frame buffers.
|
||||||
@ -145,6 +151,7 @@ class ExternalFrameBufferList {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int num_buffers_;
|
int num_buffers_;
|
||||||
|
int num_used_buffers_;
|
||||||
ExternalFrameBuffer *ext_fb_list_;
|
ExternalFrameBuffer *ext_fb_list_;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -273,6 +280,7 @@ class ExternalFrameBufferMD5Test
|
|||||||
|
|
||||||
#if CONFIG_WEBM_IO
|
#if CONFIG_WEBM_IO
|
||||||
const char kVP9TestFile[] = "vp90-2-02-size-lf-1920x1080.webm";
|
const char kVP9TestFile[] = "vp90-2-02-size-lf-1920x1080.webm";
|
||||||
|
const char kVP9NonRefTestFile[] = "vp90-2-22-svc_1280x720_1.webm";
|
||||||
|
|
||||||
// Class for testing passing in external frame buffers to libvpx.
|
// Class for testing passing in external frame buffers to libvpx.
|
||||||
class ExternalFrameBufferTest : public ::testing::Test {
|
class ExternalFrameBufferTest : public ::testing::Test {
|
||||||
@ -292,7 +300,9 @@ class ExternalFrameBufferTest : public ::testing::Test {
|
|||||||
|
|
||||||
virtual void TearDown() {
|
virtual void TearDown() {
|
||||||
delete decoder_;
|
delete decoder_;
|
||||||
|
decoder_ = NULL;
|
||||||
delete video_;
|
delete video_;
|
||||||
|
video_ = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Passes the external frame buffer information to libvpx.
|
// Passes the external frame buffer information to libvpx.
|
||||||
@ -325,7 +335,7 @@ class ExternalFrameBufferTest : public ::testing::Test {
|
|||||||
return VPX_CODEC_OK;
|
return VPX_CODEC_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
void CheckDecodedFrames() {
|
void CheckDecodedFrames() {
|
||||||
libvpx_test::DxDataIterator dec_iter = decoder_->GetDxData();
|
libvpx_test::DxDataIterator dec_iter = decoder_->GetDxData();
|
||||||
const vpx_image_t *img = NULL;
|
const vpx_image_t *img = NULL;
|
||||||
@ -341,6 +351,25 @@ class ExternalFrameBufferTest : public ::testing::Test {
|
|||||||
int num_buffers_;
|
int num_buffers_;
|
||||||
ExternalFrameBufferList fb_list_;
|
ExternalFrameBufferList fb_list_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ExternalFrameBufferNonRefTest : public ExternalFrameBufferTest {
|
||||||
|
protected:
|
||||||
|
virtual void SetUp() {
|
||||||
|
video_ = new libvpx_test::WebMVideoSource(kVP9NonRefTestFile);
|
||||||
|
ASSERT_TRUE(video_ != NULL);
|
||||||
|
video_->Init();
|
||||||
|
video_->Begin();
|
||||||
|
|
||||||
|
vpx_codec_dec_cfg_t cfg = vpx_codec_dec_cfg_t();
|
||||||
|
decoder_ = new libvpx_test::VP9Decoder(cfg, 0);
|
||||||
|
ASSERT_TRUE(decoder_ != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void CheckFrameBufferRelease() {
|
||||||
|
TearDown();
|
||||||
|
ASSERT_EQ(0, fb_list_.num_used_buffers());
|
||||||
|
}
|
||||||
|
};
|
||||||
#endif // CONFIG_WEBM_IO
|
#endif // CONFIG_WEBM_IO
|
||||||
|
|
||||||
// This test runs through the set of test vectors, and decodes them.
|
// This test runs through the set of test vectors, and decodes them.
|
||||||
@ -419,6 +448,8 @@ TEST_F(ExternalFrameBufferTest, NotEnoughBuffers) {
|
|||||||
SetFrameBufferFunctions(num_buffers, get_vp9_frame_buffer,
|
SetFrameBufferFunctions(num_buffers, get_vp9_frame_buffer,
|
||||||
release_vp9_frame_buffer));
|
release_vp9_frame_buffer));
|
||||||
ASSERT_EQ(VPX_CODEC_OK, DecodeOneFrame());
|
ASSERT_EQ(VPX_CODEC_OK, DecodeOneFrame());
|
||||||
|
// Only run this on long clips. Decoding a very short clip will return
|
||||||
|
// VPX_CODEC_OK even with only 2 buffers.
|
||||||
ASSERT_EQ(VPX_CODEC_MEM_ERROR, DecodeRemainingFrames());
|
ASSERT_EQ(VPX_CODEC_MEM_ERROR, DecodeRemainingFrames());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -467,6 +498,15 @@ TEST_F(ExternalFrameBufferTest, SetAfterDecode) {
|
|||||||
SetFrameBufferFunctions(num_buffers, get_vp9_frame_buffer,
|
SetFrameBufferFunctions(num_buffers, get_vp9_frame_buffer,
|
||||||
release_vp9_frame_buffer));
|
release_vp9_frame_buffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(ExternalFrameBufferNonRefTest, DISABLED_ReleaseNonRefFrameBuffer) {
|
||||||
|
const int num_buffers = VP9_MAXIMUM_REF_BUFFERS + VPX_MAXIMUM_WORK_BUFFERS;
|
||||||
|
ASSERT_EQ(VPX_CODEC_OK,
|
||||||
|
SetFrameBufferFunctions(num_buffers, get_vp9_frame_buffer,
|
||||||
|
release_vp9_frame_buffer));
|
||||||
|
ASSERT_EQ(VPX_CODEC_OK, DecodeRemainingFrames());
|
||||||
|
CheckFrameBufferRelease();
|
||||||
|
}
|
||||||
#endif // CONFIG_WEBM_IO
|
#endif // CONFIG_WEBM_IO
|
||||||
|
|
||||||
VP9_INSTANTIATE_TEST_CASE(
|
VP9_INSTANTIATE_TEST_CASE(
|
||||||
|
@ -878,3 +878,5 @@ LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-21-resize_inter_1920x1080_7_3-4
|
|||||||
LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-21-resize_inter_1920x1080_7_3-4.webm.md5
|
LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-21-resize_inter_1920x1080_7_3-4.webm.md5
|
||||||
LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-22-svc_1280x720_3.ivf
|
LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-22-svc_1280x720_3.ivf
|
||||||
LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-22-svc_1280x720_3.ivf.md5
|
LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-22-svc_1280x720_3.ivf.md5
|
||||||
|
LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-22-svc_1280x720_1.webm
|
||||||
|
LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-22-svc_1280x720_1.webm.md5
|
||||||
|
@ -852,3 +852,5 @@ e402cbbf9e550ae017a1e9f1f73931c1d18474e8 *invalid-crbug-667044.webm
|
|||||||
d3964f9dad9f60363c81b688324d95b4ec7c8038 *invalid-crbug-667044.webm.res
|
d3964f9dad9f60363c81b688324d95b4ec7c8038 *invalid-crbug-667044.webm.res
|
||||||
fd9df7f3f6992af1d7a9dde975c9a0d6f28c053d *invalid-bug-1443.ivf
|
fd9df7f3f6992af1d7a9dde975c9a0d6f28c053d *invalid-bug-1443.ivf
|
||||||
fd3020fa6e9ca5966206738654c97dec313b0a95 *invalid-bug-1443.ivf.res
|
fd3020fa6e9ca5966206738654c97dec313b0a95 *invalid-bug-1443.ivf.res
|
||||||
|
17696cd21e875f1d6e5d418cbf89feab02c8850a *vp90-2-22-svc_1280x720_1.webm
|
||||||
|
e2f9e1e47a791b4e939a9bdc50bf7a25b3761f77 *vp90-2-22-svc_1280x720_1.webm.md5
|
||||||
|
@ -371,6 +371,7 @@ const char *const kVP9TestVectors[] = {
|
|||||||
#endif // CONFIG_VP9_HIGHBITDEPTH
|
#endif // CONFIG_VP9_HIGHBITDEPTH
|
||||||
"vp90-2-20-big_superframe-01.webm",
|
"vp90-2-20-big_superframe-01.webm",
|
||||||
"vp90-2-20-big_superframe-02.webm",
|
"vp90-2-20-big_superframe-02.webm",
|
||||||
|
"vp90-2-22-svc_1280x720_1.webm",
|
||||||
RESIZE_TEST_VECTORS
|
RESIZE_TEST_VECTORS
|
||||||
};
|
};
|
||||||
const char *const kVP9TestVectorsSvc[] = { "vp90-2-22-svc_1280x720_3.ivf" };
|
const char *const kVP9TestVectorsSvc[] = { "vp90-2-22-svc_1280x720_3.ivf" };
|
||||||
|
Loading…
x
Reference in New Issue
Block a user