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

Unified Diff: webrtc/video/video_decoder_unittest.cc

Issue 2518263003: Move VideoDecoderSoftwareFallbackWrapper from webrtc/video_decoder.h to webrtc/media/engine/ (Closed)
Patch Set: 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_decoder.cc ('k') | webrtc/video_decoder.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/video/video_decoder_unittest.cc
diff --git a/webrtc/video/video_decoder_unittest.cc b/webrtc/video/video_decoder_unittest.cc
deleted file mode 100644
index 5b4d431da3d5d15216788223a5c9e5d786af676f..0000000000000000000000000000000000000000
--- a/webrtc/video/video_decoder_unittest.cc
+++ /dev/null
@@ -1,172 +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_decoder.h"
-
-#include "webrtc/base/checks.h"
-#include "webrtc/modules/video_coding/include/video_error_codes.h"
-#include "webrtc/test/gtest.h"
-
-namespace webrtc {
-
-class VideoDecoderSoftwareFallbackWrapperTest : public ::testing::Test {
- protected:
- VideoDecoderSoftwareFallbackWrapperTest()
- : fallback_wrapper_(kVideoCodecVP8, &fake_decoder_) {}
-
- class CountingFakeDecoder : public VideoDecoder {
- public:
- int32_t InitDecode(const VideoCodec* codec_settings,
- int32_t number_of_cores) override {
- ++init_decode_count_;
- return WEBRTC_VIDEO_CODEC_OK;
- }
-
- int32_t Decode(const EncodedImage& input_image,
- bool missing_frames,
- const RTPFragmentationHeader* fragmentation,
- const CodecSpecificInfo* codec_specific_info,
- int64_t render_time_ms) override {
- ++decode_count_;
- return decode_return_code_;
- }
-
- int32_t RegisterDecodeCompleteCallback(
- DecodedImageCallback* callback) override {
- decode_complete_callback_ = callback;
- return WEBRTC_VIDEO_CODEC_OK;
- }
-
- int32_t Release() override {
- ++release_count_;
- return WEBRTC_VIDEO_CODEC_OK;
- }
-
- const char* ImplementationName() const override {
- return "fake-decoder";
- }
-
- int init_decode_count_ = 0;
- int decode_count_ = 0;
- int32_t decode_return_code_ = WEBRTC_VIDEO_CODEC_OK;
- DecodedImageCallback* decode_complete_callback_ = nullptr;
- int release_count_ = 0;
- int reset_count_ = 0;
- };
- CountingFakeDecoder fake_decoder_;
- VideoDecoderSoftwareFallbackWrapper fallback_wrapper_;
-};
-
-TEST_F(VideoDecoderSoftwareFallbackWrapperTest, InitializesDecoder) {
- VideoCodec codec = {};
- fallback_wrapper_.InitDecode(&codec, 2);
- EXPECT_EQ(1, fake_decoder_.init_decode_count_);
-}
-
-TEST_F(VideoDecoderSoftwareFallbackWrapperTest,
- CanRecoverFromSoftwareFallback) {
- VideoCodec codec = {};
- fallback_wrapper_.InitDecode(&codec, 2);
- // Unfortunately faking a VP8 frame is hard. Rely on no Decode -> using SW
- // decoder.
- fake_decoder_.decode_return_code_ = WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE;
- EncodedImage encoded_image;
- fallback_wrapper_.Decode(encoded_image, false, nullptr, nullptr, -1);
- EXPECT_EQ(1, fake_decoder_.decode_count_);
-
- // Fail -> fake_decoder shouldn't be used anymore.
- fallback_wrapper_.Decode(encoded_image, false, nullptr, nullptr, -1);
- EXPECT_EQ(1, fake_decoder_.decode_count_)
- << "Decoder used even though fallback should be active.";
-
- // Should be able to recover on a keyframe.
- encoded_image._frameType = kVideoFrameKey;
- fake_decoder_.decode_return_code_ = WEBRTC_VIDEO_CODEC_OK;
- fallback_wrapper_.Decode(encoded_image, false, nullptr, nullptr, -1);
- EXPECT_EQ(2, fake_decoder_.decode_count_)
- << "Wrapper did not try to decode a keyframe using registered decoder.";
-
- encoded_image._frameType = kVideoFrameDelta;
- fallback_wrapper_.Decode(encoded_image, false, nullptr, nullptr, -1);
- EXPECT_EQ(3, fake_decoder_.decode_count_)
- << "Decoder not used on future delta frames.";
-}
-
-TEST_F(VideoDecoderSoftwareFallbackWrapperTest, DoesNotFallbackOnEveryError) {
- VideoCodec codec = {};
- fallback_wrapper_.InitDecode(&codec, 2);
- fake_decoder_.decode_return_code_ = WEBRTC_VIDEO_CODEC_ERROR;
- EncodedImage encoded_image;
- EXPECT_EQ(
- fake_decoder_.decode_return_code_,
- fallback_wrapper_.Decode(encoded_image, false, nullptr, nullptr, -1));
- EXPECT_EQ(1, fake_decoder_.decode_count_);
-
- fallback_wrapper_.Decode(encoded_image, false, nullptr, nullptr, -1);
- EXPECT_EQ(2, fake_decoder_.decode_count_)
- << "Decoder should be active even though previous decode failed.";
-}
-
-TEST_F(VideoDecoderSoftwareFallbackWrapperTest, ForwardsReleaseCall) {
- VideoCodec codec = {};
- fallback_wrapper_.InitDecode(&codec, 2);
- fallback_wrapper_.Release();
- EXPECT_EQ(1, fake_decoder_.release_count_);
-
- fake_decoder_.decode_return_code_ = WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE;
- EncodedImage encoded_image;
- fallback_wrapper_.Decode(encoded_image, false, nullptr, nullptr, -1);
- EXPECT_EQ(1, fake_decoder_.release_count_)
- << "Decoder should not be released during fallback.";
- fallback_wrapper_.Release();
- EXPECT_EQ(2, fake_decoder_.release_count_);
-}
-
-// TODO(pbos): Fake a VP8 frame well enough to actually receive a callback from
-// the software decoder.
-TEST_F(VideoDecoderSoftwareFallbackWrapperTest,
- ForwardsRegisterDecodeCompleteCallback) {
- class FakeDecodedImageCallback : public DecodedImageCallback {
- int32_t Decoded(VideoFrame& decodedImage) override { return 0; }
- int32_t Decoded(
- webrtc::VideoFrame& decodedImage, int64_t decode_time_ms) override {
- RTC_NOTREACHED();
- return -1;
- }
- } callback, callback2;
-
- VideoCodec codec = {};
- fallback_wrapper_.InitDecode(&codec, 2);
- fallback_wrapper_.RegisterDecodeCompleteCallback(&callback);
- EXPECT_EQ(&callback, fake_decoder_.decode_complete_callback_);
-
- fake_decoder_.decode_return_code_ = WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE;
- EncodedImage encoded_image;
- fallback_wrapper_.Decode(encoded_image, false, nullptr, nullptr, -1);
- fallback_wrapper_.RegisterDecodeCompleteCallback(&callback2);
- EXPECT_EQ(&callback2, fake_decoder_.decode_complete_callback_);
-}
-
-TEST_F(VideoDecoderSoftwareFallbackWrapperTest,
- ReportsFallbackImplementationName) {
- VideoCodec codec = {};
- fallback_wrapper_.InitDecode(&codec, 2);
-
- fake_decoder_.decode_return_code_ = WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE;
- EncodedImage encoded_image;
- fallback_wrapper_.Decode(encoded_image, false, nullptr, nullptr, -1);
- // Hard coded expected value since libvpx is the software implementation name
- // for VP8. Change accordingly if the underlying implementation does.
- EXPECT_STREQ("libvpx (fallback from: fake-decoder)",
- fallback_wrapper_.ImplementationName());
- fallback_wrapper_.Release();
-}
-
-} // namespace webrtc
« no previous file with comments | « webrtc/video/video_decoder.cc ('k') | webrtc/video_decoder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698