summaryrefslogtreecommitdiff
path: root/chromium/media/renderers/audio_renderer_impl.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-12 14:27:29 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-13 09:35:20 +0000
commitc30a6232df03e1efbd9f3b226777b07e087a1122 (patch)
treee992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/media/renderers/audio_renderer_impl.cc
parent7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff)
downloadqtwebengine-chromium-85-based.tar.gz
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/media/renderers/audio_renderer_impl.cc')
-rw-r--r--chromium/media/renderers/audio_renderer_impl.cc47
1 files changed, 44 insertions, 3 deletions
diff --git a/chromium/media/renderers/audio_renderer_impl.cc b/chromium/media/renderers/audio_renderer_impl.cc
index 95308f4a746..0c1e6b03bd9 100644
--- a/chromium/media/renderers/audio_renderer_impl.cc
+++ b/chromium/media/renderers/audio_renderer_impl.cc
@@ -48,7 +48,7 @@ AudioRendererImpl::AudioRendererImpl(
media::AudioRendererSink* sink,
const CreateAudioDecodersCB& create_audio_decoders_cb,
MediaLog* media_log,
- const TranscribeAudioCallback& transcribe_audio_callback)
+ SpeechRecognitionClient* speech_recognition_client)
: task_runner_(task_runner),
expecting_config_changes_(false),
sink_(sink),
@@ -70,8 +70,12 @@ AudioRendererImpl::AudioRendererImpl(
received_end_of_stream_(false),
rendered_end_of_stream_(false),
is_suspending_(false),
+#if defined(OS_ANDROID)
+ is_passthrough_(false) {
+#else
is_passthrough_(false),
- transcribe_audio_callback_(transcribe_audio_callback) {
+ speech_recognition_client_(speech_recognition_client) {
+#endif
DCHECK(create_audio_decoders_cb_);
// PowerObserver's must be added and removed from the same thread, but we
@@ -369,6 +373,14 @@ void AudioRendererImpl::Initialize(DemuxerStream* stream,
sink_->GetOutputDeviceInfoAsync(
base::BindOnce(&AudioRendererImpl::OnDeviceInfoReceived,
weak_factory_.GetWeakPtr(), demuxer_stream_, cdm_context));
+
+#if !defined(OS_ANDROID)
+ if (speech_recognition_client_) {
+ speech_recognition_client_->SetOnReadyCallback(
+ base::BindOnce(&AudioRendererImpl::EnableSpeechRecognition,
+ weak_factory_.GetWeakPtr()));
+ }
+#endif
}
void AudioRendererImpl::OnDeviceInfoReceived(
@@ -619,6 +631,8 @@ void AudioRendererImpl::OnAudioDecoderStreamInitialized(bool success) {
algorithm_->Initialize(audio_parameters_, is_encrypted_);
if (latency_hint_)
algorithm_->SetLatencyHint(latency_hint_);
+
+ algorithm_->SetPreservesPitch(preserves_pitch_);
ConfigureChannelMask();
ChangeState_Locked(kFlushed);
@@ -708,6 +722,15 @@ void AudioRendererImpl::SetLatencyHint(
}
}
+void AudioRendererImpl::SetPreservesPitch(bool preserves_pitch) {
+ base::AutoLock auto_lock(lock_);
+
+ preserves_pitch_ = preserves_pitch;
+
+ if (algorithm_)
+ algorithm_->SetPreservesPitch(preserves_pitch);
+}
+
void AudioRendererImpl::OnSuspend() {
base::AutoLock auto_lock(lock_);
is_suspending_ = true;
@@ -871,8 +894,10 @@ bool AudioRendererImpl::HandleDecodedBuffer_Locked(
if (first_packet_timestamp_ == kNoTimestamp)
first_packet_timestamp_ = buffer->timestamp();
- if (!transcribe_audio_callback_.is_null())
+#if !defined(OS_ANDROID)
+ if (transcribe_audio_callback_)
transcribe_audio_callback_.Run(buffer);
+#endif
if (state_ != kUninitialized)
algorithm_->EnqueueBuffer(std::move(buffer));
@@ -1281,4 +1306,20 @@ void AudioRendererImpl::ConfigureChannelMask() {
algorithm_->SetChannelMask(std::move(channel_mask));
}
+void AudioRendererImpl::EnableSpeechRecognition() {
+#if !defined(OS_ANDROID)
+ DCHECK(task_runner_->BelongsToCurrentThread());
+ transcribe_audio_callback_ = base::BindRepeating(
+ &AudioRendererImpl::TranscribeAudio, weak_factory_.GetWeakPtr());
+#endif
+}
+
+void AudioRendererImpl::TranscribeAudio(
+ scoped_refptr<media::AudioBuffer> buffer) {
+#if !defined(OS_ANDROID)
+ DCHECK(task_runner_->BelongsToCurrentThread());
+ if (speech_recognition_client_)
+ speech_recognition_client_->AddAudio(std::move(buffer));
+#endif
+}
} // namespace media