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 #ifndef CONTENT_COMMON_GPU_MEDIA_ANDROID_VIDEO_DECODE_ACCELERATOR_H_ | 5 #ifndef CONTENT_COMMON_GPU_MEDIA_ANDROID_VIDEO_DECODE_ACCELERATOR_H_ |
6 #define CONTENT_COMMON_GPU_MEDIA_ANDROID_VIDEO_DECODE_ACCELERATOR_H_ | 6 #define CONTENT_COMMON_GPU_MEDIA_ANDROID_VIDEO_DECODE_ACCELERATOR_H_ |
7 | 7 |
8 #include <list> | 8 #include <list> |
9 #include <map> | 9 #include <map> |
10 #include <queue> | 10 #include <queue> |
11 #include <string> | 11 #include <string> |
12 #include <vector> | 12 #include <vector> |
13 | 13 |
14 #include "base/compiler_specific.h" | 14 #include "base/compiler_specific.h" |
15 #include "base/threading/thread_checker.h" | 15 #include "base/threading/thread_checker.h" |
16 #include "base/timer/timer.h" | 16 #include "base/timer/timer.h" |
17 #include "content/common/content_export.h" | 17 #include "content/common/content_export.h" |
18 #include "content/common/gpu/media/avda_state_provider.h" | 18 #include "content/common/gpu/media/avda_state_provider.h" |
19 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" | 19 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
20 #include "media/base/android/media_codec_bridge.h" | 20 #include "media/base/android/media_codec_bridge.h" |
| 21 #include "media/base/android/media_drm_bridge.h" |
| 22 #include "media/base/media_keys.h" |
21 #include "media/video/video_decode_accelerator.h" | 23 #include "media/video/video_decode_accelerator.h" |
22 | 24 |
23 namespace gfx { | 25 namespace gfx { |
24 class SurfaceTexture; | 26 class SurfaceTexture; |
25 } | 27 } |
26 | 28 |
27 namespace content { | 29 namespace content { |
28 | 30 |
29 // A VideoDecodeAccelerator implementation for Android. | 31 // A VideoDecodeAccelerator implementation for Android. |
30 // This class decodes the input encoded stream by using Android's MediaCodec | 32 // This class decodes the input encoded stream by using Android's MediaCodec |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 void QueueInput(); | 142 void QueueInput(); |
141 | 143 |
142 // Dequeues output from |media_codec_| and feeds the decoded frame to the | 144 // Dequeues output from |media_codec_| and feeds the decoded frame to the |
143 // client. Returns a hint about whether calling again might produce | 145 // client. Returns a hint about whether calling again might produce |
144 // more output. | 146 // more output. |
145 bool DequeueOutput(); | 147 bool DequeueOutput(); |
146 | 148 |
147 // Requests picture buffers from the client. | 149 // Requests picture buffers from the client. |
148 void RequestPictureBuffers(); | 150 void RequestPictureBuffers(); |
149 | 151 |
| 152 // This callback is called after CDM obtained a MediaCrypto object. |
| 153 void OnMediaCryptoReady(media::MediaDrmBridge::JavaObjectPtr media_crypto, |
| 154 bool needs_protected_surface); |
| 155 |
| 156 // This callback is called when a new key is added to CDM. |
| 157 void OnKeyAdded(); |
| 158 |
150 // Notifies the client of the CDM setting result. | 159 // Notifies the client of the CDM setting result. |
151 void NotifyCdmAttached(bool success); | 160 void NotifyCdmAttached(bool success); |
152 | 161 |
153 // Notifies the client about the availability of a picture. | 162 // Notifies the client about the availability of a picture. |
154 void NotifyPictureReady(const media::Picture& picture); | 163 void NotifyPictureReady(const media::Picture& picture); |
155 | 164 |
156 // Notifies the client that the input buffer identifed by input_buffer_id has | 165 // Notifies the client that the input buffer identifed by input_buffer_id has |
157 // been processed. | 166 // been processed. |
158 void NotifyEndOfBitstreamBuffer(int input_buffer_id); | 167 void NotifyEndOfBitstreamBuffer(int input_buffer_id); |
159 | 168 |
(...skipping 14 matching lines...) Expand all Loading... |
174 | 183 |
175 // Callback to set the correct gl context. | 184 // Callback to set the correct gl context. |
176 base::Callback<bool(void)> make_context_current_; | 185 base::Callback<bool(void)> make_context_current_; |
177 | 186 |
178 // Codec type. Used when we configure media codec. | 187 // Codec type. Used when we configure media codec. |
179 media::VideoCodec codec_; | 188 media::VideoCodec codec_; |
180 | 189 |
181 // Whether the stream is encrypted. | 190 // Whether the stream is encrypted. |
182 bool is_encrypted_; | 191 bool is_encrypted_; |
183 | 192 |
| 193 // Whether encryption scheme requires to use protected surface. |
| 194 bool needs_protected_surface_; |
| 195 |
184 // The current state of this class. For now, this is used only for setting | 196 // The current state of this class. For now, this is used only for setting |
185 // error state. | 197 // error state. |
186 State state_; | 198 State state_; |
187 | 199 |
188 // This map maintains the picture buffers passed to the client for decoding. | 200 // This map maintains the picture buffers passed to the client for decoding. |
189 // The key is the picture buffer id. | 201 // The key is the picture buffer id. |
190 OutputBufferMap output_picture_buffers_; | 202 OutputBufferMap output_picture_buffers_; |
191 | 203 |
192 // This keeps the free picture buffer ids which can be used for sending | 204 // This keeps the free picture buffer ids which can be used for sending |
193 // decoded frames to the client. | 205 // decoded frames to the client. |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 | 241 |
230 // Owner of the GL context. Used to restore the context state. | 242 // Owner of the GL context. Used to restore the context state. |
231 base::WeakPtr<gpu::gles2::GLES2Decoder> gl_decoder_; | 243 base::WeakPtr<gpu::gles2::GLES2Decoder> gl_decoder_; |
232 | 244 |
233 // Repeating timer responsible for draining pending IO to the codec. | 245 // Repeating timer responsible for draining pending IO to the codec. |
234 base::RepeatingTimer io_timer_; | 246 base::RepeatingTimer io_timer_; |
235 | 247 |
236 // Backing strategy that we'll use to connect PictureBuffers to frames. | 248 // Backing strategy that we'll use to connect PictureBuffers to frames. |
237 scoped_ptr<BackingStrategy> strategy_; | 249 scoped_ptr<BackingStrategy> strategy_; |
238 | 250 |
| 251 // CDM related stuff. |
| 252 |
| 253 // Holds a ref-count to the CDM. |
| 254 scoped_refptr<media::MediaKeys> cdm_; |
| 255 |
| 256 // MediaDrmBridge requires registration/unregistration of the player, this |
| 257 // registration id is used for this. |
| 258 int cdm_registration_id_; |
| 259 |
| 260 // The MediaCrypto object is used in the MediaCodec.configure() in case of |
| 261 // an encrypted stream. |
| 262 media::MediaDrmBridge::JavaObjectPtr media_crypto_; |
| 263 |
239 // WeakPtrFactory for posting tasks back to |this|. | 264 // WeakPtrFactory for posting tasks back to |this|. |
240 base::WeakPtrFactory<AndroidVideoDecodeAccelerator> weak_this_factory_; | 265 base::WeakPtrFactory<AndroidVideoDecodeAccelerator> weak_this_factory_; |
241 | 266 |
242 friend class AndroidVideoDecodeAcceleratorTest; | 267 friend class AndroidVideoDecodeAcceleratorTest; |
243 }; | 268 }; |
244 | 269 |
245 } // namespace content | 270 } // namespace content |
246 | 271 |
247 #endif // CONTENT_COMMON_GPU_MEDIA_ANDROID_VIDEO_DECODE_ACCELERATOR_H_ | 272 #endif // CONTENT_COMMON_GPU_MEDIA_ANDROID_VIDEO_DECODE_ACCELERATOR_H_ |
OLD | NEW |