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

Side by Side Diff: media/mojo/services/mojo_audio_renderer_sink_adapter.cc

Issue 2640003002: Implement MojoAudioRendererSink and use it in UtilityMojoMediaClient (Closed)
Patch Set: Rebase Created 3 years, 10 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
OLDNEW
(Empty)
1 // Copyright 2017 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 #include "media/mojo/services/mojo_audio_renderer_sink_adapter.h"
6
7 #include "media/mojo/common/media_type_converters.h"
8
9 namespace media {
10
11 MojoAudioRendererSinkAdapter::MojoAudioRendererSinkAdapter(
12 const std::string& audio_device_id)
13 : binding_(this),
14 task_runner_(base::ThreadTaskRunnerHandle::Get()),
15 audio_device_id_(audio_device_id),
16 started_(false),
17 render_callback_(nullptr) {}
18
19 MojoAudioRendererSinkAdapter::~MojoAudioRendererSinkAdapter() {}
20
21 void MojoAudioRendererSinkAdapter::SetClient(mojom::AudioRendererSinkPtr sink) {
22 sink_ = std::move(sink);
23 }
24
25 void MojoAudioRendererSinkAdapter::Initialize(
26 const media::AudioParameters& params,
27 media::AudioRendererSink::RenderCallback* callback) {
28 CHECK(task_runner_->BelongsToCurrentThread());
29 CHECK(!started_);
30 audio_bus_ = AudioBus::Create(params);
31 render_callback_ = callback;
32
33 mojom::AudioRendererSinkRenderCallbackPtr render_callback_ptr;
34 if (!binding_.is_bound())
35 binding_.Bind(MakeRequest(&render_callback_ptr));
36
37 sink_->Initialize(params, std::move(render_callback_ptr));
38 }
39
40 void MojoAudioRendererSinkAdapter::Start() {
41 CHECK(!started_);
42 started_ = true;
43 sink_->Start();
44 }
45
46 void MojoAudioRendererSinkAdapter::Stop() {
47 CHECK(started_);
48 started_ = false;
49 sink_->Stop();
50 }
51
52 void MojoAudioRendererSinkAdapter::Pause() {
53 sink_->Pause();
54 }
55
56 void MojoAudioRendererSinkAdapter::Play() {
57 sink_->Play();
58 }
59
60 bool MojoAudioRendererSinkAdapter::SetVolume(double volume) {
61 bool success = false;
62 sink_->SetVolume(volume, &success);
63 return success;
64 }
65
66 media::OutputDeviceInfo MojoAudioRendererSinkAdapter::GetOutputDeviceInfo() {
67 media::OutputDeviceInfo info;
68 sink_->GetOutputDeviceInfo(&info);
69 return info;
70 }
71
72 bool MojoAudioRendererSinkAdapter::CurrentThreadIsRenderingThread() {
73 bool is_rendering_thread = false;
74 sink_->CurrentThreadIsRenderingThread(&is_rendering_thread);
75 return is_rendering_thread;
76 }
77
78 void MojoAudioRendererSinkAdapter::Render(
79 base::TimeDelta delay,
80 base::TimeTicks delay_timestamp,
81 int prior_frames_skipped,
82 const media::mojom::AudioRendererSinkRenderCallback::RenderCallback&
83 mojo_callback) {
84 CHECK(task_runner_->BelongsToCurrentThread());
85
86 if (!started_) {
87 mojo_callback.Run(0, nullptr);
88 return;
89 }
90
91 int nb_filled_frames = render_callback_->Render(
92 delay, delay_timestamp, prior_frames_skipped, audio_bus_.get());
93
94 // TODO(j.isorce): consider using AudioInputSyncWriter once it is mojified.
95 mojo_callback.Run(nb_filled_frames, mojom::AudioBus::From(*audio_bus_.get()));
96 }
97
98 void MojoAudioRendererSinkAdapter::OnRenderError() {
99 render_callback_->OnRenderError();
100 }
101
102 } // namespace media
OLDNEW
« no previous file with comments | « media/mojo/services/mojo_audio_renderer_sink_adapter.h ('k') | media/mojo/services/mojo_renderer_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698