Bug 1152401 - Implement enumeration of speaker devices. r?jib
MozReview-Commit-ID: CppImscUcz4
--- a/dom/media/webrtc/MediaEngineWebRTC.cpp
+++ b/dom/media/webrtc/MediaEngineWebRTC.cpp
@@ -7,16 +7,17 @@
#include "MediaEngineWebRTC.h"
#include "AllocationHandle.h"
#include "CamerasChild.h"
#include "CSFLog.h"
#include "MediaEngineTabVideoSource.h"
#include "MediaEngineRemoteVideoSource.h"
#include "MediaTrackConstraints.h"
+#include "mozilla/dom/MediaDeviceInfo.h"
#include "mozilla/Logging.h"
#include "nsIComponentRegistrar.h"
#include "nsIPrefService.h"
#include "nsIPrefBranch.h"
#include "nsITabSource.h"
#include "prenv.h"
static mozilla::LazyLogModule sGetUserMediaLog("GetUserMedia");
@@ -311,16 +312,33 @@ MediaEngineWebRTC::EnumerateMicrophoneDe
NS_ConvertUTF8toUTF16(micSource->GetUUID())));
}
}
void
MediaEngineWebRTC::EnumerateSpeakerDevices(uint64_t aWindowId,
nsTArray<RefPtr<MediaDevice> >* aDevices)
{
+ nsTArray<RefPtr<AudioDeviceInfo>> devices;
+ CubebUtils::GetDeviceCollection(devices, CubebUtils::Output);
+ for (auto& device : devices) {
+ MOZ_ASSERT(device->GetDeviceID().isSome());
+ if (device->State() == CUBEB_DEVICE_STATE_ENABLED) {
+ MOZ_ASSERT(device->Type() == CUBEB_DEVICE_TYPE_OUTPUT);
+ nsString uuid(device->FriendlyName());
+ // If, for example, input and output are in the same device, uuid
+ // would be the same for both which ends up to create the same
+ // deviceIDs (in JS).
+ uuid.Append(NS_LITERAL_STRING("_Speaker"));
+ aDevices->AppendElement(MakeRefPtr<MediaDevice>(
+ device->FriendlyName(),
+ dom::MediaDeviceKind::Audiooutput,
+ uuid));
+ }
+ }
}
void
MediaEngineWebRTC::EnumerateDevices(uint64_t aWindowId,
dom::MediaSourceEnum aMediaSource,
MediaSinkEnum aMediaSink,
nsTArray<RefPtr<MediaDevice> >* aDevices)
{