| Index: webrtc/modules/video_coding/codecs/test/videoprocessor_unittest.cc
|
| diff --git a/webrtc/modules/video_coding/codecs/test/videoprocessor_unittest.cc b/webrtc/modules/video_coding/codecs/test/videoprocessor_unittest.cc
|
| index 2a54358e0d6abb4c8ff6970e9bcd2b88c14b2490..9dd75473733e014d6d7cb3118fed6a03d4a4541b 100644
|
| --- a/webrtc/modules/video_coding/codecs/test/videoprocessor_unittest.cc
|
| +++ b/webrtc/modules/video_coding/codecs/test/videoprocessor_unittest.cc
|
| @@ -8,11 +8,14 @@
|
| * be found in the AUTHORS file in the root of the source tree.
|
| */
|
|
|
| +#include <memory>
|
| +
|
| #include "webrtc/api/video/i420_buffer.h"
|
| #include "webrtc/modules/video_coding/codecs/test/mock/mock_packet_manipulator.h"
|
| #include "webrtc/modules/video_coding/codecs/test/videoprocessor.h"
|
| #include "webrtc/modules/video_coding/include/mock/mock_video_codec_interface.h"
|
| #include "webrtc/modules/video_coding/include/video_coding.h"
|
| +#include "webrtc/rtc_base/ptr_util.h"
|
| #include "webrtc/test/gmock.h"
|
| #include "webrtc/test/gtest.h"
|
| #include "webrtc/test/testsupport/mock/mock_frame_reader.h"
|
| @@ -28,30 +31,37 @@ using ::testing::Return;
|
| namespace webrtc {
|
| namespace test {
|
|
|
| -// Very basic testing for VideoProcessor. It's mostly tested by running the
|
| -// video_quality_measurement program.
|
| +namespace {
|
| +
|
| +const int kWidth = 352;
|
| +const int kHeight = 288;
|
| +const int kFrameSize = kWidth * kHeight * 3 / 2; // I420.
|
| +const int kFramerate = 30;
|
| +const int kNumFrames = 2;
|
| +
|
| +} // namespace
|
| +
|
| class VideoProcessorTest : public testing::Test {
|
| protected:
|
| - MockVideoEncoder encoder_mock_;
|
| - MockVideoDecoder decoder_mock_;
|
| - MockFrameReader frame_reader_mock_;
|
| - MockFrameWriter frame_writer_mock_;
|
| - MockPacketManipulator packet_manipulator_mock_;
|
| - Stats stats_;
|
| - TestConfig config_;
|
| - VideoCodec codec_settings_;
|
| -
|
| - VideoProcessorTest() {}
|
| - virtual ~VideoProcessorTest() {}
|
| - void SetUp() {
|
| + VideoProcessorTest() {
|
| // Get a codec configuration struct and configure it.
|
| VideoCodingModule::Codec(kVideoCodecVP8, &codec_settings_);
|
| config_.codec_settings = &codec_settings_;
|
| config_.codec_settings->startBitrate = 100;
|
| - config_.codec_settings->width = 352;
|
| - config_.codec_settings->height = 288;
|
| + config_.codec_settings->width = kWidth;
|
| + config_.codec_settings->height = kHeight;
|
| + config_.codec_settings->maxFramerate = kFramerate;
|
| +
|
| + EXPECT_CALL(frame_reader_mock_, NumberOfFrames())
|
| + .WillRepeatedly(Return(kNumFrames));
|
| + EXPECT_CALL(frame_reader_mock_, FrameLength())
|
| + .WillRepeatedly(Return(kFrameSize));
|
| + video_processor_ = rtc::MakeUnique<VideoProcessorImpl>(
|
| + &encoder_mock_, &decoder_mock_, &frame_reader_mock_,
|
| + &frame_writer_mock_, &packet_manipulator_mock_, config_, &stats_,
|
| + nullptr /* source_frame_writer */, nullptr /* encoded_frame_writer */,
|
| + nullptr /* decoded_frame_writer */);
|
| }
|
| - void TearDown() {}
|
|
|
| void ExpectInit() {
|
| EXPECT_CALL(encoder_mock_, InitEncode(_, _, _)).Times(1);
|
| @@ -60,35 +70,41 @@ class VideoProcessorTest : public testing::Test {
|
| EXPECT_CALL(decoder_mock_, InitDecode(_, _)).Times(1);
|
| EXPECT_CALL(decoder_mock_, RegisterDecodeCompleteCallback(_))
|
| .Times(AtLeast(1));
|
| - EXPECT_CALL(frame_reader_mock_, NumberOfFrames()).WillRepeatedly(Return(1));
|
| - EXPECT_CALL(frame_reader_mock_, FrameLength()).WillOnce(Return(152064));
|
| }
|
| +
|
| + MockVideoEncoder encoder_mock_;
|
| + MockVideoDecoder decoder_mock_;
|
| + MockFrameReader frame_reader_mock_;
|
| + MockFrameWriter frame_writer_mock_;
|
| + MockPacketManipulator packet_manipulator_mock_;
|
| + VideoCodec codec_settings_;
|
| + TestConfig config_;
|
| + Stats stats_;
|
| + std::unique_ptr<VideoProcessorImpl> video_processor_;
|
| };
|
|
|
| TEST_F(VideoProcessorTest, Init) {
|
| ExpectInit();
|
| - VideoProcessorImpl video_processor(
|
| - &encoder_mock_, &decoder_mock_, &frame_reader_mock_, &frame_writer_mock_,
|
| - &packet_manipulator_mock_, config_, &stats_,
|
| - nullptr /* source_frame_writer */, nullptr /* encoded_frame_writer */,
|
| - nullptr /* decoded_frame_writer */);
|
| - video_processor.Init();
|
| + video_processor_->Init();
|
| }
|
|
|
| -TEST_F(VideoProcessorTest, ProcessFrame) {
|
| +TEST_F(VideoProcessorTest, ProcessFrames) {
|
| ExpectInit();
|
| - EXPECT_CALL(encoder_mock_, Encode(_, _, _)).Times(1);
|
| + video_processor_->Init();
|
| +
|
| EXPECT_CALL(frame_reader_mock_, ReadFrame())
|
| - .WillOnce(Return(I420Buffer::Create(50, 50)));
|
| - // Since we don't return any callback from the mock, the decoder will not
|
| - // be more than initialized...
|
| - VideoProcessorImpl video_processor(
|
| - &encoder_mock_, &decoder_mock_, &frame_reader_mock_, &frame_writer_mock_,
|
| - &packet_manipulator_mock_, config_, &stats_,
|
| - nullptr /* source_frame_writer */, nullptr /* encoded_frame_writer */,
|
| - nullptr /* decoded_frame_writer */);
|
| - video_processor.Init();
|
| - video_processor.ProcessFrame(0);
|
| + .WillRepeatedly(Return(I420Buffer::Create(kWidth, kHeight)));
|
| + EXPECT_CALL(encoder_mock_, Encode(testing::Property(&VideoFrame::timestamp,
|
| + 1 * 90000 / kFramerate),
|
| + _, _))
|
| + .Times(1);
|
| + video_processor_->ProcessFrame(0);
|
| +
|
| + EXPECT_CALL(encoder_mock_, Encode(testing::Property(&VideoFrame::timestamp,
|
| + 2 * 90000 / kFramerate),
|
| + _, _))
|
| + .Times(1);
|
| + video_processor_->ProcessFrame(1);
|
| }
|
|
|
| } // namespace test
|
|
|