Unsolved QCamera's FocusPointMode not works on Android
-
Hi,
after searching here and in internet and trying different ways I can still not use the FocusPointMode of QCameraFocus for a LG G2 and Honor6, despite other camera apps works correctly.My requirement is to show a user of my camera app when the image in VideoOutput is focused, e.g during focusing the color of the cross is red, and if focused it's changing to green.
Qt docu:
"You can use this information to present visual feedback - for example, drawing rectangles around areas of the camera frame that are in focus, or changing the color of a zone as it comes into focus."focus->setFocusPointMode(QCameraFocus::FocusPointAuto); QList<QCameraFocusZone> zones = focus->focusZones(); foreach (QCameraFocusZone zone, zones) { if (zone.status() == QCameraFocusZone::Focused) { // Draw a green box at zone.area() } else if (zone.status() == QCameraFocusZone::Selected) { // This area is selected for autofocusing, but is not in focus // Draw a yellow box at zone.area() } }
Related signal from Qt docu:
void QCameraFocus::focusZonesChanged()
This signal is emitted when the set of zones used in autofocusing is changed.
This can change when a zone is focused or loses focus, or new focus zones have been detected.My Code:
m_pCamFocus = m_pCamera->focus(); bool isav = m_pCamFocus->isAvailable(); \\ true bool fm1 = m_pCamFocus->isFocusModeSupported(QCameraFocus::ManualFocus); \\ false bool fm2 = m_pCamFocus->isFocusModeSupported(QCameraFocus::HyperfocalFocus); \\ false bool fm3 = m_pCamFocus->isFocusModeSupported(QCameraFocus::InfinityFocus); \\ true bool fm4 = m_pCamFocus->isFocusModeSupported(QCameraFocus::AutoFocus); \\ true bool fm5 = m_pCamFocus->isFocusModeSupported(QCameraFocus::ContinuousFocus); \\ true bool fm6 = m_pCamFocus->isFocusModeSupported(QCameraFocus::MacroFocus); \\ true m_pCamFocus->setFocusMode(QCameraFocus::ContinuousFocus); QCameraFocus::FocusPointMode fpm = m_pCamFocus->focusPointMode(); bool fpm1 = m_pCamFocus->isFocusPointModeSupported(QCameraFocus::FocusPointAuto); \\ true bool fpm2 = m_pCamFocus->isFocusPointModeSupported(QCameraFocus::FocusPointCenter); \\ true bool fpm3 = m_pCamFocus->isFocusPointModeSupported(QCameraFocus::FocusPointFaceDetection); \\ false bool fpm4 = m_pCamFocus->isFocusPointModeSupported(QCameraFocus::FocusPointCustom); \\ true m_pCamFocus->setFocusPointMode(QCameraFocus::FocusPointAuto); connect(m_pCamFocus,SIGNAL(focusZonesChanged()),this,SLOT(updFocus())); ... void Qml::updFocus() { QList<QCameraFocusZone> fpl = m_pCamFocus->focusZones(); foreach (QCameraFocusZone var, fpl) { qDebug() << "fpl" << var.status(); \\ 2 qDebug() << "area" << var.area(); \\ QRectF(0.486979,0.482639 0.0260417x0.0347222) } }
Independently which FocusPointMode I select the result is always the same. The signal focusZonesChanged() is fired once and status=2 and area=QRectF(center of Videooutput).
I tried also with services
service = m_pCamera->service(); if (service) { focusControl = qobject_cast<QCameraFocusControl *>(service->requestControl(QCameraFocusControl_iid)); focusControl->setFocusPointMode(QCameraFocus::FocusPointAuto); } connect(focusControl,SIGNAL(focusZonesChanged()),this,SLOT(updFocus()));
Conspicuous in the Appilcation output window of Qt Creator I see the message
D/CameraClient( 338): cancelAutoFocus (pid 18372)
So my guess is that the signal focusZonesChanged() is fired only once because the AutoFocus is cancelled. But why and on both different smartphones? Other apps works correctly.
Did I missunderstand something?
Thanks in advance for your help...