blob: bd3f61100e84e225ddbce1eb4a69b375f379cf87 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "media/audio/audio_device_description.h"
#include <utility>
#include "base/bind.h"
#include "base/notreached.h"
#include "build/chromecast_buildflags.h"
#include "media/base/localized_strings.h"
namespace media {
const char AudioDeviceDescription::kDefaultDeviceId[] = "default";
const char AudioDeviceDescription::kCommunicationsDeviceId[] = "communications";
const char AudioDeviceDescription::kLoopbackInputDeviceId[] = "loopback";
const char AudioDeviceDescription::kLoopbackWithMuteDeviceId[] =
"loopbackWithMute";
// static
bool AudioDeviceDescription::IsDefaultDevice(const std::string& device_id) {
return device_id.empty() ||
device_id == AudioDeviceDescription::kDefaultDeviceId;
}
// static
bool AudioDeviceDescription::IsCommunicationsDevice(
const std::string& device_id) {
return device_id == AudioDeviceDescription::kCommunicationsDeviceId;
}
// static
bool AudioDeviceDescription::IsLoopbackDevice(const std::string& device_id) {
return device_id.compare(kLoopbackInputDeviceId) == 0 ||
device_id.compare(kLoopbackWithMuteDeviceId) == 0;
}
// static
bool AudioDeviceDescription::UseSessionIdToSelectDevice(
const base::UnguessableToken& session_id,
const std::string& device_id) {
return !session_id.is_empty() && device_id.empty();
}
// static
std::string AudioDeviceDescription::GetDefaultDeviceName() {
#if !defined(OS_IOS)
return GetLocalizedStringUTF8(DEFAULT_AUDIO_DEVICE_NAME);
#else
NOTREACHED();
return "";
#endif
}
// static
std::string AudioDeviceDescription::GetCommunicationsDeviceName() {
#if defined(OS_WIN)
return GetLocalizedStringUTF8(COMMUNICATIONS_AUDIO_DEVICE_NAME);
#elif BUILDFLAG(IS_CHROMECAST)
return "";
#else
NOTREACHED();
return "";
#endif
}
// static
std::string AudioDeviceDescription::GetDefaultDeviceName(
const std::string& real_device_name) {
if (real_device_name.empty())
return GetDefaultDeviceName();
// TODO(guidou): Put the names together in a localized manner.
// http://crbug.com/788767
return GetDefaultDeviceName() + " - " + real_device_name;
}
// static
std::string AudioDeviceDescription::GetCommunicationsDeviceName(
const std::string& real_device_name) {
if (real_device_name.empty())
return GetCommunicationsDeviceName();
// TODO(guidou): Put the names together in a localized manner.
// http://crbug.com/788767
return GetCommunicationsDeviceName() + " - " + real_device_name;
}
// static
void AudioDeviceDescription::LocalizeDeviceDescriptions(
AudioDeviceDescriptions* device_descriptions) {
for (auto& description : *device_descriptions) {
if (media::AudioDeviceDescription::IsDefaultDevice(description.unique_id)) {
description.device_name =
media::AudioDeviceDescription::GetDefaultDeviceName(
description.device_name);
} else if (media::AudioDeviceDescription::IsCommunicationsDevice(
description.unique_id)) {
description.device_name =
media::AudioDeviceDescription::GetCommunicationsDeviceName(
description.device_name);
}
}
}
AudioDeviceDescription::AudioDeviceDescription(std::string device_name,
std::string unique_id,
std::string group_id)
: device_name(std::move(device_name)),
unique_id(std::move(unique_id)),
group_id(std::move(group_id)) {}
} // namespace media