Index: webrtc/video/video_encoder_unittest.cc |
diff --git a/webrtc/video/video_encoder_unittest.cc b/webrtc/video/video_encoder_unittest.cc |
deleted file mode 100644 |
index 5f6f17e7b49e2da1655df6b4b0d5722e31e39dfb..0000000000000000000000000000000000000000 |
--- a/webrtc/video/video_encoder_unittest.cc |
+++ /dev/null |
@@ -1,293 +0,0 @@ |
-/* |
- * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. |
- * |
- * Use of this source code is governed by a BSD-style license |
- * that can be found in the LICENSE file in the root of the source |
- * tree. An additional intellectual property rights grant can be found |
- * in the file PATENTS. All contributing project authors may |
- * be found in the AUTHORS file in the root of the source tree. |
- */ |
- |
-#include "webrtc/video_encoder.h" |
- |
-#include "webrtc/modules/video_coding/include/video_codec_interface.h" |
-#include "webrtc/modules/video_coding/include/video_error_codes.h" |
-#include "webrtc/test/gtest.h" |
- |
-namespace webrtc { |
- |
-const int kWidth = 320; |
-const int kHeight = 240; |
-const size_t kMaxPayloadSize = 800; |
- |
-class VideoEncoderSoftwareFallbackWrapperTest : public ::testing::Test { |
- protected: |
- VideoEncoderSoftwareFallbackWrapperTest() |
- : fallback_wrapper_(kVideoCodecVP8, &fake_encoder_) {} |
- |
- class CountingFakeEncoder : public VideoEncoder { |
- public: |
- int32_t InitEncode(const VideoCodec* codec_settings, |
- int32_t number_of_cores, |
- size_t max_payload_size) override { |
- ++init_encode_count_; |
- return init_encode_return_code_; |
- } |
- int32_t Encode(const VideoFrame& frame, |
- const CodecSpecificInfo* codec_specific_info, |
- const std::vector<FrameType>* frame_types) override { |
- ++encode_count_; |
- if (encode_complete_callback_ && |
- encode_return_code_ == WEBRTC_VIDEO_CODEC_OK) { |
- CodecSpecificInfo info; |
- info.codec_name = ImplementationName(); |
- encode_complete_callback_->OnEncodedImage(EncodedImage(), &info, |
- nullptr); |
- } |
- return encode_return_code_; |
- } |
- |
- int32_t RegisterEncodeCompleteCallback( |
- EncodedImageCallback* callback) override { |
- encode_complete_callback_ = callback; |
- return WEBRTC_VIDEO_CODEC_OK; |
- } |
- |
- int32_t Release() override { |
- ++release_count_; |
- return WEBRTC_VIDEO_CODEC_OK; |
- } |
- |
- int32_t SetChannelParameters(uint32_t packet_loss, int64_t rtt) override { |
- ++set_channel_parameters_count_; |
- return WEBRTC_VIDEO_CODEC_OK; |
- } |
- |
- int32_t SetRates(uint32_t bitrate, uint32_t framerate) override { |
- ++set_rates_count_; |
- return WEBRTC_VIDEO_CODEC_OK; |
- } |
- |
- void OnDroppedFrame() override { ++on_dropped_frame_count_; } |
- |
- bool SupportsNativeHandle() const override { |
- ++supports_native_handle_count_; |
- return false; |
- } |
- |
- const char* ImplementationName() const override { |
- return "fake-encoder"; |
- } |
- |
- int init_encode_count_ = 0; |
- int32_t init_encode_return_code_ = WEBRTC_VIDEO_CODEC_OK; |
- int32_t encode_return_code_ = WEBRTC_VIDEO_CODEC_OK; |
- int encode_count_ = 0; |
- EncodedImageCallback* encode_complete_callback_ = nullptr; |
- int release_count_ = 0; |
- int set_channel_parameters_count_ = 0; |
- int set_rates_count_ = 0; |
- int on_dropped_frame_count_ = 0; |
- mutable int supports_native_handle_count_ = 0; |
- }; |
- |
- class FakeEncodedImageCallback : public EncodedImageCallback { |
- public: |
- Result OnEncodedImage( |
- const EncodedImage& encoded_image, |
- const CodecSpecificInfo* codec_specific_info, |
- const RTPFragmentationHeader* fragmentation) override { |
- ++callback_count_; |
- last_codec_name_ = codec_specific_info->codec_name; |
- return Result(Result::OK, callback_count_); |
- } |
- int callback_count_ = 0; |
- std::string last_codec_name_; |
- }; |
- |
- void UtilizeFallbackEncoder(); |
- void FallbackFromEncodeRequest(); |
- void EncodeFrame(); |
- void CheckLastEncoderName(const char* expected_name) { |
- EXPECT_STREQ(expected_name, callback_.last_codec_name_.c_str()); |
- } |
- |
- FakeEncodedImageCallback callback_; |
- CountingFakeEncoder fake_encoder_; |
- VideoEncoderSoftwareFallbackWrapper fallback_wrapper_; |
- VideoCodec codec_ = {}; |
- std::unique_ptr<VideoFrame> frame_; |
-}; |
- |
-void VideoEncoderSoftwareFallbackWrapperTest::EncodeFrame() { |
- rtc::scoped_refptr<I420Buffer> buffer = I420Buffer::Create( |
- kWidth, kHeight, kWidth, (kWidth + 1) / 2, (kWidth + 1) / 2); |
- buffer->SetToBlack(); |
- std::vector<FrameType> types(1, kVideoFrameKey); |
- |
- frame_.reset(new VideoFrame(buffer, 0, 0, webrtc::kVideoRotation_0)); |
- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, |
- fallback_wrapper_.Encode(*frame_, nullptr, &types)); |
-} |
- |
-void VideoEncoderSoftwareFallbackWrapperTest::UtilizeFallbackEncoder() { |
- fallback_wrapper_.RegisterEncodeCompleteCallback(&callback_); |
- EXPECT_EQ(&callback_, fake_encoder_.encode_complete_callback_); |
- |
- // Register with failing fake encoder. Should succeed with VP8 fallback. |
- codec_.codecType = kVideoCodecVP8; |
- codec_.maxFramerate = 30; |
- codec_.width = kWidth; |
- codec_.height = kHeight; |
- fake_encoder_.init_encode_return_code_ = WEBRTC_VIDEO_CODEC_ERROR; |
- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, |
- fallback_wrapper_.InitEncode(&codec_, 2, kMaxPayloadSize)); |
- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, fallback_wrapper_.SetRates(300, 30)); |
- |
- int callback_count = callback_.callback_count_; |
- int encode_count = fake_encoder_.encode_count_; |
- EncodeFrame(); |
- EXPECT_EQ(encode_count, fake_encoder_.encode_count_); |
- EXPECT_EQ(callback_count + 1, callback_.callback_count_); |
-} |
- |
-void VideoEncoderSoftwareFallbackWrapperTest::FallbackFromEncodeRequest() { |
- fallback_wrapper_.RegisterEncodeCompleteCallback(&callback_); |
- codec_.codecType = kVideoCodecVP8; |
- codec_.maxFramerate = 30; |
- codec_.width = kWidth; |
- codec_.height = kHeight; |
- fallback_wrapper_.InitEncode(&codec_, 2, kMaxPayloadSize); |
- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, fallback_wrapper_.SetRates(300, 30)); |
- EXPECT_EQ(1, fake_encoder_.init_encode_count_); |
- |
- // Have the non-fallback encoder request a software fallback. |
- fake_encoder_.encode_return_code_ = WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE; |
- int callback_count = callback_.callback_count_; |
- int encode_count = fake_encoder_.encode_count_; |
- EncodeFrame(); |
- // Single encode request, which returned failure. |
- EXPECT_EQ(encode_count + 1, fake_encoder_.encode_count_); |
- EXPECT_EQ(callback_count + 1, callback_.callback_count_); |
-} |
- |
-TEST_F(VideoEncoderSoftwareFallbackWrapperTest, InitializesEncoder) { |
- VideoCodec codec = {}; |
- fallback_wrapper_.InitEncode(&codec, 2, kMaxPayloadSize); |
- EXPECT_EQ(1, fake_encoder_.init_encode_count_); |
-} |
- |
-TEST_F(VideoEncoderSoftwareFallbackWrapperTest, EncodeRequestsFallback) { |
- FallbackFromEncodeRequest(); |
- // After fallback, further encodes shouldn't hit the fake encoder. |
- int encode_count = fake_encoder_.encode_count_; |
- EncodeFrame(); |
- EXPECT_EQ(encode_count, fake_encoder_.encode_count_); |
-} |
- |
-TEST_F(VideoEncoderSoftwareFallbackWrapperTest, CanUtilizeFallbackEncoder) { |
- UtilizeFallbackEncoder(); |
- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, fallback_wrapper_.Release()); |
-} |
- |
-TEST_F(VideoEncoderSoftwareFallbackWrapperTest, |
- InternalEncoderReleasedDuringFallback) { |
- EXPECT_EQ(0, fake_encoder_.release_count_); |
- UtilizeFallbackEncoder(); |
- EXPECT_EQ(1, fake_encoder_.release_count_); |
- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, fallback_wrapper_.Release()); |
- // No extra release when the fallback is released. |
- EXPECT_EQ(1, fake_encoder_.release_count_); |
-} |
- |
-TEST_F(VideoEncoderSoftwareFallbackWrapperTest, |
- InternalEncoderNotEncodingDuringFallback) { |
- UtilizeFallbackEncoder(); |
- int encode_count = fake_encoder_.encode_count_; |
- EncodeFrame(); |
- EXPECT_EQ(encode_count, fake_encoder_.encode_count_); |
- |
- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, fallback_wrapper_.Release()); |
-} |
- |
-TEST_F(VideoEncoderSoftwareFallbackWrapperTest, |
- CanRegisterCallbackWhileUsingFallbackEncoder) { |
- UtilizeFallbackEncoder(); |
- // Registering an encode-complete callback should still work when fallback |
- // encoder is being used. |
- FakeEncodedImageCallback callback2; |
- fallback_wrapper_.RegisterEncodeCompleteCallback(&callback2); |
- EXPECT_EQ(&callback2, fake_encoder_.encode_complete_callback_); |
- |
- // Encoding a frame using the fallback should arrive at the new callback. |
- std::vector<FrameType> types(1, kVideoFrameKey); |
- frame_->set_timestamp(frame_->timestamp() + 1000); |
- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, |
- fallback_wrapper_.Encode(*frame_, nullptr, &types)); |
- |
- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, fallback_wrapper_.Release()); |
-} |
- |
-TEST_F(VideoEncoderSoftwareFallbackWrapperTest, |
- SetChannelParametersForwardedDuringFallback) { |
- UtilizeFallbackEncoder(); |
- EXPECT_EQ(0, fake_encoder_.set_channel_parameters_count_); |
- fallback_wrapper_.SetChannelParameters(1, 1); |
- EXPECT_EQ(1, fake_encoder_.set_channel_parameters_count_); |
- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, fallback_wrapper_.Release()); |
-} |
- |
-TEST_F(VideoEncoderSoftwareFallbackWrapperTest, |
- SetRatesForwardedDuringFallback) { |
- UtilizeFallbackEncoder(); |
- EXPECT_EQ(1, fake_encoder_.set_rates_count_); |
- fallback_wrapper_.SetRates(1, 1); |
- EXPECT_EQ(2, fake_encoder_.set_rates_count_); |
- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, fallback_wrapper_.Release()); |
-} |
- |
-TEST_F(VideoEncoderSoftwareFallbackWrapperTest, |
- OnDroppedFrameForwardedWithoutFallback) { |
- fallback_wrapper_.OnDroppedFrame(); |
- EXPECT_EQ(1, fake_encoder_.on_dropped_frame_count_); |
-} |
- |
-TEST_F(VideoEncoderSoftwareFallbackWrapperTest, |
- OnDroppedFrameNotForwardedDuringFallback) { |
- UtilizeFallbackEncoder(); |
- fallback_wrapper_.OnDroppedFrame(); |
- EXPECT_EQ(0, fake_encoder_.on_dropped_frame_count_); |
- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, fallback_wrapper_.Release()); |
-} |
- |
-TEST_F(VideoEncoderSoftwareFallbackWrapperTest, |
- SupportsNativeHandleForwardedWithoutFallback) { |
- fallback_wrapper_.SupportsNativeHandle(); |
- EXPECT_EQ(1, fake_encoder_.supports_native_handle_count_); |
-} |
- |
-TEST_F(VideoEncoderSoftwareFallbackWrapperTest, |
- SupportsNativeHandleNotForwardedDuringFallback) { |
- UtilizeFallbackEncoder(); |
- fallback_wrapper_.SupportsNativeHandle(); |
- EXPECT_EQ(0, fake_encoder_.supports_native_handle_count_); |
- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, fallback_wrapper_.Release()); |
-} |
- |
-TEST_F(VideoEncoderSoftwareFallbackWrapperTest, ReportsImplementationName) { |
- VideoCodec codec = {}; |
- fallback_wrapper_.RegisterEncodeCompleteCallback(&callback_); |
- fallback_wrapper_.InitEncode(&codec, 2, kMaxPayloadSize); |
- EncodeFrame(); |
- CheckLastEncoderName("fake-encoder"); |
-} |
- |
-TEST_F(VideoEncoderSoftwareFallbackWrapperTest, |
- ReportsFallbackImplementationName) { |
- UtilizeFallbackEncoder(); |
- // Hard coded expected value since libvpx is the software implementation name |
- // for VP8. Change accordingly if the underlying implementation does. |
- CheckLastEncoderName("libvpx"); |
-} |
- |
-} // namespace webrtc |