WebrtcVideoConduit::~WebrtcVideoConduit() { CSFLogDebug(logTag, "%s ", __FUNCTION__); for(std::vector<VideoCodecConfig*>::size_type i=0;i < mRecvCodecList.size();i++) { delete mRecvCodecList[i]; } delete mCurSendCodecConfig; //Deal with External Capturer if(mPtrViECapture) { mPtrViECapture->DisconnectCaptureDevice(mCapId); mPtrViECapture->ReleaseCaptureDevice(mCapId); mPtrExtCapture = nullptr; mPtrViECapture->Release(); } //Deal with External Renderer if(mPtrViERender) { if(mRenderer) { mPtrViERender->StopRender(mChannel); } mPtrViERender->RemoveRenderer(mChannel); mPtrViERender->Release(); } //Deal with the transport if(mPtrViENetwork) { mPtrViENetwork->DeregisterSendTransport(mChannel); mPtrViENetwork->Release(); } if(mPtrViECodec) { mPtrViECodec->Release(); } if(mPtrViEBase) { mPtrViEBase->StopSend(mChannel); mPtrViEBase->StopReceive(mChannel); SyncTo(nullptr); mPtrViEBase->DeleteChannel(mChannel); mPtrViEBase->Release(); } if (mPtrRTP) { mPtrRTP->Release(); } if(mVideoEngine) { webrtc::VideoEngine::Delete(mVideoEngine); } }
WebrtcVideoConduit::~WebrtcVideoConduit() { NS_ASSERTION(NS_IsMainThread(), "Only call on main thread"); CSFLogDebug(logTag, "%s ", __FUNCTION__); for(std::vector<VideoCodecConfig*>::size_type i=0;i < mRecvCodecList.size();i++) { delete mRecvCodecList[i]; } delete mCurSendCodecConfig; // The first one of a pair to be deleted shuts down media for both //Deal with External Capturer if(mPtrViECapture) { if (!mShutDown) { mPtrViECapture->DisconnectCaptureDevice(mCapId); mPtrViECapture->ReleaseCaptureDevice(mCapId); mPtrExtCapture = nullptr; if (mOtherDirection) mOtherDirection->mPtrExtCapture = nullptr; } } //Deal with External Renderer if(mPtrViERender) { if (!mShutDown) { if(mRenderer) { mPtrViERender->StopRender(mChannel); } mPtrViERender->RemoveRenderer(mChannel); } } //Deal with the transport if(mPtrViENetwork) { if (!mShutDown) { mPtrViENetwork->DeregisterSendTransport(mChannel); } } if(mPtrViEBase) { if (!mShutDown) { mPtrViEBase->StopSend(mChannel); mPtrViEBase->StopReceive(mChannel); SyncTo(nullptr); mPtrViEBase->DeleteChannel(mChannel); } } if (mOtherDirection) { // mOtherDirection owns these now! mOtherDirection->mOtherDirection = nullptr; // let other side we terminated the channel mOtherDirection->mShutDown = true; mVideoEngine = nullptr; } else { // We can't delete the VideoEngine until all these are released! // And we can't use a Scoped ptr, since the order is arbitrary mPtrViEBase = nullptr; mPtrViECapture = nullptr; mPtrViECodec = nullptr; mPtrViENetwork = nullptr; mPtrViERender = nullptr; mPtrRTP = nullptr; mPtrExtCodec = nullptr; // only one opener can call Delete. Have it be the last to close. if(mVideoEngine) { webrtc::VideoEngine::Delete(mVideoEngine); } } }
WebrtcVideoConduit::~WebrtcVideoConduit() { #ifdef MOZILLA_INTERNAL_API // unit tests create their own "main thread" NS_ASSERTION(NS_IsMainThread(), "Only call on main thread"); #endif CSFLogDebug(logTag, "%s ", __FUNCTION__); for(std::vector<VideoCodecConfig*>::size_type i=0;i < mRecvCodecList.size();i++) { delete mRecvCodecList[i]; } delete mCurSendCodecConfig; // The first one of a pair to be deleted shuts down media for both //Deal with External Capturer if(mPtrViECapture) { if (!mShutDown) { mPtrViECapture->DisconnectCaptureDevice(mCapId); mPtrViECapture->ReleaseCaptureDevice(mCapId); mPtrExtCapture = nullptr; if (mOtherDirection) mOtherDirection->mPtrExtCapture = nullptr; } mPtrViECapture->Release(); } if (mPtrExtCodec) { mPtrExtCodec->Release(); mPtrExtCodec = NULL; } //Deal with External Renderer if(mPtrViERender) { if (!mShutDown) { if(mRenderer) { mPtrViERender->StopRender(mChannel); } mPtrViERender->RemoveRenderer(mChannel); } mPtrViERender->Release(); } //Deal with the transport if(mPtrViENetwork) { if (!mShutDown) { mPtrViENetwork->DeregisterSendTransport(mChannel); } mPtrViENetwork->Release(); } if(mPtrViECodec) { mPtrViECodec->Release(); } if(mPtrViEBase) { if (!mShutDown) { mPtrViEBase->StopSend(mChannel); mPtrViEBase->StopReceive(mChannel); SyncTo(nullptr); mPtrViEBase->DeleteChannel(mChannel); } mPtrViEBase->Release(); } if (mPtrRTP) { mPtrRTP->Release(); } if (mOtherDirection) { // mOtherDirection owns these now! mOtherDirection->mOtherDirection = nullptr; // let other side we terminated the channel mOtherDirection->mShutDown = true; mVideoEngine = nullptr; } else { // only one opener can call Delete. Have it be the last to close. if(mVideoEngine) { webrtc::VideoEngine::Delete(mVideoEngine); } } }