| Index: source/libvpx/test/resize_test.cc
|
| diff --git a/source/libvpx/test/resize_test.cc b/source/libvpx/test/resize_test.cc
|
| index 9d0c570ae8e557cb03cf425e09e73766c4699fac..ef84156a383c4e982ec8f8ecc162791441570382 100644
|
| --- a/source/libvpx/test/resize_test.cc
|
| +++ b/source/libvpx/test/resize_test.cc
|
| @@ -144,6 +144,7 @@ class ResizeTest : public ::libvpx_test::EncoderTest,
|
|
|
| TEST_P(ResizeTest, TestExternalResizeWorks) {
|
| ResizingVideoSource video;
|
| + cfg_.g_lag_in_frames = 0;
|
| ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
|
|
|
| for (std::vector<FrameInfo>::const_iterator info = frame_info_list_.begin();
|
| @@ -153,9 +154,9 @@ TEST_P(ResizeTest, TestExternalResizeWorks) {
|
| const unsigned int expected_h = ScaleForFrameNumber(frame, kInitialHeight);
|
|
|
| EXPECT_EQ(expected_w, info->w)
|
| - << "Frame " << frame << "had unexpected width";
|
| + << "Frame " << frame << " had unexpected width";
|
| EXPECT_EQ(expected_h, info->h)
|
| - << "Frame " << frame << "had unexpected height";
|
| + << "Frame " << frame << " had unexpected height";
|
| }
|
| }
|
|
|
| @@ -260,7 +261,115 @@ TEST_P(ResizeInternalTest, TestInternalResizeWorks) {
|
| }
|
| }
|
|
|
| +vpx_img_fmt_t CspForFrameNumber(int frame) {
|
| + if (frame < 10)
|
| + return VPX_IMG_FMT_I420;
|
| + if (frame < 20)
|
| + return VPX_IMG_FMT_I444;
|
| + return VPX_IMG_FMT_I420;
|
| +}
|
| +
|
| +class ResizeCspTest : public ResizeTest {
|
| + protected:
|
| +#if WRITE_COMPRESSED_STREAM
|
| + ResizeCspTest()
|
| + : ResizeTest(),
|
| + frame0_psnr_(0.0),
|
| + outfile_(NULL),
|
| + out_frames_(0) {}
|
| +#else
|
| + ResizeCspTest() : ResizeTest(), frame0_psnr_(0.0) {}
|
| +#endif
|
| +
|
| + virtual ~ResizeCspTest() {}
|
| +
|
| + virtual void BeginPassHook(unsigned int /*pass*/) {
|
| +#if WRITE_COMPRESSED_STREAM
|
| + outfile_ = fopen("vp91-2-05-cspchape.ivf", "wb");
|
| +#endif
|
| + }
|
| +
|
| + virtual void EndPassHook() {
|
| +#if WRITE_COMPRESSED_STREAM
|
| + if (outfile_) {
|
| + if (!fseek(outfile_, 0, SEEK_SET))
|
| + write_ivf_file_header(&cfg_, out_frames_, outfile_);
|
| + fclose(outfile_);
|
| + outfile_ = NULL;
|
| + }
|
| +#endif
|
| + }
|
| +
|
| + virtual void PreEncodeFrameHook(libvpx_test::VideoSource *video,
|
| + libvpx_test::Encoder *encoder) {
|
| + if (CspForFrameNumber(video->frame()) != VPX_IMG_FMT_I420 &&
|
| + cfg_.g_profile != 1) {
|
| + cfg_.g_profile = 1;
|
| + encoder->Config(&cfg_);
|
| + }
|
| + if (CspForFrameNumber(video->frame()) == VPX_IMG_FMT_I420 &&
|
| + cfg_.g_profile != 0) {
|
| + cfg_.g_profile = 0;
|
| + encoder->Config(&cfg_);
|
| + }
|
| + }
|
| +
|
| + virtual void PSNRPktHook(const vpx_codec_cx_pkt_t *pkt) {
|
| + if (!frame0_psnr_)
|
| + frame0_psnr_ = pkt->data.psnr.psnr[0];
|
| + EXPECT_NEAR(pkt->data.psnr.psnr[0], frame0_psnr_, 2.0);
|
| + }
|
| +
|
| +#if WRITE_COMPRESSED_STREAM
|
| + virtual void FramePktHook(const vpx_codec_cx_pkt_t *pkt) {
|
| + ++out_frames_;
|
| +
|
| + // Write initial file header if first frame.
|
| + if (pkt->data.frame.pts == 0)
|
| + write_ivf_file_header(&cfg_, 0, outfile_);
|
| +
|
| + // Write frame header and data.
|
| + write_ivf_frame_header(pkt, outfile_);
|
| + (void)fwrite(pkt->data.frame.buf, 1, pkt->data.frame.sz, outfile_);
|
| + }
|
| +#endif
|
| +
|
| + double frame0_psnr_;
|
| +#if WRITE_COMPRESSED_STREAM
|
| + FILE *outfile_;
|
| + unsigned int out_frames_;
|
| +#endif
|
| +};
|
| +
|
| +class ResizingCspVideoSource : public ::libvpx_test::DummyVideoSource {
|
| + public:
|
| + ResizingCspVideoSource() {
|
| + SetSize(kInitialWidth, kInitialHeight);
|
| + limit_ = 30;
|
| + }
|
| +
|
| + virtual ~ResizingCspVideoSource() {}
|
| +
|
| + protected:
|
| + virtual void Next() {
|
| + ++frame_;
|
| + SetImageFormat(CspForFrameNumber(frame_));
|
| + FillFrame();
|
| + }
|
| +};
|
| +
|
| +TEST_P(ResizeCspTest, TestResizeCspWorks) {
|
| + ResizingCspVideoSource video;
|
| + cfg_.rc_min_quantizer = cfg_.rc_max_quantizer = 48;
|
| + cfg_.g_lag_in_frames = 0;
|
| + ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
|
| +}
|
| +
|
| VP8_INSTANTIATE_TEST_CASE(ResizeTest, ONE_PASS_TEST_MODES);
|
| +VP9_INSTANTIATE_TEST_CASE(ResizeTest,
|
| + ::testing::Values(::libvpx_test::kRealTime));
|
| VP9_INSTANTIATE_TEST_CASE(ResizeInternalTest,
|
| ::testing::Values(::libvpx_test::kOnePassBest));
|
| +VP9_INSTANTIATE_TEST_CASE(ResizeCspTest,
|
| + ::testing::Values(::libvpx_test::kRealTime));
|
| } // namespace
|
|
|