Bug 1367646 - Update WebRTC with cubeb_device_collection changes. r+jesup r=jesup,kinetik

MozReview-Commit-ID: 3llJO2vWPJh

--HG--
extra : rebase_source : 70ef5201d310b1b034c24070c572e26a001e24a5
This commit is contained in:
Dan Glastonbury 2017-05-25 15:28:24 +10:00
parent 9224fdaf13
commit 4b414a3c6c
2 changed files with 21 additions and 27 deletions

View File

@ -38,7 +38,7 @@ namespace mozilla {
nsTArray<int>* AudioInputCubeb::mDeviceIndexes;
int AudioInputCubeb::mDefaultDevice = -1;
nsTArray<nsCString>* AudioInputCubeb::mDeviceNames;
cubeb_device_collection* AudioInputCubeb::mDevices = nullptr;
cubeb_device_collection AudioInputCubeb::mDevices = { nullptr, 0 };
bool AudioInputCubeb::mAnyInUse = false;
StaticMutex AudioInputCubeb::sMutex;
@ -52,7 +52,7 @@ void AudioInputCubeb::UpdateDeviceList()
return;
}
cubeb_device_collection *devices = nullptr;
cubeb_device_collection devices = { nullptr, 0 };
if (CUBEB_OK != cubeb_enumerate_devices(cubebContext,
CUBEB_DEVICE_TYPE_INPUT,
@ -71,27 +71,27 @@ void AudioInputCubeb::UpdateDeviceList()
// For some reason the "fake" device for automation is marked as DISABLED,
// so white-list it.
mDefaultDevice = -1;
for (uint32_t i = 0; i < devices->count; i++) {
for (uint32_t i = 0; i < devices.count; i++) {
LOG(("Cubeb device %u: type 0x%x, state 0x%x, name %s, id %p",
i, devices->device[i]->type, devices->device[i]->state,
devices->device[i]->friendly_name, devices->device[i]->device_id));
if (devices->device[i]->type == CUBEB_DEVICE_TYPE_INPUT && // paranoia
(devices->device[i]->state == CUBEB_DEVICE_STATE_ENABLED ||
(devices->device[i]->state == CUBEB_DEVICE_STATE_DISABLED &&
devices->device[i]->friendly_name &&
strcmp(devices->device[i]->friendly_name, "Sine source at 440 Hz") == 0)))
i, devices.device[i].type, devices.device[i].state,
devices.device[i].friendly_name, devices.device[i].device_id));
if (devices.device[i].type == CUBEB_DEVICE_TYPE_INPUT && // paranoia
(devices.device[i].state == CUBEB_DEVICE_STATE_ENABLED ||
(devices.device[i].state == CUBEB_DEVICE_STATE_DISABLED &&
devices.device[i].friendly_name &&
strcmp(devices.device[i].friendly_name, "Sine source at 440 Hz") == 0)))
{
auto j = mDeviceNames->IndexOf(devices->device[i]->device_id);
auto j = mDeviceNames->IndexOf(devices.device[i].device_id);
if (j != nsTArray<nsCString>::NoIndex) {
// match! update the mapping
(*mDeviceIndexes)[j] = i;
} else {
// new device, add to the array
mDeviceIndexes->AppendElement(i);
mDeviceNames->AppendElement(devices->device[i]->device_id);
mDeviceNames->AppendElement(devices.device[i].device_id);
j = mDeviceIndexes->Length()-1;
}
if (devices->device[i]->preferred & CUBEB_DEVICE_PREF_VOICE) {
if (devices.device[i].preferred & CUBEB_DEVICE_PREF_VOICE) {
// There can be only one... we hope
NS_ASSERTION(mDefaultDevice == -1, "multiple default cubeb input devices!");
mDefaultDevice = j;
@ -101,9 +101,7 @@ void AudioInputCubeb::UpdateDeviceList()
LOG(("Cubeb default input device %d", mDefaultDevice));
StaticMutexAutoLock lock(sMutex);
// swap state
if (mDevices) {
cubeb_device_collection_destroy(cubebContext, mDevices);
}
cubeb_device_collection_destroy(cubebContext, &mDevices);
mDevices = devices;
}

View File

@ -179,11 +179,7 @@ public:
static void CleanupGlobalData()
{
if (mDevices) {
// This doesn't require anything more than support for free()
cubeb_device_collection_destroy(CubebUtils::GetCubebContext(), mDevices);
mDevices = nullptr;
}
cubeb_device_collection_destroy(CubebUtils::GetCubebContext(), &mDevices);
delete mDeviceIndexes;
mDeviceIndexes = nullptr;
delete mDeviceNames;
@ -234,7 +230,7 @@ public:
#else
int dev_index = DeviceIndex(aDeviceIndex);
if (dev_index != -1) {
aID = mDevices->device[dev_index]->devid;
aID = mDevices.device[dev_index].devid;
return true;
}
return false;
@ -249,11 +245,11 @@ public:
aStrGuidUTF8[0] = '\0';
#else
int32_t devindex = DeviceIndex(aIndex);
if (!mDevices || devindex < 0) {
if (mDevices.count == 0 || devindex < 0) {
return 1;
}
SprintfLiteral(aStrNameUTF8, "%s%s", aIndex == -1 ? "default: " : "",
mDevices->device[devindex]->friendly_name);
mDevices.device[devindex].friendly_name);
aStrGuidUTF8[0] = '\0';
#endif
return 0;
@ -271,9 +267,9 @@ public:
{
#ifdef MOZ_WIDGET_ANDROID
// OpenSL ES does not support enumerating devices.
MOZ_ASSERT(!mDevices);
MOZ_ASSERT(mDevices.count == 0);
#else
MOZ_ASSERT(mDevices);
MOZ_ASSERT(mDevices.count > 0);
#endif
if (mInUseCount == 0) {
@ -325,7 +321,7 @@ private:
static nsTArray<int>* mDeviceIndexes;
static int mDefaultDevice; // -1 == not set
static nsTArray<nsCString>* mDeviceNames;
static cubeb_device_collection *mDevices;
static cubeb_device_collection mDevices;
static bool mAnyInUse;
static StaticMutex sMutex;
};