Index: media/base/android/media_codec_bridge_impl_unittest.cc |
diff --git a/media/base/android/media_codec_bridge_impl_unittest.cc b/media/base/android/media_codec_bridge_impl_unittest.cc |
index c24f0b638a634947dcadeca6a7c6a8e825620e2f..b8e046bef282b1af96e4cd8c710c7594b7a7e95e 100644 |
--- a/media/base/android/media_codec_bridge_impl_unittest.cc |
+++ b/media/base/android/media_codec_bridge_impl_unittest.cc |
@@ -9,12 +9,17 @@ |
#include <string> |
#include "base/logging.h" |
+#include "base/memory/ptr_util.h" |
#include "media/base/android/media_codec_bridge_impl.h" |
#include "media/base/android/media_codec_util.h" |
#include "media/base/decoder_buffer.h" |
+#include "media/base/media_util.h" |
#include "media/base/test_data_util.h" |
#include "testing/gmock/include/gmock/gmock.h" |
+using testing::IsNull; |
+using testing::NotNull; |
+ |
namespace { |
// The first frame of |
@@ -111,7 +116,7 @@ static inline const base::TimeDelta InfiniteTimeOut() { |
return base::TimeDelta::FromMicroseconds(-1); |
} |
-void DecodeMediaFrame(VideoCodecBridge* media_codec, |
+void DecodeMediaFrame(MediaCodecBridge* media_codec, |
const uint8_t* data, |
size_t data_size, |
const base::TimeDelta input_presentation_timestamp, |
@@ -146,23 +151,32 @@ void DecodeMediaFrame(VideoCodecBridge* media_codec, |
} |
} |
-TEST(MediaCodecBridgeTest, Initialize) { |
+AudioDecoderConfig NewAudioConfig( |
+ AudioCodec codec, |
+ std::vector<uint8_t> extra_data = std::vector<uint8_t>(), |
+ base::TimeDelta seek_preroll = base::TimeDelta(), |
+ int64_t codec_delay = 0) { |
+ AudioDecoderConfig config; |
+ config.Initialize(codec, kSampleFormatPlanarF32, CHANNEL_LAYOUT_STEREO, 44100, |
+ extra_data, Unencrypted(), seek_preroll, codec_delay); |
+ return config; |
+} |
+ |
+TEST(MediaCodecBridgeTest, CreateH264Decoder) { |
SKIP_TEST_IF_MEDIA_CODEC_IS_NOT_AVAILABLE(); |
- std::unique_ptr<media::MediaCodecBridge> media_codec; |
- media_codec.reset(VideoCodecBridge::CreateDecoder( |
+ MediaCodecBridgeImpl::CreateVideoDecoder( |
kCodecH264, false, gfx::Size(640, 480), nullptr, nullptr, |
- std::vector<uint8_t>(), std::vector<uint8_t>())); |
+ std::vector<uint8_t>(), std::vector<uint8_t>()); |
} |
TEST(MediaCodecBridgeTest, DoNormal) { |
SKIP_TEST_IF_MEDIA_CODEC_IS_NOT_AVAILABLE(); |
- std::unique_ptr<media::AudioCodecBridge> media_codec; |
- media_codec.reset(AudioCodecBridge::Create(kCodecMP3)); |
- |
- ASSERT_TRUE(media_codec->ConfigureAndStart(kCodecMP3, 44100, 2, nullptr, 0, 0, |
- 0, nullptr)); |
+ std::unique_ptr<media::MediaCodecBridge> media_codec = |
+ MediaCodecBridgeImpl::CreateAudioDecoder(NewAudioConfig(kCodecMP3), |
+ nullptr); |
+ ASSERT_THAT(media_codec, NotNull()); |
int input_buf_index = -1; |
MediaCodecStatus status = |
@@ -193,7 +207,7 @@ TEST(MediaCodecBridgeTest, DoNormal) { |
&output_buf_index, &unused_offset, |
&size, ×tamp, &eos, nullptr); |
switch (status) { |
- case MEDIA_CODEC_DEQUEUE_OUTPUT_AGAIN_LATER: |
+ case MEDIA_CODEC_TRY_AGAIN_LATER: |
FAIL(); |
return; |
@@ -217,65 +231,53 @@ TEST(MediaCodecBridgeTest, DoNormal) { |
TEST(MediaCodecBridgeTest, InvalidVorbisHeader) { |
SKIP_TEST_IF_MEDIA_CODEC_IS_NOT_AVAILABLE(); |
- std::unique_ptr<media::AudioCodecBridge> media_codec; |
- media_codec.reset(AudioCodecBridge::Create(kCodecVorbis)); |
- |
// The first byte of the header is not 0x02. |
- uint8_t invalid_first_byte[] = {0x00, 0xff, 0xff, 0xff, 0xff}; |
- EXPECT_FALSE(media_codec->ConfigureAndStart( |
- kCodecVorbis, 44100, 2, invalid_first_byte, sizeof(invalid_first_byte), 0, |
- 0, nullptr)); |
- |
- // Size of the header does not match with the data we passed in. |
- uint8_t invalid_size[] = {0x02, 0x01, 0xff, 0x01, 0xff}; |
- EXPECT_FALSE( |
- media_codec->ConfigureAndStart(kCodecVorbis, 44100, 2, invalid_size, |
- sizeof(invalid_size), 0, 0, nullptr)); |
+ std::vector<uint8_t> invalid_first_byte = {{0x00, 0xff, 0xff, 0xff, 0xff}}; |
+ ASSERT_THAT(MediaCodecBridgeImpl::CreateAudioDecoder( |
+ NewAudioConfig(kCodecVorbis, invalid_first_byte), nullptr), |
+ IsNull()); |
// Size of the header is too large. |
size_t large_size = 8 * 1024 * 1024 + 2; |
- uint8_t* very_large_header = new uint8_t[large_size]; |
- very_large_header[0] = 0x02; |
- for (size_t i = 1; i < large_size - 1; ++i) |
- very_large_header[i] = 0xff; |
- very_large_header[large_size - 1] = 0xfe; |
- EXPECT_FALSE(media_codec->ConfigureAndStart( |
- kCodecVorbis, 44100, 2, very_large_header, 0x80000000, 0, 0, nullptr)); |
- delete[] very_large_header; |
+ std::vector<uint8_t> large_header(large_size, 0xff); |
+ large_header.front() = 0x02; |
+ large_header.back() = 0xfe; |
+ ASSERT_THAT(MediaCodecBridgeImpl::CreateAudioDecoder( |
+ NewAudioConfig(kCodecVorbis, large_header), nullptr), |
+ IsNull()); |
} |
TEST(MediaCodecBridgeTest, InvalidOpusHeader) { |
SKIP_TEST_IF_MEDIA_CODEC_IS_NOT_AVAILABLE(); |
- std::unique_ptr<media::AudioCodecBridge> media_codec; |
- media_codec.reset(AudioCodecBridge::Create(kCodecOpus)); |
- if (!media_codec) |
- return; |
- |
- uint8_t dummy_extra_data[] = {0, 0}; |
- |
- // Extra Data is NULL. |
- EXPECT_FALSE(media_codec->ConfigureAndStart(kCodecOpus, 48000, 2, nullptr, 0, |
- -1, 0, nullptr)); |
+ std::vector<uint8_t> dummy_extra_data = {{0, 0}}; |
// Codec Delay is < 0. |
- EXPECT_FALSE( |
- media_codec->ConfigureAndStart(kCodecOpus, 48000, 2, dummy_extra_data, |
- sizeof(dummy_extra_data), -1, 0, nullptr)); |
+ ASSERT_THAT( |
+ MediaCodecBridgeImpl::CreateAudioDecoder( |
+ NewAudioConfig(kCodecOpus, dummy_extra_data, base::TimeDelta(), -1), |
+ nullptr), |
+ IsNull()); |
// Seek Preroll is < 0. |
- EXPECT_FALSE( |
- media_codec->ConfigureAndStart(kCodecOpus, 48000, 2, dummy_extra_data, |
- sizeof(dummy_extra_data), 0, -1, nullptr)); |
+ ASSERT_THAT(MediaCodecBridgeImpl::CreateAudioDecoder( |
+ NewAudioConfig(kCodecOpus, dummy_extra_data, |
+ base::TimeDelta::FromMicroseconds(-1)), |
+ nullptr), |
+ IsNull()); |
} |
TEST(MediaCodecBridgeTest, PresentationTimestampsDoNotDecrease) { |
- SKIP_TEST_IF_VP8_DECODER_IS_NOT_SUPPORTED(); |
+ if (!MediaCodecUtil::IsVp8DecoderAvailable()) { |
+ VLOG(0) << "Could not run test - VP8 not supported on device."; |
+ return; |
+ } |
- std::unique_ptr<VideoCodecBridge> media_codec(VideoCodecBridge::CreateDecoder( |
- kCodecVP8, false, gfx::Size(320, 240), nullptr, nullptr, |
- std::vector<uint8_t>(), std::vector<uint8_t>())); |
- EXPECT_TRUE(media_codec.get()); |
+ std::unique_ptr<MediaCodecBridge> media_codec( |
+ MediaCodecBridgeImpl::CreateVideoDecoder( |
+ kCodecVP8, false, gfx::Size(320, 240), nullptr, nullptr, |
+ std::vector<uint8_t>(), std::vector<uint8_t>())); |
+ ASSERT_THAT(media_codec, NotNull()); |
scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile("vp8-I-frame-320x240"); |
DecodeMediaFrame(media_codec.get(), buffer->data(), buffer->data_size(), |
base::TimeDelta(), base::TimeDelta()); |
@@ -298,11 +300,13 @@ TEST(MediaCodecBridgeTest, PresentationTimestampsDoNotDecrease) { |
} |
TEST(MediaCodecBridgeTest, CreateUnsupportedCodec) { |
- EXPECT_EQ(nullptr, AudioCodecBridge::Create(kUnknownAudioCodec)); |
- EXPECT_EQ(nullptr, |
- VideoCodecBridge::CreateDecoder( |
- kUnknownVideoCodec, false, gfx::Size(320, 240), nullptr, |
- nullptr, std::vector<uint8_t>(), std::vector<uint8_t>())); |
+ EXPECT_THAT(MediaCodecBridgeImpl::CreateAudioDecoder( |
+ NewAudioConfig(kUnknownAudioCodec), nullptr), |
+ IsNull()); |
+ EXPECT_THAT(MediaCodecBridgeImpl::CreateVideoDecoder( |
+ kUnknownVideoCodec, false, gfx::Size(320, 240), nullptr, |
+ nullptr, std::vector<uint8_t>(), std::vector<uint8_t>()), |
+ IsNull()); |
} |
} // namespace media |