Bug 1392837 - Support multichannel audio input on gUM. r=padenot

MozReview-Commit-ID: FKCIAo4a8jy

--HG--
extra : rebase_source : 2f72331514909f418580e3c7c8bcc445e74167c8
This commit is contained in:
Alex Chronopoulos 2017-09-04 17:26:03 +03:00
Родитель cd8e4a7817
Коммит 087f9c1689
3 изменённых файлов: 18 добавлений и 5 удалений

Просмотреть файл

@ -672,7 +672,7 @@ AudioCallbackDriver::Init()
StaticMutexAutoLock lock(AudioInputCubeb::Mutex());
uint32_t userChannels = 0;
AudioInputCubeb::GetUserChannelCount(mGraphImpl->mInputDeviceID, userChannels);
input.channels = mInputChannels = userChannels;
input.channels = mInputChannels = std::min<uint32_t>(8, userChannels);
}
#endif

Просмотреть файл

@ -645,6 +645,8 @@ private:
// To only update microphone when needed, we keep track of previous settings.
MediaEnginePrefs mLastPrefs;
AlignedShortBuffer mInputDownmixBuffer;
};
class MediaEngineWebRTC : public MediaEngine

Просмотреть файл

@ -206,6 +206,7 @@ MediaEngineWebRTCMicrophoneSource::MediaEngineWebRTCMicrophoneSource(
, mPlayoutDelay(0)
, mNullTransport(nullptr)
, mSkipProcessing(false)
, mInputDownmixBuffer(MAX_SAMPLING_FREQ * MAX_CHANNELS / 100)
{
MOZ_ASSERT(aVoiceEnginePtr);
MOZ_ASSERT(aAudioInput);
@ -623,7 +624,16 @@ MediaEngineWebRTCMicrophoneSource::PacketizeAndProcess(MediaStreamGraph* aGraph,
int16_t* packet = mInputBuffer.Elements();
mPacketizer->Output(packet);
mVoERender->ExternalRecordingInsertData(packet, samplesPerPacket, aRate, 0);
if (aChannels > MAX_CHANNELS) {
AudioConverter converter(AudioConfig(aChannels, 0, AudioConfig::FORMAT_S16),
AudioConfig(MAX_CHANNELS, 0, AudioConfig::FORMAT_S16));
converter.Process(mInputDownmixBuffer, packet, mPacketizer->PacketSize());
mVoERender->ExternalRecordingInsertData(mInputDownmixBuffer.Data(),
mPacketizer->PacketSize() * MAX_CHANNELS,
aRate, 0);
} else {
mVoERender->ExternalRecordingInsertData(packet, samplesPerPacket, aRate, 0);
}
}
}
@ -661,8 +671,8 @@ MediaEngineWebRTCMicrophoneSource::InsertInGraph(const T* aBuffer,
(i+1 < len) ? 0 : 1, insertTime);
// Bug 971528 - Support stereo capture in gUM
MOZ_ASSERT(aChannels == 1 || aChannels == 2,
"GraphDriver only supports mono and stereo audio for now");
MOZ_ASSERT(aChannels >= 1 && aChannels <= 8,
"Support up to 8 channels");
nsAutoPtr<AudioSegment> segment(new AudioSegment());
RefPtr<SharedBuffer> buffer =
@ -848,7 +858,8 @@ MediaEngineWebRTCMicrophoneSource::AllocChannel()
codec.channels = CHANNELS;
uint32_t maxChannels = 0;
if (mAudioInput->GetMaxAvailableChannels(maxChannels) == 0) {
codec.channels = maxChannels;
MOZ_ASSERT(maxChannels);
codec.channels = std::min<uint32_t>(maxChannels, MAX_CHANNELS);
}
MOZ_ASSERT(mSampleFrequency == 16000 || mSampleFrequency == 32000);
codec.rate = SAMPLE_RATE(mSampleFrequency);