Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(113)

Side by Side Diff: media/mojo/services/mojo_renderer_service.h

Issue 551963004: media: scaffolding and plumbing for MojoRenderer{Impl, Service} (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: public_deps Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « media/mojo/services/mojo_renderer_impl.cc ('k') | media/mojo/services/mojo_renderer_service.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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_SERVICE_H_
6 #define MEDIA_MOJO_SERVICES_MOJO_RENDERER_SERVICE_H_
7
8 #include "base/callback.h"
9 #include "base/macros.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "base/memory/weak_ptr.h"
12 #include "media/base/audio_decoder_config.h"
13 #include "media/base/audio_hardware_config.h"
14 #include "media/base/buffering_state.h"
15 #include "media/base/pipeline_status.h"
16 #include "media/mojo/interfaces/media_renderer.mojom.h"
17 #include "mojo/public/cpp/bindings/interface_impl.h"
18
19 namespace mojo {
20 class ApplicationConnection;
21 }
22
23 namespace media {
24
25 class AudioRenderer;
26 class MojoDemuxerStreamAdapter;
27
28 // A mojo::MediaRenderer implementation that uses media::AudioRenderer to
29 // decode and render audio to a sink obtained from the ApplicationConnection.
30 class MojoRendererService : public mojo::InterfaceImpl<mojo::MediaRenderer> {
31 public:
32 // |connection| is a pointer to the connection back to our embedder. The
33 // embedder should have configured it (via ConfigureOutgoingConnection) to
34 // allow |this| to connect to a sink that will receive decoded data ready
35 // for playback.
36 explicit MojoRendererService(mojo::ApplicationConnection* connection);
37 virtual ~MojoRendererService();
38
39 // mojo::MediaRenderer implementation.
40 virtual void Initialize(mojo::DemuxerStreamPtr stream,
41 const mojo::Callback<void()>& callback) MOJO_OVERRIDE;
42 virtual void Flush(const mojo::Callback<void()>& callback) MOJO_OVERRIDE;
43 virtual void StartPlayingFrom(int64_t time_delta_usec) MOJO_OVERRIDE;
44 virtual void SetPlaybackRate(float playback_rate) MOJO_OVERRIDE;
45 virtual void SetVolume(float volume) MOJO_OVERRIDE;
46
47 private:
48 // Called when the MojoDemuxerStreamAdapter is ready to go (has a config,
49 // pipe handle, etc) and can be handed off to a renderer for use.
50 void OnStreamReady();
51
52 // Called when |audio_renderer_| initialization has completed.
53 void OnAudioRendererInitializeDone(PipelineStatus status);
54
55 // Callback executed by filters to update statistics.
56 void OnUpdateStatistics(const PipelineStatistics& stats);
57
58 // Callback executed by audio renderer to update clock time.
59 void OnAudioTimeUpdate(base::TimeDelta time, base::TimeDelta max_time);
60
61 // Callback executed by audio renderer when buffering state changes.
62 // TODO(tim): Need old and new.
63 void OnBufferingStateChanged(BufferingState new_buffering_state);
64
65 // Callback executed when a renderer has ended.
66 void OnAudioRendererEnded();
67
68 // Callback executed when a runtime error happens.
69 void OnError(PipelineStatus error);
70
71 scoped_ptr<MojoDemuxerStreamAdapter> stream_;
72 scoped_ptr<AudioRenderer> audio_renderer_;
73
74 mojo::Callback<void()> init_cb_;
75
76 // TODO(tim): Figure out how to set up hardware config.
77 // NOTE: AudioRendererImpl stores a const& to the config we pass in (hmm..).
78 // Hence stack-allocating one and passing it to Initialize results in
79 // undefined badness (e.g, hangs trying to acquire config_lock_);
80 media::AudioHardwareConfig hardware_config_;
81
82 base::WeakPtrFactory<MojoRendererService> weak_factory_;
83 base::WeakPtr<MojoRendererService> weak_this_;
84 DISALLOW_COPY_AND_ASSIGN(MojoRendererService);
85 };
86
87 } // namespace media
88
89 #endif // MEDIA_MOJO_SERVICES_MOJO_RENDERER_SERVICE_H_
OLDNEW
« no previous file with comments | « media/mojo/services/mojo_renderer_impl.cc ('k') | media/mojo/services/mojo_renderer_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698