void AVForm::open(const QString &devName, const VideoMode &mode) { QRect rect = mode.toRect(); Settings::getInstance().setCamVideoRes(rect); Settings::getInstance().setCamVideoFPS(static_cast<quint16>(mode.FPS)); camera.open(devName, mode); }
void AVForm::on_videoModescomboBox_currentIndexChanged(int index) { assert(0 <= index && index < videoModes.size()); int devIndex = videoDevCombobox->currentIndex(); assert(0 <= devIndex && devIndex < videoDeviceList.size()); QString devName = videoDeviceList[devIndex].first; VideoMode mode = videoModes[index]; if (CameraDevice::isScreen(devName) && mode == VideoMode()) { if (Settings::getInstance().getScreenGrabbed()) { VideoMode mode(Settings::getInstance().getScreenRegion()); open(devName, mode); return; } // note: grabber is self-managed and will destroy itself when done ScreenshotGrabber* screenshotGrabber = new ScreenshotGrabber; auto onGrabbed = [screenshotGrabber, devName, this] (QRect region) { VideoMode mode(region); mode.width = mode.width / 2 * 2; mode.height = mode.height / 2 * 2; // Needed, if the virtual screen origin is the top left corner of the primary screen QRect screen = QApplication::primaryScreen()->virtualGeometry(); mode.x += screen.x(); mode.y += screen.y(); Settings::getInstance().setScreenRegion(mode.toRect()); Settings::getInstance().setScreenGrabbed(true); open(devName, mode); }; connect(screenshotGrabber, &ScreenshotGrabber::regionChosen, this, onGrabbed, Qt::QueuedConnection); screenshotGrabber->showGrabber(); return; } Settings::getInstance().setScreenGrabbed(false); open(devName, mode); }