void QDeclarativeCameraFocus::setFocusPointMode(QDeclarativeCamera::FocusPointMode mode) { if (mode != focusPointMode()) { m_focus->setFocusPointMode(QCameraFocus::FocusPointMode(mode)); emit focusPointModeChanged(focusPointMode()); } }
void BbCameraFocusControl::setFocusPointMode(QCameraFocus::FocusPointMode mode) { if (m_session->status() != QCamera::ActiveStatus) return; if (m_focusPointMode == mode) return; m_focusPointMode = mode; emit focusPointModeChanged(m_focusPointMode); if (m_focusPointMode == QCameraFocus::FocusPointAuto) { //TODO: is this correct? const camera_error_t result = camera_set_focus_regions(m_session->handle(), 0, 0); if (result != CAMERA_EOK) { qWarning() << "Unable to set focus region:" << result; return; } emit focusZonesChanged(); } else if (m_focusPointMode == QCameraFocus::FocusPointCenter) { // get the size of the viewfinder int viewfinderWidth = 0; int viewfinderHeight = 0; if (!retrieveViewfinderSize(&viewfinderWidth, &viewfinderHeight)) return; // define a 40x40 pixel focus region in the center of the viewfinder camera_region_t focusRegion; focusRegion.left = (viewfinderWidth / 2) - 20; focusRegion.top = (viewfinderHeight / 2) - 20; focusRegion.width = 40; focusRegion.height = 40; camera_error_t result = camera_set_focus_regions(m_session->handle(), 1, &focusRegion); if (result != CAMERA_EOK) { qWarning() << "Unable to set focus region:" << result; return; } // re-set focus mode to apply focus region changes camera_focusmode_t focusMode = CAMERA_FOCUSMODE_OFF; result = camera_get_focus_mode(m_session->handle(), &focusMode); camera_set_focus_mode(m_session->handle(), focusMode); emit focusZonesChanged(); } else if (m_focusPointMode == QCameraFocus::FocusPointFaceDetection) { //TODO: implement later } else if (m_focusPointMode == QCameraFocus::FocusPointCustom) { updateCustomFocusRegion(); } }
void QAndroidCameraFocusControl::onCameraOpened() { connect(m_session->camera(), SIGNAL(previewSizeChanged()), this, SLOT(onViewportSizeChanged())); connect(m_session->camera(), SIGNAL(autoFocusStarted()), this, SLOT(onAutoFocusStarted())); connect(m_session->camera(), SIGNAL(autoFocusComplete(bool)), this, SLOT(onAutoFocusComplete(bool))); m_supportedFocusModes.clear(); m_continuousPictureFocusSupported = false; m_continuousVideoFocusSupported = false; m_focusPointMode = QCameraFocus::FocusPointAuto; m_actualFocusPoint = QPointF(0.5, 0.5); m_customFocusPoint = QPointF(); m_supportedFocusPointModes.clear(); m_focusZones.clear(); QStringList focusModes = m_session->camera()->getSupportedFocusModes(); for (int i = 0; i < focusModes.size(); ++i) { const QString &focusMode = focusModes.at(i); if (focusMode == QLatin1String("auto")) { m_supportedFocusModes << QCameraFocus::AutoFocus; } else if (focusMode == QLatin1String("continuous-picture")) { m_supportedFocusModes << QCameraFocus::ContinuousFocus; m_continuousPictureFocusSupported = true; } else if (focusMode == QLatin1String("continuous-video")) { m_supportedFocusModes << QCameraFocus::ContinuousFocus; m_continuousVideoFocusSupported = true; } else if (focusMode == QLatin1String("edof")) { m_supportedFocusModes << QCameraFocus::HyperfocalFocus; } else if (focusMode == QLatin1String("fixed")) { m_supportedFocusModes << QCameraFocus::ManualFocus; } else if (focusMode == QLatin1String("infinity")) { m_supportedFocusModes << QCameraFocus::InfinityFocus; } else if (focusMode == QLatin1String("macro")) { m_supportedFocusModes << QCameraFocus::MacroFocus; } } m_supportedFocusPointModes << QCameraFocus::FocusPointAuto; if (m_session->camera()->getMaxNumFocusAreas() > 0) m_supportedFocusPointModes << QCameraFocus::FocusPointCenter << QCameraFocus::FocusPointCustom; emit focusModeChanged(focusMode()); emit focusPointModeChanged(m_focusPointMode); emit customFocusPointChanged(m_customFocusPoint); emit focusZonesChanged(); }
void CameraBinFocus::setFocusPointMode(QCameraFocus::FocusPointMode mode) { GstElement *source = m_session->cameraSource(); if (m_focusPointMode == mode || !source) return; #if GST_CHECK_VERSION(1,0,0) if (m_focusPointMode == QCameraFocus::FocusPointFaceDetection) { g_object_set (G_OBJECT(source), "detect-faces", FALSE, NULL); if (GstPad *pad = gst_element_get_static_pad(source, "vfsrc")) { removeProbeFromPad(pad); gst_object_unref(GST_OBJECT(pad)); } m_faceResetTimer.stop(); m_faceFocusRects.clear(); QMutexLocker locker(&m_mutex); m_faces.clear(); } #endif if (m_focusPointMode != QCameraFocus::FocusPointAuto) resetFocusPoint(); switch (mode) { case QCameraFocus::FocusPointAuto: case QCameraFocus::FocusPointCustom: break; #if GST_CHECK_VERSION(1,0,0) case QCameraFocus::FocusPointFaceDetection: if (g_object_class_find_property(G_OBJECT_GET_CLASS(source), "detect-faces")) { if (GstPad *pad = gst_element_get_static_pad(source, "vfsrc")) { addProbeToPad(pad); g_object_set (G_OBJECT(source), "detect-faces", TRUE, NULL); break; } } return; #endif default: return; } m_focusPointMode = mode; emit focusPointModeChanged(m_focusPointMode); emit focusZonesChanged(); }
void CameraBinFocus::setFocusPointMode(QCameraFocus::FocusPointMode mode) { Q_UNUSED(mode); if (m_focusPointMode != mode && (mode == QCameraFocus::FocusPointAuto || mode == QCameraFocus::FocusPointCustom)) { m_focusPointMode = mode; if (m_focusPointMode == QCameraFocus::FocusPointAuto) resetFocusPoint(); emit focusPointModeChanged(m_focusPointMode); } }
void QAndroidCameraFocusControl::setFocusPointMode(QCameraFocus::FocusPointMode mode) { if (!m_session->camera() || m_focusPointMode == mode || !isFocusPointModeSupported(mode)) return; m_focusPointMode = mode; if (mode == QCameraFocus::FocusPointCustom) { m_actualFocusPoint = m_customFocusPoint; } else { // FocusPointAuto | FocusPointCenter // note: there is no way to know the actual focus point in FocusPointAuto mode, // so just report the focus point to be at the center of the frame m_actualFocusPoint = QPointF(0.5, 0.5); } updateFocusZones(); setCameraFocusArea(); emit focusPointModeChanged(mode); }