void CameraBinFocus::_q_handleCameraStatusChange(QCamera::Status status) { m_cameraStatus = status; if (status == QCamera::ActiveStatus) { if (GstPad *pad = gst_element_get_static_pad(m_session->cameraSource(), "vfsrc")) { if (GstCaps *caps = qt_gst_pad_get_current_caps(pad)) { if (GstStructure *structure = gst_caps_get_structure(caps, 0)) { int width = 0; int height = 0; gst_structure_get_int(structure, "width", &width); gst_structure_get_int(structure, "height", &height); setViewfinderResolution(QSize(width, height)); } gst_caps_unref(caps); } gst_object_unref(GST_OBJECT(pad)); } if (m_focusPointMode == QCameraFocus::FocusPointCustom) { updateRegionOfInterest(m_focusRect); } } else { _q_setFocusStatus(QCamera::Unlocked, QCamera::LockLost); resetFocusPoint(); } }
QT_BEGIN_NAMESPACE CameraBinFocus::CameraBinFocus(CameraBinSession *session) :QCameraFocusControl(session), m_session(session), m_cameraState(QCamera::UnloadedState), m_focusMode(QCameraFocus::AutoFocus), m_focusPointMode(QCameraFocus::FocusPointAuto), m_focusStatus(QCamera::Unlocked), m_focusZoneStatus(QCameraFocusZone::Selected), m_focusPoint(0.5, 0.5), m_focusRect(0, 0, 0.3, 0.3) { m_focusRect.moveCenter(m_focusPoint); setViewfinderResolution(QSize(1280, 720)); gst_photography_set_focus_mode(m_session->photography(), GST_PHOTOGRAPHY_FOCUS_MODE_AUTO); connect(m_session, SIGNAL(stateChanged(QCamera::State)), this, SLOT(_q_handleCameraStateChange(QCamera::State))); }