Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(653)

Unified Diff: webrtc/video/video_encoder_unittest.cc

Issue 2484863009: Move VideoEncoderSoftwareFallbackWrapper from webrtc/video_encoder.h to webrtc/media/engine/ (Closed)
Patch Set: Rebase Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/video/video_encoder.cc ('k') | webrtc/video_encoder.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « webrtc/video/video_encoder.cc ('k') | webrtc/video_encoder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698