コード例 #1
0
ファイル: VideoEngine.cpp プロジェクト: heiher/gecko-dev
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);
}
コード例 #2
0
ファイル: VideoEngine.cpp プロジェクト: jld/gecko-dev
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);
}