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 "base/macros.h" | 8 #include "base/macros.h" |
9 #include "base/memory/weak_ptr.h" | 9 #include "base/memory/weak_ptr.h" |
10 #include "media/base/renderer.h" | 10 #include "media/base/renderer.h" |
11 #include "media/mojo/interfaces/media_renderer.mojom.h" | 11 #include "media/mojo/interfaces/media_renderer.mojom.h" |
12 | 12 |
13 namespace base { | 13 namespace base { |
14 class SingleThreadTaskRunner; | 14 class SingleThreadTaskRunner; |
15 } | 15 } |
16 | 16 |
17 namespace mojo { | 17 namespace mojo { |
18 class ServiceProvider; | 18 class ServiceProvider; |
19 } | 19 } |
20 | 20 |
21 namespace media { | 21 namespace media { |
22 class DemuxerStreamProvider; | 22 class DemuxerStreamProvider; |
23 | 23 |
24 // A media::Renderer that proxies to a mojo::MediaRenderer. That | 24 // A media::Renderer that proxies to a mojo::MediaRenderer. That |
25 // mojo::MediaRenderer proxies back to the MojoRendererImpl via the | 25 // mojo::MediaRenderer proxies back to the MojoRendererImpl via the |
26 // mojo::MediaRendererClient interface. | 26 // mojo::MediaRendererClient interface. |
27 // | 27 // |
28 // MojoRendererImpl implements media::Renderer for use as either an audio | 28 // MojoRendererImpl implements media::Renderer for use as either an audio |
29 // or video renderer. | 29 // or video renderer. |
30 // | |
31 // TODO(tim): Only audio is currently supported. http://crbug.com/410451. | |
32 class MojoRendererImpl : public Renderer, public mojo::MediaRendererClient { | 30 class MojoRendererImpl : public Renderer, public mojo::MediaRendererClient { |
33 public: | 31 public: |
34 // |task_runner| is the TaskRunner on which all methods are invoked. | 32 // |task_runner| is the TaskRunner on which all methods are invoked. |
35 // |audio_renderer_provider| is a ServiceProvider from a connected | 33 // |media_renderer_provider| is a ServiceProvider from a connected |
36 // Application that is hosting a mojo::MediaRenderer. | 34 // Application that is hosting a mojo::MediaRenderer. |
37 MojoRendererImpl( | 35 MojoRendererImpl( |
38 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, | 36 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, |
39 mojo::ServiceProvider* audio_renderer_provider); | 37 mojo::ServiceProvider* media_renderer_provider); |
40 ~MojoRendererImpl() override; | 38 ~MojoRendererImpl() override; |
41 | 39 |
42 // Renderer implementation. | 40 // Renderer implementation. |
43 void Initialize(DemuxerStreamProvider* demuxer_stream_provider, | 41 void Initialize(DemuxerStreamProvider* demuxer_stream_provider, |
44 const base::Closure& init_cb, | 42 const base::Closure& init_cb, |
45 const StatisticsCB& statistics_cb, | 43 const StatisticsCB& statistics_cb, |
46 const BufferingStateCB& buffering_state_cb, | 44 const BufferingStateCB& buffering_state_cb, |
47 const PaintCB& paint_cb, | 45 const PaintCB& paint_cb, |
48 const base::Closure& ended_cb, | 46 const base::Closure& ended_cb, |
49 const PipelineStatusCB& error_cb) override; | 47 const PipelineStatusCB& error_cb) override; |
50 void Flush(const base::Closure& flush_cb) override; | 48 void Flush(const base::Closure& flush_cb) override; |
51 void StartPlayingFrom(base::TimeDelta time) override; | 49 void StartPlayingFrom(base::TimeDelta time) override; |
52 void SetPlaybackRate(float playback_rate) override; | 50 void SetPlaybackRate(float playback_rate) override; |
53 void SetVolume(float volume) override; | 51 void SetVolume(float volume) override; |
54 base::TimeDelta GetMediaTime() override; | 52 base::TimeDelta GetMediaTime() override; |
55 bool HasAudio() override; | 53 bool HasAudio() override; |
56 bool HasVideo() override; | 54 bool HasVideo() override; |
57 void SetCdm(MediaKeys* cdm) override; | 55 void SetCdm(MediaKeys* cdm) override; |
58 | 56 |
59 // mojo::MediaRendererClient implementation. | 57 // mojo::MediaRendererClient implementation. |
60 void OnTimeUpdate(int64_t time_usec, int64_t max_time_usec) override; | 58 void OnTimeUpdate(int64_t time_usec, int64_t max_time_usec) override; |
61 void OnBufferingStateChange(mojo::BufferingState state) override; | 59 void OnBufferingStateChange(mojo::BufferingState state) override; |
62 void OnEnded() override; | 60 void OnEnded() override; |
63 void OnError() override; | 61 void OnError() override; |
64 | 62 |
65 private: | 63 private: |
66 // Called when |remote_audio_renderer_| has finished initializing. | 64 // Called when |remote_media_renderer_| has finished initializing. |
67 void OnInitialized(); | 65 void OnInitialized(); |
68 | 66 |
69 // Task runner used to execute pipeline tasks. | 67 // Task runner used to execute pipeline tasks. |
70 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; | 68 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
71 | 69 |
72 DemuxerStreamProvider* demuxer_stream_provider_; | 70 DemuxerStreamProvider* demuxer_stream_provider_; |
73 mojo::MediaRendererPtr remote_audio_renderer_; | 71 mojo::MediaRendererPtr remote_media_renderer_; |
74 | 72 |
75 // Callbacks passed to Initialize() that we forward messages from | 73 // Callbacks passed to Initialize() that we forward messages from |
76 // |remote_audio_renderer_| through. | 74 // |remote_media_renderer_| through. |
77 base::Closure init_cb_; | 75 base::Closure init_cb_; |
78 base::Closure ended_cb_; | 76 base::Closure ended_cb_; |
79 PipelineStatusCB error_cb_; | 77 PipelineStatusCB error_cb_; |
80 BufferingStateCB buffering_state_cb_; | 78 BufferingStateCB buffering_state_cb_; |
81 | 79 |
82 // Lock used to serialize access for the following data members. | 80 // Lock used to serialize access for the following data members. |
83 mutable base::Lock lock_; | 81 mutable base::Lock lock_; |
84 | 82 |
85 base::TimeDelta time_; | 83 base::TimeDelta time_; |
86 // TODO(xhwang): It seems we don't need |max_time_| now. Drop it! | 84 // TODO(xhwang): It seems we don't need |max_time_| now. Drop it! |
87 base::TimeDelta max_time_; | 85 base::TimeDelta max_time_; |
88 | 86 |
89 base::WeakPtrFactory<MojoRendererImpl> weak_factory_; | 87 base::WeakPtrFactory<MojoRendererImpl> weak_factory_; |
90 | 88 |
91 DISALLOW_COPY_AND_ASSIGN(MojoRendererImpl); | 89 DISALLOW_COPY_AND_ASSIGN(MojoRendererImpl); |
92 }; | 90 }; |
93 | 91 |
94 } // namespace media | 92 } // namespace media |
95 | 93 |
96 #endif // MEDIA_MOJO_SERVICES_MOJO_RENDERER_IMPL_H_ | 94 #endif // MEDIA_MOJO_SERVICES_MOJO_RENDERER_IMPL_H_ |
OLD | NEW |