diff --git a/src/plugins/gstreamer/camerabin/camerabinflash.cpp b/src/plugins/gstreamer/camerabin/camerabinflash.cpp index bb91e55c..d363a100 100644 --- a/src/plugins/gstreamer/camerabin/camerabinflash.cpp +++ b/src/plugins/gstreamer/camerabin/camerabinflash.cpp @@ -69,6 +69,12 @@ QCameraExposure::FlashModes CameraBinFlash::flashMode() const modes |= QCameraExposure::FlashAuto; break; } + + gboolean torchEnabled = false; + g_object_get(G_OBJECT(m_session->cameraSource()), "video-torch", &torchEnabled, NULL); + if (torchEnabled) + modes |= QCameraExposure::FlashTorch; + return modes; } @@ -84,10 +90,27 @@ void CameraBinFlash::setFlashMode(QCameraExposure::FlashModes mode) else if (mode.testFlag(QCameraExposure::FlashRedEyeReduction)) flashMode = GST_PHOTOGRAPHY_FLASH_MODE_RED_EYE; gst_photography_set_flash_mode(m_session->photography(), flashMode); + + gboolean torchEnabled = false; + g_object_get(G_OBJECT(m_session->cameraSource()), "video-torch", &torchEnabled, NULL); + + gboolean enableTorch = mode.testFlag(QCameraExposure::FlashTorch); + + if (bool(enableTorch) != bool(torchEnabled)) { + g_object_set(G_OBJECT(m_session->cameraSource()), "video-torch", enableTorch, NULL); + } } bool CameraBinFlash::isFlashModeSupported(QCameraExposure::FlashModes mode) const { + + //torch light is allowed only in video capture mode + if (m_session->captureMode() == QCamera::CaptureVideo) { + if (mode == QCameraExposure::FlashTorch || + mode == QCameraExposure::FlashTorch | QCameraExposure::FlashOff) + return true; + } + return mode == QCameraExposure::FlashOff || mode == QCameraExposure::FlashOn || mode == QCameraExposure::FlashAuto ||