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

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: 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 18 matching lines...) Expand all
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 FFmpegDemuxer;
59 class GpuVideoAcceleratorFactories; 60 class GpuVideoAcceleratorFactories;
60 class MediaLog; 61 class MediaLog;
62 class TextBuffer;
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 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
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);
200 scoped_ptr<media::TextTrack> OnTextTrack(media::TextKind kind, 202 scoped_ptr<media::TextTrack> OnTextTrack(media::TextKind kind,
201 const std::string& label, 203 const std::string& label,
202 const std::string& language); 204 const std::string& language);
205 void OnFFmpegTextTrack(media::TextKind kind,
acolwell GONE FROM CHROMIUM 2013/09/12 00:15:15 A separate method should not be needed for FFmpegD
Matthew Heaney (Chromium) 2013/09/13 19:51:54 Agreed. I'm thinking I should make the DemuxerHos
Matthew Heaney (Chromium) 2013/09/20 23:53:54 I haven't touched the ChunkDemuxer yet. I just wa
206 const std::string& label,
207 const std::string& language,
208 int index);
203 void SetOpaque(bool); 209 void SetOpaque(bool);
204 210
205 private: 211 private:
206 // Called after |defer_load_cb_| has decided to allow the load. If 212 // Called after |defer_load_cb_| has decided to allow the load. If
207 // |defer_load_cb_| is null this is called immediately. 213 // |defer_load_cb_| is null this is called immediately.
208 void DoLoad(LoadType load_type, 214 void DoLoad(LoadType load_type,
209 const WebKit::WebURL& url, 215 const WebKit::WebURL& url,
210 CORSMode cors_mode); 216 CORSMode cors_mode);
211 217
212 // Called after asynchronous initialization of a data source completed. 218 // 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. 257 // Gets the duration value reported by the pipeline.
252 double GetPipelineDuration() const; 258 double GetPipelineDuration() const;
253 259
254 // Notifies WebKit of the duration change. 260 // Notifies WebKit of the duration change.
255 void OnDurationChange(); 261 void OnDurationChange();
256 262
257 // Called by VideoRendererBase on its internal thread with the new frame to be 263 // Called by VideoRendererBase on its internal thread with the new frame to be
258 // painted. 264 // painted.
259 void FrameReady(const scoped_refptr<media::VideoFrame>& frame); 265 void FrameReady(const scoped_refptr<media::VideoFrame>& frame);
260 266
267 // Called by TextRendererImpl when a decoded cue has been delivered on the
268 // text stream having the given |index|, and hence can be added to the
269 // cue list for this text track.
270 void CueReady(int index, const scoped_refptr<media::TextBuffer>& cue);
271
261 WebKit::WebFrame* frame_; 272 WebKit::WebFrame* frame_;
262 273
263 // TODO(hclam): get rid of these members and read from the pipeline directly. 274 // TODO(hclam): get rid of these members and read from the pipeline directly.
264 WebKit::WebMediaPlayer::NetworkState network_state_; 275 WebKit::WebMediaPlayer::NetworkState network_state_;
265 WebKit::WebMediaPlayer::ReadyState ready_state_; 276 WebKit::WebMediaPlayer::ReadyState ready_state_;
266 277
267 // Keep a list of buffered time ranges. 278 // Keep a list of buffered time ranges.
268 WebKit::WebTimeRanges buffered_; 279 WebKit::WebTimeRanges buffered_;
269 280
270 // Message loops for posting tasks on Chrome's main thread. Also used 281 // 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. 371 // playback.
361 scoped_ptr<webkit::WebLayerImpl> video_weblayer_; 372 scoped_ptr<webkit::WebLayerImpl> video_weblayer_;
362 373
363 // A pointer back to the compositor to inform it about state changes. This is 374 // 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. 375 // not NULL while the compositor is actively using this webmediaplayer.
365 cc::VideoFrameProvider::Client* video_frame_provider_client_; 376 cc::VideoFrameProvider::Client* video_frame_provider_client_;
366 377
367 // Text track objects get a unique index value when they're created. 378 // Text track objects get a unique index value when they're created.
368 int text_track_index_; 379 int text_track_index_;
369 380
381 // Text track objects for the FFmpeg-based pipeline.
382 typedef std::map<int, media::TextTrack*> TextTrackMap;
383 TextTrackMap ffmpeg_text_track_map_;
acolwell GONE FROM CHROMIUM 2013/09/12 00:15:15 The ChunkDemuxer didn't need this map here. Why do
Matthew Heaney (Chromium) 2013/09/13 19:51:54 I was having some trouble getting the callback mec
Matthew Heaney (Chromium) 2013/09/20 23:53:54 As it turns out, creating a TextTrack(Impl) object
384
370 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImpl); 385 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImpl);
371 }; 386 };
372 387
373 } // namespace content 388 } // namespace content
374 389
375 #endif // CONTENT_RENDERER_MEDIA_WEBMEDIAPLAYER_IMPL_H_ 390 #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