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 13namespace base { 14class SingleThreadTaskRunner; 15} 16 17namespace mojo { 18class ServiceProvider; 19} 20 21namespace media { 22class 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. 32class 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