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

Side by Side Diff: content/renderer/media/webmediaplayer_impl.h

Issue 501473003: Move EME code out of WebMediaPlayerImpl. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 6 years, 3 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 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_RENDERER_MEDIA_WEBMEDIAPLAYER_IMPL_H_ 5 #ifndef CONTENT_RENDERER_MEDIA_WEBMEDIAPLAYER_IMPL_H_
6 #define CONTENT_RENDERER_MEDIA_WEBMEDIAPLAYER_IMPL_H_ 6 #define CONTENT_RENDERER_MEDIA_WEBMEDIAPLAYER_IMPL_H_
7 7
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/basictypes.h" 11 #include "base/basictypes.h"
12 #include "base/memory/ref_counted.h" 12 #include "base/memory/ref_counted.h"
13 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_ptr.h"
14 #include "base/memory/weak_ptr.h" 14 #include "base/memory/weak_ptr.h"
15 #include "base/threading/thread.h" 15 #include "base/threading/thread.h"
16 #include "content/renderer/media/buffered_data_source_host_impl.h" 16 #include "content/renderer/media/buffered_data_source_host_impl.h"
17 #include "content/renderer/media/crypto/proxy_decryptor.h"
18 #include "content/renderer/media/video_frame_compositor.h" 17 #include "content/renderer/media/video_frame_compositor.h"
19 #include "media/base/audio_renderer_sink.h" 18 #include "media/base/audio_renderer_sink.h"
20 #include "media/base/decryptor.h"
21 // TODO(xhwang): Remove when we remove prefixed EME implementation. 19 // TODO(xhwang): Remove when we remove prefixed EME implementation.
22 #include "media/base/media_keys.h" 20 #include "media/base/media_keys.h"
23 #include "media/base/pipeline.h" 21 #include "media/base/pipeline.h"
24 #include "media/base/text_track.h" 22 #include "media/base/text_track.h"
25 #include "media/filters/skcanvas_video_renderer.h" 23 #include "media/filters/skcanvas_video_renderer.h"
26 #include "skia/ext/platform_canvas.h" 24 #include "skia/ext/platform_canvas.h"
27 #include "third_party/WebKit/public/platform/WebAudioSourceProvider.h" 25 #include "third_party/WebKit/public/platform/WebAudioSourceProvider.h"
26 #include "third_party/WebKit/public/platform/WebContentDecryptionModuleResult.h"
28 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h" 27 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h"
29 #include "third_party/WebKit/public/platform/WebMediaPlayer.h" 28 #include "third_party/WebKit/public/platform/WebMediaPlayer.h"
30 #include "third_party/WebKit/public/platform/WebMediaPlayerClient.h" 29 #include "third_party/WebKit/public/platform/WebMediaPlayerClient.h"
31 #include "url/gurl.h" 30 #include "url/gurl.h"
32 31
33 class RenderAudioSourceProvider;
34
35 namespace blink { 32 namespace blink {
36 class WebContentDecryptionModule;
37 class WebContentDecryptionModuleResult;
38 class WebLocalFrame; 33 class WebLocalFrame;
39 } 34 }
40 35
41 namespace base { 36 namespace base {
42 class MessageLoopProxy; 37 class MessageLoopProxy;
43 } 38 }
44 39
45 namespace cc_blink { 40 namespace cc_blink {
46 class WebLayerImpl; 41 class WebLayerImpl;
47 } 42 }
48 43
49 namespace media { 44 namespace media {
50 class ChunkDemuxer; 45 class ChunkDemuxer;
51 class GpuVideoAcceleratorFactories; 46 class GpuVideoAcceleratorFactories;
52 class MediaLog; 47 class MediaLog;
53 } 48 }
54 49
55 50
56 namespace content { 51 namespace content {
57 class BufferedDataSource; 52 class BufferedDataSource;
53 class EncryptedMediaPlayerSupport;
58 class VideoFrameCompositor; 54 class VideoFrameCompositor;
59 class WebAudioSourceProviderImpl; 55 class WebAudioSourceProviderImpl;
60 class WebContentDecryptionModuleImpl;
61 class WebMediaPlayerDelegate; 56 class WebMediaPlayerDelegate;
62 class WebMediaPlayerParams; 57 class WebMediaPlayerParams;
63 class WebTextTrackImpl; 58 class WebTextTrackImpl;
64 59
65 // The canonical implementation of blink::WebMediaPlayer that's backed by 60 // The canonical implementation of blink::WebMediaPlayer that's backed by
66 // media::Pipeline. Handles normal resource loading, Media Source, and 61 // media::Pipeline. Handles normal resource loading, Media Source, and
67 // Encrypted Media. 62 // Encrypted Media.
68 class WebMediaPlayerImpl 63 class WebMediaPlayerImpl
69 : public blink::WebMediaPlayer, 64 : public blink::WebMediaPlayer,
70 public base::SupportsWeakPtr<WebMediaPlayerImpl> { 65 public base::SupportsWeakPtr<WebMediaPlayerImpl> {
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 blink::WebContentDecryptionModuleResult result); 165 blink::WebContentDecryptionModuleResult result);
171 virtual void setContentDecryptionModuleSync( 166 virtual void setContentDecryptionModuleSync(
172 blink::WebContentDecryptionModule* cdm); 167 blink::WebContentDecryptionModule* cdm);
173 168
174 void OnPipelineSeeked(bool time_changed, media::PipelineStatus status); 169 void OnPipelineSeeked(bool time_changed, media::PipelineStatus status);
175 void OnPipelineEnded(); 170 void OnPipelineEnded();
176 void OnPipelineError(media::PipelineStatus error); 171 void OnPipelineError(media::PipelineStatus error);
177 void OnPipelineMetadata(media::PipelineMetadata metadata); 172 void OnPipelineMetadata(media::PipelineMetadata metadata);
178 void OnPipelineBufferingStateChanged(media::BufferingState buffering_state); 173 void OnPipelineBufferingStateChanged(media::BufferingState buffering_state);
179 void OnDemuxerOpened(); 174 void OnDemuxerOpened();
180 void OnKeyAdded(const std::string& session_id);
181 void OnKeyError(const std::string& session_id,
182 media::MediaKeys::KeyError error_code,
183 uint32 system_code);
184 void OnKeyMessage(const std::string& session_id,
185 const std::vector<uint8>& message,
186 const GURL& destination_url);
187 void OnNeedKey(const std::string& type,
188 const std::vector<uint8>& init_data);
189 void OnAddTextTrack(const media::TextTrackConfig& config, 175 void OnAddTextTrack(const media::TextTrackConfig& config,
190 const media::AddTextTrackDoneCB& done_cb); 176 const media::AddTextTrackDoneCB& done_cb);
191 177
192 private: 178 private:
193 // Called after |defer_load_cb_| has decided to allow the load. If 179 // Called after |defer_load_cb_| has decided to allow the load. If
194 // |defer_load_cb_| is null this is called immediately. 180 // |defer_load_cb_| is null this is called immediately.
195 void DoLoad(LoadType load_type, 181 void DoLoad(LoadType load_type,
196 const blink::WebURL& url, 182 const blink::WebURL& url,
197 CORSMode cors_mode); 183 CORSMode cors_mode);
198 184
(...skipping 10 matching lines...) Expand all
209 void StartPipeline(); 195 void StartPipeline();
210 196
211 // Helpers that set the network/ready state and notifies the client if 197 // Helpers that set the network/ready state and notifies the client if
212 // they've changed. 198 // they've changed.
213 void SetNetworkState(blink::WebMediaPlayer::NetworkState state); 199 void SetNetworkState(blink::WebMediaPlayer::NetworkState state);
214 void SetReadyState(blink::WebMediaPlayer::ReadyState state); 200 void SetReadyState(blink::WebMediaPlayer::ReadyState state);
215 201
216 // Lets V8 know that player uses extra resources not managed by V8. 202 // Lets V8 know that player uses extra resources not managed by V8.
217 void IncrementExternallyAllocatedMemory(); 203 void IncrementExternallyAllocatedMemory();
218 204
219 // Actually do the work for generateKeyRequest/addKey so they can easily
220 // report results to UMA.
221 MediaKeyException GenerateKeyRequestInternal(const std::string& key_system,
222 const unsigned char* init_data,
223 unsigned init_data_length);
224 MediaKeyException AddKeyInternal(const std::string& key_system,
225 const unsigned char* key,
226 unsigned key_length,
227 const unsigned char* init_data,
228 unsigned init_data_length,
229 const std::string& session_id);
230 MediaKeyException CancelKeyRequestInternal(const std::string& key_system,
231 const std::string& session_id);
232
233 // Gets the duration value reported by the pipeline. 205 // Gets the duration value reported by the pipeline.
234 double GetPipelineDuration() const; 206 double GetPipelineDuration() const;
235 207
236 // Callbacks from |pipeline_| that are forwarded to |client_|. 208 // Callbacks from |pipeline_| that are forwarded to |client_|.
237 void OnDurationChanged(); 209 void OnDurationChanged();
238 void OnNaturalSizeChanged(gfx::Size size); 210 void OnNaturalSizeChanged(gfx::Size size);
239 void OnOpacityChanged(bool opaque); 211 void OnOpacityChanged(bool opaque);
240 212
241 // Called by VideoRendererImpl on its internal thread with the new frame to be 213 // Called by VideoRendererImpl on its internal thread with the new frame to be
242 // painted. 214 // painted.
243 void FrameReady(const scoped_refptr<media::VideoFrame>& frame); 215 void FrameReady(const scoped_refptr<media::VideoFrame>& frame);
244 216
245 // Requests that this object notifies when a decryptor is ready through the
246 // |decryptor_ready_cb| provided.
247 // If |decryptor_ready_cb| is null, the existing callback will be fired with
248 // NULL immediately and reset.
249 void SetDecryptorReadyCB(const media::DecryptorReadyCB& decryptor_ready_cb);
250
251 // Called when the ContentDecryptionModule has been attached to the 217 // Called when the ContentDecryptionModule has been attached to the
252 // pipeline/decoders. 218 // pipeline/decoders.
253 void ContentDecryptionModuleAttached( 219 void ContentDecryptionModuleAttached(
254 blink::WebContentDecryptionModuleResult result, 220 blink::WebContentDecryptionModuleResult result,
255 bool success); 221 bool success);
256 222
257 // Returns the current video frame from |compositor_|. Blocks until the 223 // Returns the current video frame from |compositor_|. Blocks until the
258 // compositor can return the frame. 224 // compositor can return the frame.
259 scoped_refptr<media::VideoFrame> GetCurrentFrameFromCompositor(); 225 scoped_refptr<media::VideoFrame> GetCurrentFrameFromCompositor();
260 226
261 blink::WebLocalFrame* frame_; 227 blink::WebLocalFrame* frame_;
262 228
263 // TODO(hclam): get rid of these members and read from the pipeline directly. 229 // TODO(hclam): get rid of these members and read from the pipeline directly.
264 blink::WebMediaPlayer::NetworkState network_state_; 230 blink::WebMediaPlayer::NetworkState network_state_;
265 blink::WebMediaPlayer::ReadyState ready_state_; 231 blink::WebMediaPlayer::ReadyState ready_state_;
266 232
267 // Preload state for when |data_source_| is created after setPreload(). 233 // Preload state for when |data_source_| is created after setPreload().
268 content::Preload preload_; 234 content::Preload preload_;
269 235
270 // Message loops for posting tasks on Chrome's main thread. Also used 236 // Message loops for posting tasks on Chrome's main thread. Also used
271 // for DCHECKs so methods calls won't execute in the wrong thread. 237 // for DCHECKs so methods calls won't execute in the wrong thread.
272 const scoped_refptr<base::MessageLoopProxy> main_loop_; 238 const scoped_refptr<base::MessageLoopProxy> main_loop_;
273 239
274 scoped_refptr<base::MessageLoopProxy> media_loop_; 240 scoped_refptr<base::MessageLoopProxy> media_loop_;
275 scoped_refptr<media::MediaLog> media_log_; 241 scoped_refptr<media::MediaLog> media_log_;
276 media::Pipeline pipeline_; 242 media::Pipeline pipeline_;
277 243
278 // The currently selected key system. Empty string means that no key system
279 // has been selected.
280 std::string current_key_system_;
281
282 // The LoadType passed in the |load_type| parameter of the load() call. 244 // The LoadType passed in the |load_type| parameter of the load() call.
283 LoadType load_type_; 245 LoadType load_type_;
284 246
285 // Cache of metadata for answering hasAudio(), hasVideo(), and naturalSize(). 247 // Cache of metadata for answering hasAudio(), hasVideo(), and naturalSize().
286 media::PipelineMetadata pipeline_metadata_; 248 media::PipelineMetadata pipeline_metadata_;
287 249
288 // Whether the video is known to be opaque or not. 250 // Whether the video is known to be opaque or not.
289 bool opaque_; 251 bool opaque_;
290 252
291 // Playback state. 253 // Playback state.
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 // |chunk_demuxer_| is used for Media Source resource loads. 297 // |chunk_demuxer_| is used for Media Source resource loads.
336 // 298 //
337 // |demuxer_| will contain the appropriate demuxer based on which resource 299 // |demuxer_| will contain the appropriate demuxer based on which resource
338 // load strategy we're using. 300 // load strategy we're using.
339 scoped_ptr<BufferedDataSource> data_source_; 301 scoped_ptr<BufferedDataSource> data_source_;
340 scoped_ptr<media::Demuxer> demuxer_; 302 scoped_ptr<media::Demuxer> demuxer_;
341 media::ChunkDemuxer* chunk_demuxer_; 303 media::ChunkDemuxer* chunk_demuxer_;
342 304
343 BufferedDataSourceHostImpl buffered_data_source_host_; 305 BufferedDataSourceHostImpl buffered_data_source_host_;
344 306
345 // Temporary for EME v0.1. In the future the init data type should be passed
346 // through GenerateKeyRequest() directly from WebKit.
347 std::string init_data_type_;
348
349 // Video rendering members. 307 // Video rendering members.
350 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_; 308 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_;
351 VideoFrameCompositor* compositor_; // Deleted on |compositor_task_runner_|. 309 VideoFrameCompositor* compositor_; // Deleted on |compositor_task_runner_|.
352 media::SkCanvasVideoRenderer skcanvas_video_renderer_; 310 media::SkCanvasVideoRenderer skcanvas_video_renderer_;
353 311
354 // The compositor layer for displaying the video content when using composited 312 // The compositor layer for displaying the video content when using composited
355 // playback. 313 // playback.
356 scoped_ptr<cc_blink::WebLayerImpl> video_weblayer_; 314 scoped_ptr<cc_blink::WebLayerImpl> video_weblayer_;
357 315
358 // Text track objects get a unique index value when they're created. 316 // Text track objects get a unique index value when they're created.
359 int text_track_index_; 317 int text_track_index_;
360 318
361 // Manages decryption keys and decrypts encrypted frames. 319 scoped_ptr<EncryptedMediaPlayerSupport> encrypted_media_support_;
362 scoped_ptr<ProxyDecryptor> proxy_decryptor_;
363
364 // Non-owned pointer to the CDM. Updated via calls to
365 // setContentDecryptionModule().
366 WebContentDecryptionModuleImpl* web_cdm_;
367
368 media::DecryptorReadyCB decryptor_ready_cb_;
369 320
370 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImpl); 321 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImpl);
371 }; 322 };
372 323
373 } // namespace content 324 } // namespace content
374 325
375 #endif // CONTENT_RENDERER_MEDIA_WEBMEDIAPLAYER_IMPL_H_ 326 #endif // CONTENT_RENDERER_MEDIA_WEBMEDIAPLAYER_IMPL_H_
OLDNEW
« no previous file with comments | « content/renderer/media/crypto/encrypted_media_player_support_impl.cc ('k') | content/renderer/media/webmediaplayer_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698