| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "media/gpu/android/media_codec_video_decoder.h" |
| #include "base/bind.h" |
| #include "base/run_loop.h" |
| #include "base/test/scoped_task_environment.h" |
| #include "media/base/android/media_codec_util.h" |
| #include "media/base/test_helpers.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| #define SKIP_IF_MEDIA_CODEC_IS_BLACKLISTED() \ |
| do { \ |
| if (!MediaCodecUtil::IsMediaCodecAvailable()) { \ |
| DVLOG(0) << "Skipping test: MediaCodec is blacklisted on this device"; \ |
| return; \ |
| } \ |
| } while (0) |
| |
| namespace media { |
| namespace { |
| |
| void InitCb(bool* result_out, bool result) { |
| *result_out = result; |
| } |
| |
| void OutputCb(const scoped_refptr<VideoFrame>& frame) {} |
| |
| } // namespace |
| |
| class MediaCodecVideoDecoderTest : public testing::Test { |
| public: |
| ~MediaCodecVideoDecoderTest() override {} |
| |
| bool Initialize(const VideoDecoderConfig& config) { |
| bool result = false; |
| mcvd_.Initialize(config, false, nullptr, base::Bind(&InitCb, &result), |
| base::Bind(&OutputCb)); |
| base::RunLoop().RunUntilIdle(); |
| return result; |
| } |
| |
| private: |
| MediaCodecVideoDecoder mcvd_; |
| base::test::ScopedTaskEnvironment scoped_task_environment_; |
| }; |
| |
| TEST_F(MediaCodecVideoDecoderTest, DestructWithoutInit) { |
| // Do nothing. |
| } |
| |
| TEST_F(MediaCodecVideoDecoderTest, UnknownCodecIsRejected) { |
| SKIP_IF_MEDIA_CODEC_IS_BLACKLISTED(); |
| ASSERT_FALSE(Initialize(TestVideoConfig::Invalid())); |
| } |
| |
| TEST_F(MediaCodecVideoDecoderTest, H264IsSupported) { |
| SKIP_IF_MEDIA_CODEC_IS_BLACKLISTED(); |
| // H264 is always supported by MCVD. |
| ASSERT_TRUE(Initialize(TestVideoConfig::NormalH264())); |
| } |
| |
| TEST_F(MediaCodecVideoDecoderTest, SmallVp8IsRejected) { |
| SKIP_IF_MEDIA_CODEC_IS_BLACKLISTED(); |
| ASSERT_TRUE(Initialize(TestVideoConfig::NormalH264())); |
| } |
| |
| } // namespace media |