Bug 1152401 - Augment AudioDeviceInfo with a cubeb device id. r=padenot

MozReview-Commit-ID: 7QOcM5ITrxv

--HG--
extra : rebase_source : 41071cfbccfc22b0c8a3b2d6a5405d4fbf23c16d
This commit is contained in:
Paul Adenot 2018-07-18 10:38:34 +02:00
parent 300cdedf50
commit 2f416390fe
5 changed files with 105 additions and 34 deletions

View File

@ -7,7 +7,31 @@
NS_IMPL_ISUPPORTS(AudioDeviceInfo, nsIAudioDeviceInfo)
AudioDeviceInfo::AudioDeviceInfo(const nsAString& aName,
using namespace mozilla;
using namespace mozilla::CubebUtils;
AudioDeviceInfo::AudioDeviceInfo(cubeb_device_info* aInfo)
:AudioDeviceInfo(aInfo->devid,
NS_ConvertUTF8toUTF16(aInfo->friendly_name),
NS_ConvertUTF8toUTF16(aInfo->group_id),
NS_ConvertUTF8toUTF16(aInfo->vendor_name),
aInfo->type,
aInfo->state,
aInfo->preferred,
aInfo->format,
aInfo->default_format,
aInfo->max_channels,
aInfo->default_rate,
aInfo->max_rate,
aInfo->min_rate,
aInfo->latency_lo,
aInfo->latency_hi)
{
}
AudioDeviceInfo::AudioDeviceInfo(AudioDeviceID aID,
const nsAString& aName,
const nsAString& aGroupId,
const nsAString& aVendor,
uint16_t aType,
@ -20,8 +44,9 @@ AudioDeviceInfo::AudioDeviceInfo(const nsAString& aName,
uint32_t aMaxRate,
uint32_t aMinRate,
uint32_t aMaxLatency,
uint32_t aMinLatency)
: mName(aName)
uint32_t aMinLatency)
: mDeviceId(aID)
, mName(aName)
, mGroupId(aGroupId)
, mVendor(aVendor)
, mType(aType)
@ -54,6 +79,32 @@ AudioDeviceInfo::AudioDeviceInfo(const nsAString& aName,
mDefaultFormat == FMT_F32BE, "Wrong default format");
}
Maybe<AudioDeviceID>
AudioDeviceInfo::GetDeviceID()
{
if (mDeviceId) {
return Some(mDeviceId);
}
return Nothing();
}
const nsString& AudioDeviceInfo::FriendlyName()
{
return mName;
}
uint32_t AudioDeviceInfo::MaxChannels()
{
return mMaxChannels;
}
uint32_t AudioDeviceInfo::Type()
{
return mType;
}
uint32_t AudioDeviceInfo::State()
{
return mState;
}
/* readonly attribute DOMString name; */
NS_IMETHODIMP
AudioDeviceInfo::GetName(nsAString& aName)

View File

@ -7,47 +7,61 @@
#define MOZILLA_AudioDeviceInfo_H
#include "nsIAudioDeviceInfo.h"
#include "CubebUtils.h"
#include "nsString.h"
#include "mozilla/Maybe.h"
// This is mapped to the cubeb_device_info.
class AudioDeviceInfo final : public nsIAudioDeviceInfo
{
public:
NS_DECL_ISUPPORTS
NS_DECL_THREADSAFE_ISUPPORTS
NS_DECL_NSIAUDIODEVICEINFO
explicit AudioDeviceInfo(const nsAString& aName,
const nsAString& aGroupId,
const nsAString& aVendor,
uint16_t aType,
uint16_t aState,
uint16_t aPreferred,
uint16_t aSupportedFormat,
uint16_t aDefaultFormat,
uint32_t aMaxChannels,
uint32_t aDefaultRate,
uint32_t aMaxRate,
uint32_t aMinRate,
uint32_t aMaxLatency,
uint32_t aMinLatency);
using AudioDeviceID = mozilla::CubebUtils::AudioDeviceID;
AudioDeviceInfo(const AudioDeviceID aID,
const nsAString& aName,
const nsAString& aGroupId,
const nsAString& aVendor,
uint16_t aType,
uint16_t aState,
uint16_t aPreferred,
uint16_t aSupportedFormat,
uint16_t aDefaultFormat,
uint32_t aMaxChannels,
uint32_t aDefaultRate,
uint32_t aMaxRate,
uint32_t aMinRate,
uint32_t aMaxLatency,
uint32_t aMinLatency);
explicit AudioDeviceInfo(cubeb_device_info* aInfo);
// It is possible to not know the device identifier here. It depends on which
// ctor this instance has been constructed with.
mozilla::Maybe<AudioDeviceID> GetDeviceID();
const nsString& FriendlyName();
uint32_t MaxChannels();
uint32_t Type();
uint32_t State();
private:
virtual ~AudioDeviceInfo() = default;
nsString mName;
nsString mGroupId;
nsString mVendor;
uint16_t mType;
uint16_t mState;
uint16_t mPreferred;
uint16_t mSupportedFormat;
uint16_t mDefaultFormat;
uint32_t mMaxChannels;
uint32_t mDefaultRate;
uint32_t mMaxRate;
uint32_t mMinRate;
uint32_t mMaxLatency;
uint32_t mMinLatency;
const AudioDeviceID mDeviceId;
const nsString mName;
const nsString mGroupId;
const nsString mVendor;
const uint16_t mType;
const uint16_t mState;
const uint16_t mPreferred;
const uint16_t mSupportedFormat;
const uint16_t mDefaultFormat;
const uint32_t mMaxChannels;
const uint32_t mDefaultRate;
const uint32_t mMaxRate;
const uint32_t mMinRate;
const uint32_t mMaxLatency;
const uint32_t mMinLatency;
};
#endif // MOZILLA_AudioDeviceInfo_H

View File

@ -9,6 +9,7 @@
#include "MediaInfo.h"
#include "mozilla/AbstractThread.h"
#include "mozilla/dom/ContentChild.h"
#include "mozilla/dom/AudioDeviceInfo.h"
#include "mozilla/ipc/FileDescriptor.h"
#include "mozilla/Logging.h"
#include "mozilla/Preferences.h"
@ -684,7 +685,8 @@ void GetDeviceCollection(nsTArray<RefPtr<AudioDeviceInfo>>& aDeviceInfos,
for (unsigned int i = 0; i < collection.count; ++i) {
auto device = collection.device[i];
RefPtr<AudioDeviceInfo> info =
new AudioDeviceInfo(NS_ConvertUTF8toUTF16(device.friendly_name),
new AudioDeviceInfo(device.devid,
NS_ConvertUTF8toUTF16(device.friendly_name),
NS_ConvertUTF8toUTF16(device.group_id),
NS_ConvertUTF8toUTF16(device.vendor_name),
ConvertCubebType(device.type),

View File

@ -8,9 +8,12 @@
#define CubebUtils_h_
#include "cubeb/cubeb.h"
#include "mozilla/dom/AudioDeviceInfo.h"
#include "nsString.h"
#include "mozilla/RefPtr.h"
#include "mozilla/Maybe.h"
class AudioDeviceInfo;
namespace mozilla {
namespace CubebUtils {

View File

@ -7,6 +7,7 @@
#include "AudioPacketizer.h"
#include "AudioSegment.h"
#include "AudioDeviceInfo.h"
#include "CamerasChild.h"
#include "cubeb/cubeb.h"
#include "CubebUtils.h"