#include "content/public/browser/audio_service.h"
#include "base/command_line.h"
#include "base/metrics/field_trial_params.h"
#include "base/strings/strcat.h"
#include "base/strings/string_number_conversions.h"
#include "base/task/deferred_sequenced_task_runner.h"
#include "base/threading/sequence_local_storage_slot.h"
#include "base/time/time.h"
#include "build/build_config.h"
#include "content/browser/browser_main_loop.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/service_process_host.h"
#include "content/public/common/content_client.h"
#include "content/public/common/content_features.h"
#include "content/public/common/content_switches.h"
#include "media/audio/audio_manager.h"
#include "media/base/media_switches.h"
#include "media/media_buildflags.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "services/audio/public/cpp/audio_system_to_service_adapter.h"
#include "services/audio/public/mojom/audio_service.mojom.h"
#include "services/audio/service.h"
#include "services/audio/service_factory.h"
#if BUILDFLAG(ENABLE_PASSTHROUGH_AUDIO_CODECS)
#include "ui/display/util/edid_parser.h"
#if BUILDFLAG(IS_LINUX)
#include "ui/display/display_util.h"
#endif
#if BUILDFLAG(IS_WIN)
#include "ui/display/win/audio_edid_scan.h"
#endif
#endif
namespace content {
namespace {
audio::mojom::AudioService* g_service_override = …;
bool IsAudioServiceOutOfProcess() { … }
void BindSystemInfoFromAnySequence(
mojo::PendingReceiver<audio::mojom::SystemInfo> receiver) { … }
void BindStreamFactoryFromAnySequence(
mojo::PendingReceiver<media::mojom::AudioStreamFactory> receiver) { … }
void LaunchAudioServiceInProcess(
mojo::PendingReceiver<audio::mojom::AudioService> receiver) { … }
void LaunchAudioServiceOutOfProcess(
mojo::PendingReceiver<audio::mojom::AudioService> receiver,
uint32_t codec_bitmask) { … }
void LaunchAudioService(
mojo::PendingReceiver<audio::mojom::AudioService> receiver,
uint32_t codec_bitmask) { … }
#if BUILDFLAG(ENABLE_PASSTHROUGH_AUDIO_CODECS)
uint32_t ConvertEdidBitstreams(uint32_t formats) {
uint32_t codec_bitmask = 0;
if (formats & display::EdidParser::kAudioBitstreamPcmLinear)
codec_bitmask |= media::AudioParameters::AUDIO_PCM_LINEAR;
if (formats & display::EdidParser::kAudioBitstreamDts)
codec_bitmask |= media::AudioParameters::AUDIO_BITSTREAM_DTS;
if (formats & display::EdidParser::kAudioBitstreamDtsHd)
codec_bitmask |= media::AudioParameters::AUDIO_BITSTREAM_DTS_HD;
return codec_bitmask;
}
#if BUILDFLAG(IS_WIN)
uint32_t ScanEdidBitstreams() {
return ConvertEdidBitstreams(display::win::ScanEdidBitstreams());
}
#endif
#endif
}
audio::mojom::AudioService& GetAudioService() { … }
base::AutoReset<audio::mojom::AudioService*>
OverrideAudioServiceForTesting(
audio::mojom::AudioService* service) { … }
std::unique_ptr<media::AudioSystem> CreateAudioSystemForAudioService() { … }
AudioServiceStreamFactoryBinder GetAudioServiceStreamFactoryBinder() { … }
}