зеркало из https://github.com/mozilla/gecko-dev.git
Backed out 4 changesets (bug 1506884) for mochitest failures CLOSED TREE
Backed out changeset c1e32495cfa2 (bug 1506884) Backed out changeset 0182d6543001 (bug 1506884) Backed out changeset 5837db3740b5 (bug 1506884) Backed out changeset 1584d9804aa1 (bug 1506884)
This commit is contained in:
Родитель
c6d0c57309
Коммит
04bf88fa7d
|
@ -78,8 +78,6 @@ class AudioConduitTest : public ::testing::Test {
|
|||
mAudioConduit->Init();
|
||||
}
|
||||
|
||||
~AudioConduitTest() { mAudioConduit->DeleteStreams(); }
|
||||
|
||||
MockCall* mCall;
|
||||
RefPtr<AudioConduitWithMockChannelProxy> mAudioConduit;
|
||||
};
|
||||
|
|
|
@ -274,20 +274,7 @@ class WebrtcMediaTransport : public mozilla::TransportInterface {
|
|||
public:
|
||||
WebrtcMediaTransport() : numPkts(0), mAudio(false), mVideo(false) {}
|
||||
|
||||
~WebrtcMediaTransport() {
|
||||
if (mAudioSession) {
|
||||
mAudioSession->DeleteStreams();
|
||||
}
|
||||
if (mOtherAudioSession) {
|
||||
mOtherAudioSession->DeleteStreams();
|
||||
}
|
||||
if (mVideoSession) {
|
||||
mVideoSession->DeleteStreams();
|
||||
}
|
||||
if (mOtherVideoSession) {
|
||||
mOtherVideoSession->DeleteStreams();
|
||||
}
|
||||
}
|
||||
~WebrtcMediaTransport() {}
|
||||
|
||||
virtual nsresult SendRtpPacket(const uint8_t* data, size_t len) {
|
||||
++numPkts;
|
||||
|
|
|
@ -267,15 +267,8 @@ class TestAgent {
|
|||
void Shutdown_s() { transport_->Shutdown(); }
|
||||
|
||||
void Shutdown() {
|
||||
if (audio_pipeline_) {
|
||||
audio_pipeline_->Shutdown_m();
|
||||
}
|
||||
if (audio_stream_track_) {
|
||||
audio_stream_track_->Stop();
|
||||
}
|
||||
if (audio_conduit_) {
|
||||
audio_conduit_->DeleteStreams();
|
||||
}
|
||||
if (audio_pipeline_) audio_pipeline_->Shutdown_m();
|
||||
if (audio_stream_track_) audio_stream_track_->Stop();
|
||||
|
||||
mozilla::SyncRunnable::DispatchToThread(
|
||||
test_utils->sts_target(), WrapRunnable(this, &TestAgent::Shutdown_s));
|
||||
|
|
|
@ -75,15 +75,15 @@ WebrtcAudioConduit::~WebrtcAudioConduit() {
|
|||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
||||
MutexAutoLock lock(mMutex);
|
||||
DeleteSendStream();
|
||||
DeleteRecvStream();
|
||||
|
||||
DeleteChannels();
|
||||
|
||||
// We don't Terminate() the VoEBase here, because the Call (owned by
|
||||
// PeerConnectionMedia) actually owns the (shared) VoEBase/VoiceEngine
|
||||
// here
|
||||
mPtrVoEBase = nullptr;
|
||||
|
||||
MOZ_ASSERT(!mSendStream && !mRecvStream,
|
||||
"Call DeleteStreams prior to ~WebrtcAudioConduit.");
|
||||
}
|
||||
|
||||
bool WebrtcAudioConduit::SetLocalSSRCs(
|
||||
|
@ -364,6 +364,18 @@ MediaConduitErrorCode WebrtcAudioConduit::ConfigureSendMediaCodec(
|
|||
|
||||
mDtmfEnabled = codecConfig->mDtmfEnabled;
|
||||
|
||||
// TEMPORARY - see bug 694814 comment 2
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIPrefService> prefs =
|
||||
do_GetService("@mozilla.org/preferences-service;1", &rv);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
nsCOMPtr<nsIPrefBranch> branch = do_QueryInterface(prefs);
|
||||
|
||||
if (branch) {
|
||||
branch->GetIntPref("media.peerconnection.capture_delay", &mCaptureDelay);
|
||||
}
|
||||
}
|
||||
|
||||
condError = StartTransmitting();
|
||||
if (condError != kMediaConduitNoError) {
|
||||
return condError;
|
||||
|
@ -559,6 +571,7 @@ MediaConduitErrorCode WebrtcAudioConduit::SendAudioFrame(
|
|||
return kMediaConduitSessionNotInited;
|
||||
}
|
||||
|
||||
capture_delay = mCaptureDelay;
|
||||
// Insert the samples
|
||||
mPtrVoEBase->audio_transport()->PushCaptureData(
|
||||
mSendChannel, audio_data,
|
||||
|
@ -923,7 +936,6 @@ MediaConduitErrorCode WebrtcAudioConduit::ValidateCodecConfig(
|
|||
}
|
||||
|
||||
void WebrtcAudioConduit::DeleteSendStream() {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
mMutex.AssertCurrentThreadOwns();
|
||||
if (mSendStream) {
|
||||
mSendStream->Stop();
|
||||
|
@ -936,7 +948,6 @@ void WebrtcAudioConduit::DeleteSendStream() {
|
|||
}
|
||||
|
||||
MediaConduitErrorCode WebrtcAudioConduit::CreateSendStream() {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
mMutex.AssertCurrentThreadOwns();
|
||||
|
||||
mSendStream = mCall->Call()->CreateAudioSendStream(mSendStreamConfig);
|
||||
|
@ -948,7 +959,6 @@ MediaConduitErrorCode WebrtcAudioConduit::CreateSendStream() {
|
|||
}
|
||||
|
||||
void WebrtcAudioConduit::DeleteRecvStream() {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
mMutex.AssertCurrentThreadOwns();
|
||||
if (mRecvStream) {
|
||||
mRecvStream->Stop();
|
||||
|
@ -961,7 +971,6 @@ void WebrtcAudioConduit::DeleteRecvStream() {
|
|||
}
|
||||
|
||||
MediaConduitErrorCode WebrtcAudioConduit::CreateRecvStream() {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
mMutex.AssertCurrentThreadOwns();
|
||||
|
||||
mRecvStreamConfig.rtcp_send_transport = this;
|
||||
|
@ -1025,14 +1034,6 @@ MediaConduitErrorCode WebrtcAudioConduit::DeliverPacket(const void* data,
|
|||
return kMediaConduitNoError;
|
||||
}
|
||||
|
||||
void WebrtcAudioConduit::DeleteStreams() {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
||||
MutexAutoLock lock(mMutex);
|
||||
DeleteSendStream();
|
||||
DeleteRecvStream();
|
||||
}
|
||||
|
||||
MediaConduitErrorCode WebrtcAudioConduit::CreateChannels() {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
||||
|
@ -1074,7 +1075,6 @@ MediaConduitErrorCode WebrtcAudioConduit::CreateChannels() {
|
|||
|
||||
void WebrtcAudioConduit::DeleteChannels() {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
mMutex.AssertCurrentThreadOwns();
|
||||
|
||||
if (mSendChannel != -1) {
|
||||
mSendChannelProxy = nullptr;
|
||||
|
|
|
@ -170,11 +170,12 @@ class WebrtcAudioConduit : public AudioSessionConduit,
|
|||
void SetPCHandle(const std::string& aPCHandle) override {}
|
||||
MediaConduitErrorCode DeliverPacket(const void* data, int len) override;
|
||||
|
||||
void DeleteStreams() override;
|
||||
void DeleteStreams() override {}
|
||||
|
||||
WebrtcAudioConduit(RefPtr<WebRtcCallWrapper> aCall,
|
||||
nsCOMPtr<nsIEventTarget> aStsThread)
|
||||
: mTransportMonitor("WebrtcAudioConduit"),
|
||||
: mFakeAudioDevice(new webrtc::FakeAudioDeviceModule()),
|
||||
mTransportMonitor("WebrtcAudioConduit"),
|
||||
mTransmitterTransport(nullptr),
|
||||
mReceiverTransport(nullptr),
|
||||
mCall(aCall),
|
||||
|
@ -191,6 +192,7 @@ class WebrtcAudioConduit : public AudioSessionConduit,
|
|||
mSendChannel(-1),
|
||||
mDtmfEnabled(false),
|
||||
mMutex("WebrtcAudioConduit::mMutex"),
|
||||
mCaptureDelay(150),
|
||||
mStsThread(aStsThread) {}
|
||||
|
||||
virtual ~WebrtcAudioConduit();
|
||||
|
@ -250,16 +252,7 @@ class WebrtcAudioConduit : public AudioSessionConduit,
|
|||
|
||||
protected:
|
||||
// These are protected so they can be accessed by unit tests
|
||||
|
||||
// Written only on main thread. Accessed from audio thread.
|
||||
// Accessed from mStsThread during stats calls.
|
||||
// This is safe, provided audio and stats calls stop before we
|
||||
// destroy the AudioConduit.
|
||||
std::unique_ptr<webrtc::voe::ChannelProxy> mRecvChannelProxy = nullptr;
|
||||
|
||||
// Written only on main thread. Accessed from mStsThread during stats calls.
|
||||
// This is safe, provided stats calls stop before we destroy the
|
||||
// AudioConduit.
|
||||
std::unique_ptr<webrtc::voe::ChannelProxy> mSendChannelProxy = nullptr;
|
||||
|
||||
private:
|
||||
|
@ -288,39 +281,20 @@ class WebrtcAudioConduit : public AudioSessionConduit,
|
|||
MediaConduitErrorCode CreateChannels();
|
||||
virtual void DeleteChannels();
|
||||
|
||||
UniquePtr<webrtc::FakeAudioDeviceModule> mFakeAudioDevice;
|
||||
mozilla::ReentrantMonitor mTransportMonitor;
|
||||
|
||||
// Accessed on any thread under mTransportMonitor.
|
||||
RefPtr<TransportInterface> mTransmitterTransport;
|
||||
|
||||
// Accessed on any thread under mTransportMonitor.
|
||||
RefPtr<TransportInterface> mReceiverTransport;
|
||||
|
||||
// Accessed from main thread and audio threads. Used to create and destroy
|
||||
// channels and to send audio data. Access to channels is protected by
|
||||
// locking in channel.cc.
|
||||
ScopedCustomReleasePtr<webrtc::VoEBase> mPtrVoEBase;
|
||||
|
||||
// Const so can be accessed on any thread. Most methods are called on
|
||||
// main thread.
|
||||
const RefPtr<WebRtcCallWrapper> mCall;
|
||||
|
||||
// Written only on main thread. Guarded by mMutex, except for reads on main.
|
||||
webrtc::AudioReceiveStream::Config mRecvStreamConfig;
|
||||
|
||||
// Written only on main thread. Guarded by mMutex, except for reads on main.
|
||||
webrtc::AudioReceiveStream* mRecvStream;
|
||||
|
||||
// Written only on main thread. Guarded by mMutex, except for reads on main.
|
||||
webrtc::AudioSendStream::Config mSendStreamConfig;
|
||||
|
||||
// Written only on main thread. Guarded by mMutex, except for reads on main.
|
||||
webrtc::AudioSendStream* mSendStream;
|
||||
|
||||
// accessed on creation, and when receiving packets
|
||||
Atomic<uint32_t> mRecvSSRC; // this can change during a stream!
|
||||
|
||||
// Accessed only on mStsThread.
|
||||
RtpPacketQueue mRtpPacketQueue;
|
||||
|
||||
// engine states of our interets
|
||||
|
@ -329,22 +303,28 @@ class WebrtcAudioConduit : public AudioSessionConduit,
|
|||
mozilla::Atomic<bool>
|
||||
mEngineReceiving; // If true => VoiceEngine Receive-subsystem is up
|
||||
// and playout is enabled
|
||||
// Keep track of each inserted RTP block and the time it was inserted
|
||||
// so we can estimate the clock time for a specific TimeStamp coming out
|
||||
// (for when we send data to MediaStreamTracks). Blocks are aged out as
|
||||
// needed.
|
||||
struct Processing {
|
||||
TimeStamp mTimeStamp;
|
||||
uint32_t mRTPTimeStamp; // RTP timestamps received
|
||||
};
|
||||
AutoTArray<Processing, 8> mProcessing;
|
||||
|
||||
// Accessed only on main thread.
|
||||
int mRecvChannel;
|
||||
|
||||
// Accessed on main thread and from audio thread.
|
||||
int mSendChannel;
|
||||
|
||||
// Accessed only on main thread.
|
||||
bool mDtmfEnabled;
|
||||
|
||||
Mutex mMutex;
|
||||
nsAutoPtr<AudioCodecConfig> mCurSendCodecConfig;
|
||||
|
||||
// Current "capture" delay (really output plus input delay)
|
||||
int32_t mCaptureDelay;
|
||||
|
||||
// Accessed from audio thread.
|
||||
webrtc::AudioFrame mAudioFrame; // for output pulls
|
||||
|
||||
// Accessed from both main and mStsThread. Uses locks internally.
|
||||
RtpSourceObserver mRtpSourceObserver;
|
||||
|
||||
// Socket transport service thread. Any thread.
|
||||
|
|
|
@ -591,7 +591,6 @@ class WebrtcVideoConduit
|
|||
// and when receiving packets (sts).
|
||||
Atomic<uint32_t> mRecvSSRC; // this can change during a stream!
|
||||
|
||||
// Accessed only on mStsThread.
|
||||
RtpPacketQueue mRtpPacketQueue;
|
||||
|
||||
// The lifetime of these codecs are maintained by the VideoConduit instance.
|
||||
|
|
|
@ -528,8 +528,19 @@ pref("media.getusermedia.aec_extended_filter", true);
|
|||
pref("media.getusermedia.noise", 1); // kModerate
|
||||
pref("media.getusermedia.agc_enabled", true);
|
||||
pref("media.getusermedia.agc", 1); // kAdaptiveDigital
|
||||
// capture_delay: Adjustments for OS-specific input delay (lower bound)
|
||||
// playout_delay: Adjustments for OS-specific AudioStream+cubeb+output delay (lower bound)
|
||||
// full_duplex: enable cubeb full-duplex capture/playback
|
||||
pref("media.navigator.audio.full_duplex", true);
|
||||
#if defined(XP_MACOSX)
|
||||
pref("media.peerconnection.capture_delay", 50);
|
||||
#elif defined(XP_WIN)
|
||||
pref("media.peerconnection.capture_delay", 50);
|
||||
#elif defined(ANDROID)
|
||||
pref("media.peerconnection.capture_delay", 100);
|
||||
#else
|
||||
pref("media.peerconnection.capture_delay", 70);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
pref("dom.webaudio.enabled", true);
|
||||
|
|
Загрузка…
Ссылка в новой задаче