OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 MEDIA_MOJO_SERVICES_MOJO_RENDERER_IMPL_H_ | 5 #ifndef MEDIA_MOJO_SERVICES_MOJO_RENDERER_IMPL_H_ |
6 #define MEDIA_MOJO_SERVICES_MOJO_RENDERER_IMPL_H_ | 6 #define MEDIA_MOJO_SERVICES_MOJO_RENDERER_IMPL_H_ |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
11 #include "media/base/renderer.h" | 11 #include "media/base/renderer.h" |
12 #include "media/mojo/interfaces/renderer.mojom.h" | 12 #include "media/mojo/interfaces/renderer.mojom.h" |
13 #include "mojo/public/cpp/bindings/binding.h" | 13 #include "mojo/public/cpp/bindings/binding.h" |
14 | 14 |
15 namespace base { | 15 namespace base { |
16 class SingleThreadTaskRunner; | 16 class SingleThreadTaskRunner; |
17 } | 17 } |
18 | 18 |
19 namespace media { | 19 namespace media { |
20 | 20 |
21 class DemuxerStreamProvider; | 21 class DemuxerStreamProvider; |
| 22 class GpuVideoAcceleratorFactories; |
| 23 class VideoOverlayFactory; |
| 24 class VideoRendererSink; |
22 | 25 |
23 // A media::Renderer that proxies to a interfaces::Renderer. That | 26 // A media::Renderer that proxies to a interfaces::Renderer. That |
24 // interfaces::Renderer proxies back to the MojoRendererImpl via the | 27 // interfaces::Renderer proxies back to the MojoRendererImpl via the |
25 // interfaces::RendererClient interface. | 28 // interfaces::RendererClient interface. |
26 // | 29 // |
27 // This class can be created on any thread, where the |remote_renderer| is | 30 // This class can be created on any thread, where the |remote_renderer| is |
28 // connected and passed in the constructor. Then Initialize() will be called on | 31 // connected and passed in the constructor. Then Initialize() will be called on |
29 // the |task_runner| and starting from that point this class is bound to the | 32 // the |task_runner| and starting from that point this class is bound to the |
30 // |task_runner|*. That means all Renderer and RendererClient methods will be | 33 // |task_runner|*. That means all Renderer and RendererClient methods will be |
31 // called/dispached on the |task_runner|. The only exception is GetMediaTime(), | 34 // called/dispached on the |task_runner|. The only exception is GetMediaTime(), |
32 // which can be called on any thread. | 35 // which can be called on any thread. |
33 class MojoRendererImpl : public Renderer, public interfaces::RendererClient { | 36 class MojoRendererImpl : public Renderer, public interfaces::RendererClient { |
34 public: | 37 public: |
35 MojoRendererImpl( | 38 MojoRendererImpl( |
36 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, | 39 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, |
| 40 VideoRendererSink* video_renderer_sink, |
| 41 GpuVideoAcceleratorFactories* gpu_factories, |
37 interfaces::RendererPtr remote_renderer); | 42 interfaces::RendererPtr remote_renderer); |
38 ~MojoRendererImpl() override; | 43 ~MojoRendererImpl() override; |
39 | 44 |
40 // Renderer implementation. | 45 // Renderer implementation. |
41 void Initialize(DemuxerStreamProvider* demuxer_stream_provider, | 46 void Initialize(DemuxerStreamProvider* demuxer_stream_provider, |
42 const PipelineStatusCB& init_cb, | 47 const PipelineStatusCB& init_cb, |
43 const StatisticsCB& statistics_cb, | 48 const StatisticsCB& statistics_cb, |
44 const BufferingStateCB& buffering_state_cb, | 49 const BufferingStateCB& buffering_state_cb, |
| 50 const NaturalSizeChangedCB& natural_size_changed_cb, |
45 const base::Closure& ended_cb, | 51 const base::Closure& ended_cb, |
46 const PipelineStatusCB& error_cb, | 52 const PipelineStatusCB& error_cb, |
47 const base::Closure& waiting_for_decryption_key_cb) override; | 53 const base::Closure& waiting_for_decryption_key_cb) override; |
48 void SetCdm(CdmContext* cdm_context, | 54 void SetCdm(CdmContext* cdm_context, |
49 const CdmAttachedCB& cdm_attached_cb) override; | 55 const CdmAttachedCB& cdm_attached_cb) override; |
50 void Flush(const base::Closure& flush_cb) override; | 56 void Flush(const base::Closure& flush_cb) override; |
51 void StartPlayingFrom(base::TimeDelta time) override; | 57 void StartPlayingFrom(base::TimeDelta time) override; |
52 void SetPlaybackRate(double playback_rate) override; | 58 void SetPlaybackRate(double playback_rate) override; |
53 void SetVolume(float volume) override; | 59 void SetVolume(float volume) override; |
54 base::TimeDelta GetMediaTime() override; | 60 base::TimeDelta GetMediaTime() override; |
55 bool HasAudio() override; | 61 bool HasAudio() override; |
56 bool HasVideo() override; | 62 bool HasVideo() override; |
57 | 63 |
58 private: | 64 private: |
59 // interfaces::RendererClient implementation, dispatched on the | 65 // interfaces::RendererClient implementation, dispatched on the |
60 // |task_runner_|. | 66 // |task_runner_|. |
61 void OnTimeUpdate(int64_t time_usec, int64_t max_time_usec) override; | 67 void OnTimeUpdate(int64_t time_usec, int64_t max_time_usec) override; |
62 void OnBufferingStateChange(interfaces::BufferingState state) override; | 68 void OnBufferingStateChange(interfaces::BufferingState state) override; |
| 69 void OnNaturalSizeChanged(mojo::SizePtr size) override; |
63 void OnEnded() override; | 70 void OnEnded() override; |
64 void OnError() override; | 71 void OnError() override; |
65 | 72 |
66 // Callback for connection error on |remote_renderer_|. | 73 // Callback for connection error on |remote_renderer_|. |
67 void OnConnectionError(); | 74 void OnConnectionError(); |
68 | 75 |
69 // Called when |remote_renderer_| has finished initializing. | 76 // Called when |remote_renderer_| has finished initializing. |
70 void OnInitialized(bool success); | 77 void OnInitialized(bool success); |
71 | 78 |
72 // |task_runner| on which all methods are invoked, except for GetMediaTime(), | 79 // |task_runner| on which all methods are invoked, except for GetMediaTime(), |
73 // which can be called on any thread. | 80 // which can be called on any thread. |
74 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; | 81 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
| 82 VideoRendererSink* video_renderer_sink_; |
| 83 GpuVideoAcceleratorFactories* gpu_factories_; |
75 | 84 |
76 // Provider of audio/video DemuxerStreams. Must be valid throughout the | 85 // Provider of audio/video DemuxerStreams. Must be valid throughout the |
77 // lifetime of |this|. | 86 // lifetime of |this|. |
78 DemuxerStreamProvider* demuxer_stream_provider_; | 87 DemuxerStreamProvider* demuxer_stream_provider_; |
79 | 88 |
80 // This class is constructed on one thread and used exclusively on another | 89 // This class is constructed on one thread and used exclusively on another |
81 // thread. This member is used to safely pass the RendererPtr from one thread | 90 // thread. This member is used to safely pass the RendererPtr from one thread |
82 // to another. It is set in the constructor and is consumed in Initialize(). | 91 // to another. It is set in the constructor and is consumed in Initialize(). |
83 interfaces::RendererPtrInfo remote_renderer_info_; | 92 interfaces::RendererPtrInfo remote_renderer_info_; |
84 | 93 |
85 // Remote Renderer, bound to |task_runner_| during Initialize(). | 94 // Remote Renderer, bound to |task_runner_| during Initialize(). |
86 interfaces::RendererPtr remote_renderer_; | 95 interfaces::RendererPtr remote_renderer_; |
87 | 96 |
88 // Binding for RendererClient, bound to the |task_runner_|. | 97 // Binding for RendererClient, bound to the |task_runner_|. |
89 mojo::Binding<RendererClient> binding_; | 98 mojo::Binding<RendererClient> binding_; |
90 | 99 |
91 // Callbacks passed to Initialize() that we forward messages from | 100 // Callbacks passed to Initialize() that we forward messages from |
92 // |remote_renderer_| through. | 101 // |remote_renderer_| through. |
93 PipelineStatusCB init_cb_; | 102 PipelineStatusCB init_cb_; |
94 base::Closure ended_cb_; | 103 base::Closure ended_cb_; |
95 PipelineStatusCB error_cb_; | 104 PipelineStatusCB error_cb_; |
96 BufferingStateCB buffering_state_cb_; | 105 BufferingStateCB buffering_state_cb_; |
| 106 NaturalSizeChangedCB natural_size_changed_cb_; |
97 | 107 |
98 // Lock used to serialize access for |time_|. | 108 // Lock used to serialize access for |time_|. |
99 mutable base::Lock lock_; | 109 mutable base::Lock lock_; |
100 base::TimeDelta time_; | 110 base::TimeDelta time_; |
101 | 111 |
| 112 scoped_ptr<VideoOverlayFactory> video_overlay_factory_; |
| 113 |
102 DISALLOW_COPY_AND_ASSIGN(MojoRendererImpl); | 114 DISALLOW_COPY_AND_ASSIGN(MojoRendererImpl); |
103 }; | 115 }; |
104 | 116 |
105 } // namespace media | 117 } // namespace media |
106 | 118 |
107 #endif // MEDIA_MOJO_SERVICES_MOJO_RENDERER_IMPL_H_ | 119 #endif // MEDIA_MOJO_SERVICES_MOJO_RENDERER_IMPL_H_ |
OLD | NEW |