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

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

Issue 23702007: Render inband text tracks in the media pipeline (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: incorporated more of aaron's comments Created 7 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
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 // Delegate calls from WebCore::MediaPlayerPrivate to Chrome's video player. 5 // Delegate calls from WebCore::MediaPlayerPrivate to Chrome's video player.
6 // It contains Pipeline which is the actual media player pipeline, it glues 6 // It contains Pipeline which is the actual media player pipeline, it glues
7 // the media player pipeline, data source, audio renderer and renderer. 7 // the media player pipeline, data source, audio renderer and renderer.
8 // Pipeline would creates multiple threads and access some public methods 8 // Pipeline would creates multiple threads and access some public methods
9 // of this class, so we need to be extra careful about concurrent access of 9 // of this class, so we need to be extra careful about concurrent access of
10 // methods and members. 10 // methods and members.
11 // 11 //
12 // Other issues: 12 // Other issues:
13 // During tear down of the whole browser or a tab, the DOM tree may not be 13 // During tear down of the whole browser or a tab, the DOM tree may not be
14 // destructed nicely, and there will be some dangling media threads trying to 14 // destructed nicely, and there will be some dangling media threads trying to
15 // the main thread, so we need this class to listen to destruction event of the 15 // the main thread, so we need this class to listen to destruction event of the
16 // main thread and cleanup the media threads when the even is received. Also 16 // main thread and cleanup the media threads when the even is received. Also
17 // at destruction of this class we will need to unhook it from destruction event 17 // at destruction of this class we will need to unhook it from destruction event
18 // list of the main thread. 18 // list of the main thread.
19 19
20 #ifndef CONTENT_RENDERER_MEDIA_WEBMEDIAPLAYER_IMPL_H_ 20 #ifndef CONTENT_RENDERER_MEDIA_WEBMEDIAPLAYER_IMPL_H_
21 #define CONTENT_RENDERER_MEDIA_WEBMEDIAPLAYER_IMPL_H_ 21 #define CONTENT_RENDERER_MEDIA_WEBMEDIAPLAYER_IMPL_H_
22 22
23 #include <map>
23 #include <string> 24 #include <string>
24 #include <vector> 25 #include <vector>
25 26
26 #include "base/basictypes.h" 27 #include "base/basictypes.h"
27 #include "base/memory/ref_counted.h" 28 #include "base/memory/ref_counted.h"
28 #include "base/memory/scoped_ptr.h" 29 #include "base/memory/scoped_ptr.h"
29 #include "base/memory/weak_ptr.h" 30 #include "base/memory/weak_ptr.h"
30 #include "base/threading/thread.h" 31 #include "base/threading/thread.h"
31 #include "cc/layers/video_frame_provider.h" 32 #include "cc/layers/video_frame_provider.h"
32 #include "content/renderer/media/crypto/proxy_decryptor.h" 33 #include "content/renderer/media/crypto/proxy_decryptor.h"
(...skipping 15 matching lines...) Expand all
48 namespace WebKit { 49 namespace WebKit {
49 class WebFrame; 50 class WebFrame;
50 } 51 }
51 52
52 namespace base { 53 namespace base {
53 class MessageLoopProxy; 54 class MessageLoopProxy;
54 } 55 }
55 56
56 namespace media { 57 namespace media {
57 class ChunkDemuxer; 58 class ChunkDemuxer;
58 class FFmpegDemuxer; 59 class DemuxerStream;
59 class GpuVideoAcceleratorFactories; 60 class GpuVideoAcceleratorFactories;
60 class MediaLog; 61 class MediaLog;
62 class TextCue;
61 } 63 }
62 64
63 namespace webkit { 65 namespace webkit {
64 class WebLayerImpl; 66 class WebLayerImpl;
65 } 67 }
66 68
67 namespace content { 69 namespace content {
68 class BufferedDataSource; 70 class BufferedDataSource;
69 class WebAudioSourceProviderImpl; 71 class WebAudioSourceProviderImpl;
70 class WebMediaPlayerDelegate; 72 class WebMediaPlayerDelegate;
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 void OnKeyAdded(const std::string& session_id); 192 void OnKeyAdded(const std::string& session_id);
191 void OnKeyError(const std::string& session_id, 193 void OnKeyError(const std::string& session_id,
192 media::MediaKeys::KeyError error_code, 194 media::MediaKeys::KeyError error_code,
193 int system_code); 195 int system_code);
194 void OnKeyMessage(const std::string& session_id, 196 void OnKeyMessage(const std::string& session_id,
195 const std::vector<uint8>& message, 197 const std::vector<uint8>& message,
196 const std::string& default_url); 198 const std::string& default_url);
197 void OnNeedKey(const std::string& type, 199 void OnNeedKey(const std::string& type,
198 const std::string& session_id, 200 const std::string& session_id,
199 const std::vector<uint8>& init_data); 201 const std::vector<uint8>& init_data);
202 // TODO(matthewjheaney): Once we're satisfied that we have the threading model
203 // correct for handling text cues, move the media source from OnTextTrack over
204 // to AddTextStream.
200 scoped_ptr<media::TextTrack> OnTextTrack(media::TextKind kind, 205 scoped_ptr<media::TextTrack> OnTextTrack(media::TextKind kind,
201 const std::string& label, 206 const std::string& label,
202 const std::string& language); 207 const std::string& language);
208 void AddTextStream(media::DemuxerStream* stream,
209 media::TextKind kind,
210 const std::string& label,
211 const std::string& language);
203 void SetOpaque(bool); 212 void SetOpaque(bool);
204 213
205 private: 214 private:
206 // Called after |defer_load_cb_| has decided to allow the load. If 215 // Called after |defer_load_cb_| has decided to allow the load. If
207 // |defer_load_cb_| is null this is called immediately. 216 // |defer_load_cb_| is null this is called immediately.
208 void DoLoad(LoadType load_type, 217 void DoLoad(LoadType load_type,
209 const WebKit::WebURL& url, 218 const WebKit::WebURL& url,
210 CORSMode cors_mode); 219 CORSMode cors_mode);
211 220
212 // Called after asynchronous initialization of a data source completed. 221 // Called after asynchronous initialization of a data source completed.
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 // Gets the duration value reported by the pipeline. 260 // Gets the duration value reported by the pipeline.
252 double GetPipelineDuration() const; 261 double GetPipelineDuration() const;
253 262
254 // Notifies WebKit of the duration change. 263 // Notifies WebKit of the duration change.
255 void OnDurationChange(); 264 void OnDurationChange();
256 265
257 // Called by VideoRendererBase on its internal thread with the new frame to be 266 // Called by VideoRendererBase on its internal thread with the new frame to be
258 // painted. 267 // painted.
259 void FrameReady(const scoped_refptr<media::VideoFrame>& frame); 268 void FrameReady(const scoped_refptr<media::VideoFrame>& frame);
260 269
270 // Called by the TextRenderer when a decoded cue has been delivered on
271 // |text_stream|, and hence that it be added to the cue list for its
272 // associated text track.
273 void CueReady(media::DemuxerStream* text_stream,
274 const scoped_refptr<media::TextCue>& text_cue);
275
261 WebKit::WebFrame* frame_; 276 WebKit::WebFrame* frame_;
262 277
263 // TODO(hclam): get rid of these members and read from the pipeline directly. 278 // TODO(hclam): get rid of these members and read from the pipeline directly.
264 WebKit::WebMediaPlayer::NetworkState network_state_; 279 WebKit::WebMediaPlayer::NetworkState network_state_;
265 WebKit::WebMediaPlayer::ReadyState ready_state_; 280 WebKit::WebMediaPlayer::ReadyState ready_state_;
266 281
267 // Keep a list of buffered time ranges. 282 // Keep a list of buffered time ranges.
268 WebKit::WebTimeRanges buffered_; 283 WebKit::WebTimeRanges buffered_;
269 284
270 // Message loops for posting tasks on Chrome's main thread. Also used 285 // Message loops for posting tasks on Chrome's main thread. Also used
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 // playback. 375 // playback.
361 scoped_ptr<webkit::WebLayerImpl> video_weblayer_; 376 scoped_ptr<webkit::WebLayerImpl> video_weblayer_;
362 377
363 // A pointer back to the compositor to inform it about state changes. This is 378 // A pointer back to the compositor to inform it about state changes. This is
364 // not NULL while the compositor is actively using this webmediaplayer. 379 // not NULL while the compositor is actively using this webmediaplayer.
365 cc::VideoFrameProvider::Client* video_frame_provider_client_; 380 cc::VideoFrameProvider::Client* video_frame_provider_client_;
366 381
367 // Text track objects get a unique index value when they're created. 382 // Text track objects get a unique index value when they're created.
368 int text_track_index_; 383 int text_track_index_;
369 384
385 // Manipulation of TextTrack objects must be done on the main loop, not the
386 // media loop, so we declare this cache here. Objects in the pipeline
387 // dispatch callbacks to player (using DemuxerStream as the key), the
388 // player looks up the associated TextTrack, and then it manipulates the
389 // TextTrack object as necessary.
390 typedef std::map<media::DemuxerStream*, media::TextTrack*> TextTrackMap;
391 TextTrackMap text_track_map_;
392
370 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImpl); 393 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImpl);
371 }; 394 };
372 395
373 } // namespace content 396 } // namespace content
374 397
375 #endif // CONTENT_RENDERER_MEDIA_WEBMEDIAPLAYER_IMPL_H_ 398 #endif // CONTENT_RENDERER_MEDIA_WEBMEDIAPLAYER_IMPL_H_
OLDNEW
« no previous file with comments | « no previous file | content/renderer/media/webmediaplayer_impl.cc » ('j') | content/renderer/media/webmediaplayer_impl.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698