Commit 8b1243a3 authored by Yuchen Liu's avatar Yuchen Liu Committed by Commit Bot

[Chromecast] Use Chrome audio output for video stream

Use Chrome's audio output for video stream, since it has a better av
sync performance.

AUDIO_PREFETCH is disabled for video stream. CastAudioManagerAndroid
uses that to determine which AudioOutputStream to use.

Bug: internal b/160753974
Test: Build, cast video and audio only app
Change-Id: I3d2fed2ba5902180a5c9f344390318e47a11e486
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2339448
Auto-Submit: Yuchen Liu <yucliu@chromium.org>
Commit-Queue: Kenneth MacKay <kmackay@chromium.org>
Reviewed-by: default avatarKenneth MacKay <kmackay@chromium.org>
Cr-Commit-Position: refs/heads/master@{#795758}
parent 50853a6a
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
namespace chromecast { namespace chromecast {
namespace media { namespace media {
namespace {
const int kDefaultSampleRate = 48000; const int kDefaultSampleRate = 48000;
const int kDefaultInputBufferSize = 1024; const int kDefaultInputBufferSize = 1024;
...@@ -26,6 +27,12 @@ const int kCommunicationsSampleRate = 16000; ...@@ -26,6 +27,12 @@ const int kCommunicationsSampleRate = 16000;
const int kCommunicationsInputBufferSize = 160; // 10 ms. const int kCommunicationsInputBufferSize = 160; // 10 ms.
#endif // BUILDFLAG(ENABLE_AUDIO_CAPTURE_SERVICE) #endif // BUILDFLAG(ENABLE_AUDIO_CAPTURE_SERVICE)
bool ShouldUseCastAudioOutputStream(const ::media::AudioParameters& params) {
return params.effects() & ::media::AudioParameters::AUDIO_PREFETCH;
}
} // namespace
CastAudioManagerAndroid::CastAudioManagerAndroid( CastAudioManagerAndroid::CastAudioManagerAndroid(
std::unique_ptr<::media::AudioThread> audio_thread, std::unique_ptr<::media::AudioThread> audio_thread,
::media::AudioLogFactory* audio_log_factory, ::media::AudioLogFactory* audio_log_factory,
...@@ -120,9 +127,14 @@ void CastAudioManagerAndroid::GetAudioOutputDeviceNames( ...@@ -120,9 +127,14 @@ void CastAudioManagerAndroid::GetAudioOutputDeviceNames(
const ::media::AudioManager::LogCallback& log_callback) { const ::media::AudioManager::LogCallback& log_callback) {
DCHECK_EQ(::media::AudioParameters::AUDIO_PCM_LINEAR, params.format()); DCHECK_EQ(::media::AudioParameters::AUDIO_PCM_LINEAR, params.format());
return new CastAudioOutputStream( if (ShouldUseCastAudioOutputStream(params)) {
&helper_, params, ::media::AudioDeviceDescription::kDefaultDeviceId, return new CastAudioOutputStream(
false /* use_mixer_service */); &helper_, params, ::media::AudioDeviceDescription::kDefaultDeviceId,
false /* use_mixer_service */);
}
return ::media::AudioManagerAndroid::MakeLinearOutputStream(params,
log_callback);
} }
::media::AudioOutputStream* CastAudioManagerAndroid::MakeLowLatencyOutputStream( ::media::AudioOutputStream* CastAudioManagerAndroid::MakeLowLatencyOutputStream(
...@@ -131,12 +143,17 @@ void CastAudioManagerAndroid::GetAudioOutputDeviceNames( ...@@ -131,12 +143,17 @@ void CastAudioManagerAndroid::GetAudioOutputDeviceNames(
const ::media::AudioManager::LogCallback& log_callback) { const ::media::AudioManager::LogCallback& log_callback) {
DCHECK_EQ(::media::AudioParameters::AUDIO_PCM_LOW_LATENCY, params.format()); DCHECK_EQ(::media::AudioParameters::AUDIO_PCM_LOW_LATENCY, params.format());
return new CastAudioOutputStream( if (ShouldUseCastAudioOutputStream(params)) {
&helper_, params, return new CastAudioOutputStream(
device_id_or_group_id.empty() &helper_, params,
? ::media::AudioDeviceDescription::kDefaultDeviceId device_id_or_group_id.empty()
: device_id_or_group_id, ? ::media::AudioDeviceDescription::kDefaultDeviceId
false /* use_mixer_service */); : device_id_or_group_id,
false /* use_mixer_service */);
}
return ::media::AudioManagerAndroid::MakeLowLatencyOutputStream(
params, device_id_or_group_id, log_callback);
} }
::media::AudioOutputStream* CastAudioManagerAndroid::MakeBitstreamOutputStream( ::media::AudioOutputStream* CastAudioManagerAndroid::MakeBitstreamOutputStream(
...@@ -150,10 +167,15 @@ void CastAudioManagerAndroid::GetAudioOutputDeviceNames( ...@@ -150,10 +167,15 @@ void CastAudioManagerAndroid::GetAudioOutputDeviceNames(
::media::AudioOutputStream* CastAudioManagerAndroid::MakeAudioOutputStreamProxy( ::media::AudioOutputStream* CastAudioManagerAndroid::MakeAudioOutputStreamProxy(
const ::media::AudioParameters& params, const ::media::AudioParameters& params,
const std::string& device_id) { const std::string& device_id) {
// Override to use MakeAudioOutputStream to prevent the audio output stream if (ShouldUseCastAudioOutputStream(params)) {
// from closing during pause/stop. // Override to use MakeAudioOutputStream to prevent the audio output stream
return MakeAudioOutputStream(params, device_id, // from closing during pause/stop.
/*log_callback, not used*/ base::DoNothing()); return MakeAudioOutputStream(params, device_id,
/*log_callback, not used*/ base::DoNothing());
}
return ::media::AudioManagerAndroid::MakeAudioOutputStreamProxy(params,
device_id);
} }
} // namespace media } // namespace media
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment