void VideoEngine::CreateVideoCapture(int32_t& id, const char* deviceUniqueIdUTF8) { LOG((__PRETTY_FUNCTION__)); MOZ_ASSERT(deviceUniqueIdUTF8); id = GenerateId(); LOG(("CaptureDeviceInfo.type=%s id=%d",mCaptureDevInfo.TypeName(),id)); for (auto &it : mCaps) { if (it.second.VideoCapture() && it.second.VideoCapture()->CurrentDeviceName() && strcmp(it.second.VideoCapture()->CurrentDeviceName(), deviceUniqueIdUTF8) == 0) { mIdMap.emplace(id, it.first); return; } } CaptureEntry entry = {-1, nullptr}; if (mCaptureDevInfo.type == webrtc::CaptureDeviceType::Camera) { entry = CaptureEntry(id, webrtc::VideoCaptureFactory::Create(deviceUniqueIdUTF8)); } else { #ifndef WEBRTC_ANDROID entry = CaptureEntry( id, webrtc::DesktopCaptureImpl::Create(id, deviceUniqueIdUTF8, mCaptureDevInfo.type)); #else MOZ_ASSERT("CreateVideoCapture NO DESKTOP CAPTURE IMPL ON ANDROID" == nullptr); #endif } mCaps.emplace(id, std::move(entry)); mIdMap.emplace(id, id); }
void VideoEngine::CreateVideoCapture(int32_t& id, const char* deviceUniqueIdUTF8) { LOG((__PRETTY_FUNCTION__)); MOZ_ASSERT(deviceUniqueIdUTF8); id = GenerateId(); LOG(("CaptureDeviceInfo.type=%s id=%d", mCaptureDevInfo.TypeName(), id)); for (auto& it : mCaps) { if (it.second.VideoCapture() && it.second.VideoCapture()->CurrentDeviceName() && strcmp(it.second.VideoCapture()->CurrentDeviceName(), deviceUniqueIdUTF8) == 0) { mIdMap.emplace(id, it.first); return; } } CaptureEntry entry = {-1, nullptr}; if (mCaptureDevInfo.type == webrtc::CaptureDeviceType::Camera) { entry = CaptureEntry( id, webrtc::VideoCaptureFactory::Create(deviceUniqueIdUTF8)); if (entry.VideoCapture()) { entry.VideoCapture()->SetApplyRotation(true); } } else { #ifndef WEBRTC_ANDROID # ifdef MOZ_X11 webrtc::VideoCaptureModule* captureModule; auto type = mCaptureDevInfo.type; nsresult result = NS_DispatchToMainThread( media::NewRunnableFrom([&captureModule, id, deviceUniqueIdUTF8, type]() -> nsresult { captureModule = webrtc::DesktopCaptureImpl::Create(id, deviceUniqueIdUTF8, type); return NS_OK; }), nsIEventTarget::DISPATCH_SYNC); if (result == NS_OK) { entry = CaptureEntry(id, captureModule); } else { return; } # else entry = CaptureEntry(id, webrtc::DesktopCaptureImpl::Create( id, deviceUniqueIdUTF8, mCaptureDevInfo.type)); # endif #else MOZ_ASSERT("CreateVideoCapture NO DESKTOP CAPTURE IMPL ON ANDROID" == nullptr); #endif } mCaps.emplace(id, std::move(entry)); mIdMap.emplace(id, id); }