Delete chrome.mediaGalleriesPrivate because the functionality unique to it has since...
[chromium-blink-merge.git] / media / mojo / services / mojo_renderer_impl.h
blobbd6a6076c24f950556d100cf68e7ad1b272219eb
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.
5 #ifndef MEDIA_MOJO_SERVICES_MOJO_RENDERER_IMPL_H_
6 #define MEDIA_MOJO_SERVICES_MOJO_RENDERER_IMPL_H_
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"
13 namespace base {
14 class SingleThreadTaskRunner;
17 namespace media {
19 class DemuxerStreamProvider;
21 // A media::Renderer that proxies to a mojo::MediaRenderer. That
22 // mojo::MediaRenderer proxies back to the MojoRendererImpl via the
23 // mojo::MediaRendererClient interface.
25 // MojoRendererImpl implements media::Renderer for use as either an audio
26 // or video renderer.
27 class MojoRendererImpl : public Renderer, public mojo::MediaRendererClient {
28 public:
29 // |task_runner| is the TaskRunner on which all methods are invoked.
30 MojoRendererImpl(
31 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
32 mojo::MediaRendererPtr remote_media_renderer);
33 ~MojoRendererImpl() override;
35 // Renderer implementation.
36 void Initialize(DemuxerStreamProvider* demuxer_stream_provider,
37 const base::Closure& init_cb,
38 const StatisticsCB& statistics_cb,
39 const BufferingStateCB& buffering_state_cb,
40 const PaintCB& paint_cb,
41 const base::Closure& ended_cb,
42 const PipelineStatusCB& error_cb) override;
43 void SetCdm(CdmContext* cdm_context,
44 const CdmAttachedCB& cdm_attached_cb) override;
45 void Flush(const base::Closure& flush_cb) override;
46 void StartPlayingFrom(base::TimeDelta time) override;
47 void SetPlaybackRate(float playback_rate) override;
48 void SetVolume(float volume) override;
49 base::TimeDelta GetMediaTime() override;
50 bool HasAudio() override;
51 bool HasVideo() override;
53 // mojo::MediaRendererClient implementation.
54 void OnTimeUpdate(int64_t time_usec, int64_t max_time_usec) override;
55 void OnBufferingStateChange(mojo::BufferingState state) override;
56 void OnEnded() override;
57 void OnError() override;
59 private:
60 // Called when |remote_media_renderer_| has finished initializing.
61 void OnInitialized();
63 // Task runner used to execute pipeline tasks.
64 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
66 DemuxerStreamProvider* demuxer_stream_provider_;
67 mojo::MediaRendererPtr remote_media_renderer_;
69 // Store a handle to the mojo message pipe. This object
70 // temporary and is used as a springboard so that the
71 // |remote_media_renderer_| can be constructed on the
72 // correct thread.
73 mojo::ScopedMessagePipeHandle remote_media_renderer_pipe_;
75 // Callbacks passed to Initialize() that we forward messages from
76 // |remote_media_renderer_| through.
77 base::Closure init_cb_;
78 base::Closure ended_cb_;
79 PipelineStatusCB error_cb_;
80 BufferingStateCB buffering_state_cb_;
82 // Lock used to serialize access for the following data members.
83 mutable base::Lock lock_;
85 base::TimeDelta time_;
86 // TODO(xhwang): It seems we don't need |max_time_| now. Drop it!
87 base::TimeDelta max_time_;
89 base::WeakPtrFactory<MojoRendererImpl> weak_factory_;
91 DISALLOW_COPY_AND_ASSIGN(MojoRendererImpl);
94 } // namespace media
96 #endif // MEDIA_MOJO_SERVICES_MOJO_RENDERER_IMPL_H_