1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11a557f436b9d694d5a0a045e0295e1794f2df48eapbos@webrtc.org#include "testing/gmock/include/gmock/gmock.h" 12a557f436b9d694d5a0a045e0295e1794f2df48eapbos@webrtc.org#include "testing/gtest/include/gtest/gtest.h" 13a557f436b9d694d5a0a045e0295e1794f2df48eapbos@webrtc.org#include "webrtc/modules/video_coding/codecs/interface/mock/mock_video_codec_interface.h" 14a557f436b9d694d5a0a045e0295e1794f2df48eapbos@webrtc.org#include "webrtc/modules/video_coding/codecs/test/mock/mock_packet_manipulator.h" 15a557f436b9d694d5a0a045e0295e1794f2df48eapbos@webrtc.org#include "webrtc/modules/video_coding/codecs/test/videoprocessor.h" 16a557f436b9d694d5a0a045e0295e1794f2df48eapbos@webrtc.org#include "webrtc/modules/video_coding/main/interface/video_coding.h" 17a557f436b9d694d5a0a045e0295e1794f2df48eapbos@webrtc.org#include "webrtc/test/testsupport/mock/mock_frame_reader.h" 18a557f436b9d694d5a0a045e0295e1794f2df48eapbos@webrtc.org#include "webrtc/test/testsupport/mock/mock_frame_writer.h" 19a557f436b9d694d5a0a045e0295e1794f2df48eapbos@webrtc.org#include "webrtc/test/testsupport/packet_reader.h" 20a557f436b9d694d5a0a045e0295e1794f2df48eapbos@webrtc.org#include "webrtc/test/testsupport/unittest_utils.h" 21a557f436b9d694d5a0a045e0295e1794f2df48eapbos@webrtc.org#include "webrtc/typedefs.h" 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgusing ::testing::_; 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgusing ::testing::AtLeast; 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgusing ::testing::Return; 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc { 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace test { 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Very basic testing for VideoProcessor. It's mostly tested by running the 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// video_quality_measurement program. 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass VideoProcessorTest: public testing::Test { 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org protected: 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org MockVideoEncoder encoder_mock_; 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org MockVideoDecoder decoder_mock_; 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org MockFrameReader frame_reader_mock_; 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org MockFrameWriter frame_writer_mock_; 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org MockPacketManipulator packet_manipulator_mock_; 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Stats stats_; 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestConfig config_; 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VideoCodec codec_settings_; 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VideoProcessorTest() {} 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual ~VideoProcessorTest() {} 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void SetUp() { 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Get a codec configuration struct and configure it. 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VideoCodingModule::Codec(kVideoCodecVP8, &codec_settings_); 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org config_.codec_settings = &codec_settings_; 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org config_.codec_settings->startBitrate = 100; 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org config_.codec_settings->width = 352; 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org config_.codec_settings->height = 288; 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void TearDown() {} 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void ExpectInit() { 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_CALL(encoder_mock_, InitEncode(_, _, _)) 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org .Times(1); 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_CALL(encoder_mock_, RegisterEncodeCompleteCallback(_)) 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org .Times(AtLeast(1)); 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_CALL(decoder_mock_, InitDecode(_, _)) 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org .Times(1); 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_CALL(decoder_mock_, RegisterDecodeCompleteCallback(_)) 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org .Times(AtLeast(1)); 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_CALL(frame_reader_mock_, NumberOfFrames()) 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org .WillOnce(Return(1)); 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_CALL(frame_reader_mock_, FrameLength()) 673bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org .WillOnce(Return(152064)); 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(VideoProcessorTest, Init) { 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ExpectInit(); 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VideoProcessorImpl video_processor(&encoder_mock_, &decoder_mock_, 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org &frame_reader_mock_, 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org &frame_writer_mock_, 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org &packet_manipulator_mock_, config_, 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org &stats_); 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ASSERT_TRUE(video_processor.Init()); 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(VideoProcessorTest, ProcessFrame) { 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ExpectInit(); 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_CALL(encoder_mock_, Encode(_, _, _)) 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org .Times(1); 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_CALL(frame_reader_mock_, ReadFrame(_)) 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org .WillOnce(Return(true)); 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Since we don't return any callback from the mock, the decoder will not 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // be more than initialized... 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VideoProcessorImpl video_processor(&encoder_mock_, &decoder_mock_, 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org &frame_reader_mock_, 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org &frame_writer_mock_, 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org &packet_manipulator_mock_, config_, 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org &stats_); 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ASSERT_TRUE(video_processor.Init()); 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org video_processor.ProcessFrame(0); 96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} // namespace test 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} // namespace webrtc 100