bool MediaEngineWebRTCMicrophoneSource::AllocChannel() { MOZ_ASSERT(mVoEBase); mChannel = mVoEBase->CreateChannel(); if (mChannel >= 0) { if (!mVoENetwork->RegisterExternalTransport(mChannel, *mNullTransport)) { mSampleFrequency = MediaEngine::DEFAULT_SAMPLE_RATE; LOG(("%s: sampling rate %u", __FUNCTION__, mSampleFrequency)); // Check for availability. if (!mAudioInput->SetRecordingDevice(mCapIndex)) { // Because of the permission mechanism of B2G, we need to skip the status // check here. bool avail = false; mAudioInput->GetRecordingDeviceStatus(avail); if (!avail) { if (sChannelsOpen == 0) { DeInitEngine(); } return false; } // Set "codec" to PCM, 32kHz on device's channels ScopedCustomReleasePtr<webrtc::VoECodec> ptrVoECodec(webrtc::VoECodec::GetInterface(mVoiceEngine)); if (ptrVoECodec) { webrtc::CodecInst codec; strcpy(codec.plname, ENCODING); codec.channels = CHANNELS; uint32_t maxChannels = 0; if (mAudioInput->GetMaxAvailableChannels(maxChannels) == 0) { codec.channels = maxChannels; } MOZ_ASSERT(mSampleFrequency == 16000 || mSampleFrequency == 32000); codec.rate = SAMPLE_RATE(mSampleFrequency); codec.plfreq = mSampleFrequency; codec.pacsize = SAMPLE_LENGTH(mSampleFrequency); codec.pltype = 0; // Default payload type if (!ptrVoECodec->SetSendCodec(mChannel, codec)) { mState = kAllocated; sChannelsOpen++; return true; } } } } } mVoEBase->DeleteChannel(mChannel); mChannel = -1; if (sChannelsOpen == 0) { DeInitEngine(); } return false; }
bool MediaEngineWebRTCMicrophoneSource::AllocChannel() { MOZ_ASSERT(mVoEBase); mChannel = mVoEBase->CreateChannel(); if (mChannel < 0) { return false; } if (mVoENetwork->RegisterExternalTransport(mChannel, *mNullTransport)) { return false; } mSampleFrequency = MediaEngine::DEFAULT_SAMPLE_RATE; LOG(("%s: sampling rate %u", __FUNCTION__, mSampleFrequency)); // Check for availability. if (mAudioInput->SetRecordingDevice(mCapIndex)) { return false; } #ifndef MOZ_B2G // Because of the permission mechanism of B2G, we need to skip the status // check here. bool avail = false; mAudioInput->GetRecordingDeviceStatus(avail); if (!avail) { return false; } #endif // MOZ_B2G // Set "codec" to PCM, 32kHz on 1 channel ScopedCustomReleasePtr<webrtc::VoECodec> ptrVoECodec(webrtc::VoECodec::GetInterface(mVoiceEngine)); if (!ptrVoECodec) { return false; } webrtc::CodecInst codec; strcpy(codec.plname, ENCODING); codec.channels = CHANNELS; MOZ_ASSERT(mSampleFrequency == 16000 || mSampleFrequency == 32000); codec.rate = SAMPLE_RATE(mSampleFrequency); codec.plfreq = mSampleFrequency; codec.pacsize = SAMPLE_LENGTH(mSampleFrequency); codec.pltype = 0; // Default payload type if (!ptrVoECodec->SetSendCodec(mChannel, codec)) { return true; } return false; }
void MediaEngineWebRTCAudioSource::Init() { mVoEBase = webrtc::VoEBase::GetInterface(mVoiceEngine); mVoEBase->Init(); mVoERender = webrtc::VoEExternalMedia::GetInterface(mVoiceEngine); if (!mVoERender) { return; } mVoENetwork = webrtc::VoENetwork::GetInterface(mVoiceEngine); if (!mVoENetwork) { return; } mVoEProcessing = webrtc::VoEAudioProcessing::GetInterface(mVoiceEngine); if (!mVoEProcessing) { return; } mChannel = mVoEBase->CreateChannel(); if (mChannel < 0) { return; } mNullTransport = new NullTransport(); if (mVoENetwork->RegisterExternalTransport(mChannel, *mNullTransport)) { return; } // Check for availability. ScopedCustomReleasePtr<webrtc::VoEHardware> ptrVoEHw(webrtc::VoEHardware::GetInterface(mVoiceEngine)); if (!ptrVoEHw || ptrVoEHw->SetRecordingDevice(mCapIndex)) { return; } #ifndef MOZ_B2G // Because of the permission mechanism of B2G, we need to skip the status // check here. bool avail = false; ptrVoEHw->GetRecordingDeviceStatus(avail); if (!avail) { return; } #endif // MOZ_B2G // Set "codec" to PCM, 32kHz on 1 channel ScopedCustomReleasePtr<webrtc::VoECodec> ptrVoECodec(webrtc::VoECodec::GetInterface(mVoiceEngine)); if (!ptrVoECodec) { return; } webrtc::CodecInst codec; strcpy(codec.plname, ENCODING); codec.channels = CHANNELS; codec.rate = SAMPLE_RATE; codec.plfreq = SAMPLE_FREQUENCY; codec.pacsize = SAMPLE_LENGTH; codec.pltype = 0; // Default payload type if (!ptrVoECodec->SetSendCodec(mChannel, codec)) { mInitDone = true; } }