Ejemplo n.º 1
0
void QDeclarativeCameraFocus::setFocusPointMode(QDeclarativeCamera::FocusPointMode mode)
{
    if (mode != focusPointMode()) {
        m_focus->setFocusPointMode(QCameraFocus::FocusPointMode(mode));
        emit focusPointModeChanged(focusPointMode());
    }
}
Ejemplo n.º 2
0
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();
    }
}
Ejemplo n.º 3
0
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();
}
Ejemplo n.º 4
0
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();
}
Ejemplo n.º 5
0
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);

    }
}
Ejemplo n.º 6
0
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);
}