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 3 // found in the LICENSE file. 4 5 #ifndef MEDIA_MOJO_SERVICES_MOJO_RENDERER_IMPL_H_ 6 #define MEDIA_MOJO_SERVICES_MOJO_RENDERER_IMPL_H_ 7 8 #include "base/macros.h" 9 #include "base/memory/weak_ptr.h" 10 #include "media/base/renderer.h" 11 #include "media/mojo/interfaces/media_renderer.mojom.h" 12 13 namespace base { 14 class SingleThreadTaskRunner; 15 } 16 17 namespace mojo { 18 class ServiceProvider; 19 } 20 21 namespace media { 22 class DemuxerStreamProvider; 23 24 // A media::Renderer that proxies to a mojo::MediaRenderer. That 25 // mojo::MediaRenderer proxies back to the MojoRendererImpl via the 26 // mojo::MediaRendererClient interface. 27 // 28 // MojoRendererImpl implements media::Renderer for use as either an audio 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 { 33 public: 34 // |task_runner| is the TaskRunner on which all methods are invoked. 35 // |demuxer_stream_provider| provides encoded streams for decoding and 36 // rendering. 37 // |audio_renderer_provider| is a ServiceProvider from a connected 38 // Application that is hosting a mojo::MediaRenderer. 39 MojoRendererImpl( 40 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 41 DemuxerStreamProvider* demuxer_stream_provider, 42 mojo::ServiceProvider* audio_renderer_provider); 43 virtual ~MojoRendererImpl(); 44 45 // Renderer implementation. 46 virtual void Initialize(const base::Closure& init_cb, 47 const StatisticsCB& statistics_cb, 48 const base::Closure& ended_cb, 49 const PipelineStatusCB& error_cb, 50 const BufferingStateCB& buffering_state_cb) OVERRIDE; 51 virtual void Flush(const base::Closure& flush_cb) OVERRIDE; 52 virtual void StartPlayingFrom(base::TimeDelta time) OVERRIDE; 53 virtual void SetPlaybackRate(float playback_rate) OVERRIDE; 54 virtual void SetVolume(float volume) OVERRIDE; 55 virtual base::TimeDelta GetMediaTime() OVERRIDE; 56 virtual bool HasAudio() OVERRIDE; 57 virtual bool HasVideo() OVERRIDE; 58 virtual void SetCdm(MediaKeys* cdm) OVERRIDE; 59 60 // mojo::MediaRendererClient implementation. 61 virtual void OnTimeUpdate(int64_t time_usec, 62 int64_t max_time_usec) MOJO_OVERRIDE; 63 virtual void OnBufferingStateChange(mojo::BufferingState state) MOJO_OVERRIDE; 64 virtual void OnEnded() MOJO_OVERRIDE; 65 virtual void OnError() MOJO_OVERRIDE; 66 67 private: 68 // Called when |remote_audio_renderer_| has finished initializing. 69 void OnInitialized(); 70 71 // Task runner used to execute pipeline tasks. 72 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 73 74 DemuxerStreamProvider* demuxer_stream_provider_; 75 mojo::MediaRendererPtr remote_audio_renderer_; 76 77 // Callbacks passed to Initialize() that we forward messages from 78 // |remote_audio_renderer_| through. 79 base::Closure init_cb_; 80 base::Closure ended_cb_; 81 PipelineStatusCB error_cb_; 82 BufferingStateCB buffering_state_cb_; 83 84 base::WeakPtrFactory<MojoRendererImpl> weak_factory_; 85 DISALLOW_COPY_AND_ASSIGN(MojoRendererImpl); 86 }; 87 88 } // namespace media 89 90 #endif // MEDIA_MOJO_SERVICES_MOJO_RENDERER_IMPL_H_ 91