OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/gpu/android_video_decode_accelerator.h" | 5 #include "media/gpu/android_video_decode_accelerator.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
(...skipping 19 matching lines...) Expand all Loading... |
30 | 30 |
31 static base::WeakPtr<gpu::gles2::GLES2Decoder> MockGetGLES2Decoder( | 31 static base::WeakPtr<gpu::gles2::GLES2Decoder> MockGetGLES2Decoder( |
32 const base::WeakPtr<gpu::gles2::GLES2Decoder>& decoder) { | 32 const base::WeakPtr<gpu::gles2::GLES2Decoder>& decoder) { |
33 return decoder; | 33 return decoder; |
34 } | 34 } |
35 | 35 |
36 } // namespace | 36 } // namespace |
37 | 37 |
38 namespace media { | 38 namespace media { |
39 | 39 |
40 class MockVideoDecodeAcceleratorClient | 40 class MockVideoDecodeAcceleratorClient : public VideoDecodeAccelerator::Client { |
41 : public media::VideoDecodeAccelerator::Client { | |
42 public: | 41 public: |
43 MockVideoDecodeAcceleratorClient() {} | 42 MockVideoDecodeAcceleratorClient() {} |
44 ~MockVideoDecodeAcceleratorClient() override {} | 43 ~MockVideoDecodeAcceleratorClient() override {} |
45 | 44 |
46 // VideoDecodeAccelerator::Client implementation. | 45 // VideoDecodeAccelerator::Client implementation. |
47 void ProvidePictureBuffers(uint32_t requested_num_of_buffers, | 46 void ProvidePictureBuffers(uint32_t requested_num_of_buffers, |
48 VideoPixelFormat format, | 47 VideoPixelFormat format, |
49 uint32_t textures_per_buffer, | 48 uint32_t textures_per_buffer, |
50 const gfx::Size& dimensions, | 49 const gfx::Size& dimensions, |
51 uint32_t texture_target) override {} | 50 uint32_t texture_target) override {} |
52 void DismissPictureBuffer(int32_t picture_buffer_id) override {} | 51 void DismissPictureBuffer(int32_t picture_buffer_id) override {} |
53 void PictureReady(const media::Picture& picture) override {} | 52 void PictureReady(const Picture& picture) override {} |
54 void NotifyEndOfBitstreamBuffer(int32_t bitstream_buffer_id) override {} | 53 void NotifyEndOfBitstreamBuffer(int32_t bitstream_buffer_id) override {} |
55 void NotifyFlushDone() override {} | 54 void NotifyFlushDone() override {} |
56 void NotifyResetDone() override {} | 55 void NotifyResetDone() override {} |
57 void NotifyError(media::VideoDecodeAccelerator::Error error) override {} | 56 void NotifyError(VideoDecodeAccelerator::Error error) override {} |
58 }; | 57 }; |
59 | 58 |
60 class AndroidVideoDecodeAcceleratorTest : public testing::Test { | 59 class AndroidVideoDecodeAcceleratorTest : public testing::Test { |
61 public: | 60 public: |
62 ~AndroidVideoDecodeAcceleratorTest() override {} | 61 ~AndroidVideoDecodeAcceleratorTest() override {} |
63 | 62 |
64 protected: | 63 protected: |
65 void SetUp() override { | 64 void SetUp() override { |
66 JNIEnv* env = base::android::AttachCurrentThread(); | 65 JNIEnv* env = base::android::AttachCurrentThread(); |
67 media::RegisterJni(env); | 66 RegisterJni(env); |
68 | 67 |
69 // Start message loop because | 68 // Start message loop because |
70 // AndroidVideoDecodeAccelerator::ConfigureMediaCodec() starts a timer task. | 69 // AndroidVideoDecodeAccelerator::ConfigureMediaCodec() starts a timer task. |
71 message_loop_.reset(new base::MessageLoop()); | 70 message_loop_.reset(new base::MessageLoop()); |
72 | 71 |
73 std::unique_ptr<gpu::gles2::MockGLES2Decoder> decoder( | 72 std::unique_ptr<gpu::gles2::MockGLES2Decoder> decoder( |
74 new gpu::gles2::MockGLES2Decoder()); | 73 new gpu::gles2::MockGLES2Decoder()); |
75 std::unique_ptr<MockVideoDecodeAcceleratorClient> client( | 74 std::unique_ptr<MockVideoDecodeAcceleratorClient> client( |
76 new MockVideoDecodeAcceleratorClient()); | 75 new MockVideoDecodeAcceleratorClient()); |
77 accelerator_.reset(new AndroidVideoDecodeAccelerator( | 76 accelerator_.reset(new AndroidVideoDecodeAccelerator( |
78 base::Bind(&MockMakeContextCurrent), | 77 base::Bind(&MockMakeContextCurrent), |
79 base::Bind(&MockGetGLES2Decoder, decoder->AsWeakPtr()))); | 78 base::Bind(&MockGetGLES2Decoder, decoder->AsWeakPtr()))); |
80 } | 79 } |
81 | 80 |
82 bool Configure(media::VideoCodec codec) { | 81 bool Configure(VideoCodec codec) { |
83 AndroidVideoDecodeAccelerator* accelerator = | 82 AndroidVideoDecodeAccelerator* accelerator = |
84 static_cast<AndroidVideoDecodeAccelerator*>(accelerator_.get()); | 83 static_cast<AndroidVideoDecodeAccelerator*>(accelerator_.get()); |
85 scoped_refptr<gl::SurfaceTexture> surface_texture = | 84 scoped_refptr<gl::SurfaceTexture> surface_texture = |
86 gl::SurfaceTexture::Create(0); | 85 gl::SurfaceTexture::Create(0); |
87 accelerator->codec_config_->surface_ = | 86 accelerator->codec_config_->surface_ = |
88 gl::ScopedJavaSurface(surface_texture.get()); | 87 gl::ScopedJavaSurface(surface_texture.get()); |
89 accelerator->codec_config_->codec_ = codec; | 88 accelerator->codec_config_->codec_ = codec; |
90 return accelerator->ConfigureMediaCodecSynchronously(); | 89 return accelerator->ConfigureMediaCodecSynchronously(); |
91 } | 90 } |
92 | 91 |
93 private: | 92 private: |
94 std::unique_ptr<media::VideoDecodeAccelerator> accelerator_; | 93 std::unique_ptr<VideoDecodeAccelerator> accelerator_; |
95 std::unique_ptr<base::MessageLoop> message_loop_; | 94 std::unique_ptr<base::MessageLoop> message_loop_; |
96 }; | 95 }; |
97 | 96 |
98 TEST_F(AndroidVideoDecodeAcceleratorTest, ConfigureUnsupportedCodec) { | 97 TEST_F(AndroidVideoDecodeAcceleratorTest, ConfigureUnsupportedCodec) { |
99 EXPECT_FALSE(Configure(media::kUnknownVideoCodec)); | 98 EXPECT_FALSE(Configure(kUnknownVideoCodec)); |
100 } | 99 } |
101 | 100 |
102 TEST_F(AndroidVideoDecodeAcceleratorTest, ConfigureSupportedCodec) { | 101 TEST_F(AndroidVideoDecodeAcceleratorTest, ConfigureSupportedCodec) { |
103 if (!media::MediaCodecUtil::IsMediaCodecAvailable()) | 102 if (!MediaCodecUtil::IsMediaCodecAvailable()) |
104 return; | 103 return; |
105 EXPECT_TRUE(Configure(media::kCodecVP8)); | 104 EXPECT_TRUE(Configure(kCodecVP8)); |
106 } | 105 } |
107 | 106 |
108 } // namespace media | 107 } // namespace media |
109 | 108 |
110 int main(int argc, char** argv) { | 109 int main(int argc, char** argv) { |
111 testing::InitGoogleTest(&argc, argv); | 110 testing::InitGoogleTest(&argc, argv); |
112 return RUN_ALL_TESTS(); | 111 return RUN_ALL_TESTS(); |
113 } | 112 } |
OLD | NEW |