| OLD | NEW |
| (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 |
| OLD | NEW |