OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #ifndef WEBKIT_GLUE_WEBMEDIAPLAYER_PROXY_H_ |
| 6 #define WEBKIT_GLUE_WEBMEDIAPLAYER_PROXY_H_ |
| 7 |
| 8 #include <list> |
| 9 |
| 10 #include "base/memory/ref_counted.h" |
| 11 #include "base/synchronization/lock.h" |
| 12 #include "media/filters/chunk_demuxer_client.h" |
| 13 #include "webkit/glue/media/web_data_source.h" |
| 14 |
| 15 class MessageLoop; |
| 16 class SkCanvas; |
| 17 |
| 18 namespace gfx { |
| 19 class Rect; |
| 20 } |
| 21 |
| 22 namespace webkit_glue { |
| 23 |
| 24 class WebMediaPlayerImpl; |
| 25 class WebVideoRenderer; |
| 26 |
| 27 // Acts as a thread proxy between the various threads used for multimedia and |
| 28 // the render thread that WebMediaPlayerImpl is running on. |
| 29 class WebMediaPlayerProxy |
| 30 : public base::RefCountedThreadSafe<WebMediaPlayerProxy>, |
| 31 public media::ChunkDemuxerClient { |
| 32 public: |
| 33 WebMediaPlayerProxy(MessageLoop* render_loop, |
| 34 WebMediaPlayerImpl* webmediaplayer); |
| 35 |
| 36 // Methods for Filter -> WebMediaPlayerImpl communication. |
| 37 void Repaint(); |
| 38 void SetVideoRenderer(scoped_refptr<WebVideoRenderer> video_renderer); |
| 39 WebDataSourceBuildObserverHack* GetBuildObserver(); |
| 40 |
| 41 // Methods for WebMediaPlayerImpl -> Filter communication. |
| 42 void Paint(SkCanvas* canvas, const gfx::Rect& dest_rect); |
| 43 void SetSize(const gfx::Rect& rect); |
| 44 void Detach(); |
| 45 void GetCurrentFrame(scoped_refptr<media::VideoFrame>* frame_out); |
| 46 void PutCurrentFrame(scoped_refptr<media::VideoFrame> frame); |
| 47 bool HasSingleOrigin(); |
| 48 void AbortDataSources(); |
| 49 |
| 50 // Methods for PipelineImpl -> WebMediaPlayerImpl communication. |
| 51 void PipelineInitializationCallback(media::PipelineStatus status); |
| 52 void PipelineSeekCallback(media::PipelineStatus status); |
| 53 void PipelineEndedCallback(media::PipelineStatus status); |
| 54 void PipelineErrorCallback(media::PipelineStatus error); |
| 55 void NetworkEventCallback(media::PipelineStatus status); |
| 56 |
| 57 // ChunkDemuxerClient implementation. |
| 58 virtual void DemuxerOpened(media::ChunkDemuxer* demuxer) OVERRIDE; |
| 59 virtual void DemuxerClosed() OVERRIDE; |
| 60 |
| 61 // Methods for Demuxer communication. |
| 62 void DemuxerFlush(); |
| 63 bool DemuxerAppend(const uint8* data, size_t length); |
| 64 void DemuxerEndOfStream(media::PipelineStatus status); |
| 65 void DemuxerShutdown(); |
| 66 |
| 67 void DemuxerOpenedTask(const scoped_refptr<media::ChunkDemuxer>& demuxer); |
| 68 void DemuxerClosedTask(); |
| 69 |
| 70 // Returns the message loop used by the proxy. |
| 71 MessageLoop* message_loop() { return render_loop_; } |
| 72 |
| 73 private: |
| 74 friend class base::RefCountedThreadSafe<WebMediaPlayerProxy>; |
| 75 virtual ~WebMediaPlayerProxy(); |
| 76 |
| 77 // Adds a data source to data_sources_. |
| 78 void AddDataSource(WebDataSource* data_source); |
| 79 |
| 80 // Invoke |webmediaplayer_| to perform a repaint. |
| 81 void RepaintTask(); |
| 82 |
| 83 // Notify |webmediaplayer_| that initialization has finished. |
| 84 void PipelineInitializationTask(media::PipelineStatus status); |
| 85 |
| 86 // Notify |webmediaplayer_| that a seek has finished. |
| 87 void PipelineSeekTask(media::PipelineStatus status); |
| 88 |
| 89 // Notify |webmediaplayer_| that the media has ended. |
| 90 void PipelineEndedTask(media::PipelineStatus status); |
| 91 |
| 92 // Notify |webmediaplayer_| that a pipeline error has occurred during |
| 93 // playback. |
| 94 void PipelineErrorTask(media::PipelineStatus error); |
| 95 |
| 96 // Notify |webmediaplayer_| that there's a network event. |
| 97 void NetworkEventTask(media::PipelineStatus status); |
| 98 |
| 99 // The render message loop where WebKit lives. |
| 100 MessageLoop* render_loop_; |
| 101 WebMediaPlayerImpl* webmediaplayer_; |
| 102 |
| 103 base::Lock data_sources_lock_; |
| 104 typedef std::list<scoped_refptr<WebDataSource> > DataSourceList; |
| 105 DataSourceList data_sources_; |
| 106 scoped_ptr<WebDataSourceBuildObserverHack> build_observer_; |
| 107 |
| 108 scoped_refptr<WebVideoRenderer> video_renderer_; |
| 109 |
| 110 base::Lock lock_; |
| 111 int outstanding_repaints_; |
| 112 |
| 113 scoped_refptr<media::ChunkDemuxer> chunk_demuxer_; |
| 114 |
| 115 DISALLOW_IMPLICIT_CONSTRUCTORS(WebMediaPlayerProxy); |
| 116 }; |
| 117 |
| 118 } // namespace webkit_glue |
| 119 |
| 120 #endif // WEBKIT_GLUE_WEBMEDIAPLAYER_PROXY_H_ |
OLD | NEW |