Пример #1
0
void BbCameraFlashControl::setFlashMode(QCameraExposure::FlashModes mode)
{
    if (m_flashMode == mode)
        return;

    if (m_session->status() != QCamera::ActiveStatus) // can only be changed when viewfinder is active
        return;

    if (m_flashMode == QCameraExposure::FlashVideoLight) {
        const camera_error_t result = camera_config_videolight(m_session->handle(), CAMERA_VIDEOLIGHT_OFF);
        if (result != CAMERA_EOK)
            qWarning() << "Unable to switch off video light:" << result;
    }

    m_flashMode = mode;

    if (m_flashMode == QCameraExposure::FlashVideoLight) {
        const camera_error_t result = camera_config_videolight(m_session->handle(), CAMERA_VIDEOLIGHT_ON);
        if (result != CAMERA_EOK)
            qWarning() << "Unable to switch on video light:" << result;
    } else {
        camera_flashmode_t flashMode = CAMERA_FLASH_AUTO;

        if (m_flashMode.testFlag(QCameraExposure::FlashAuto)) flashMode = CAMERA_FLASH_AUTO;
        else if (mode.testFlag(QCameraExposure::FlashOff)) flashMode = CAMERA_FLASH_OFF;
        else if (mode.testFlag(QCameraExposure::FlashOn)) flashMode = CAMERA_FLASH_ON;

        const camera_error_t result = camera_config_flash(m_session->handle(), flashMode);
        if (result != CAMERA_EOK)
            qWarning() << "Unable to configure flash:" << result;
    }
}
 void ActionRecordPicture::execute(ExecutionState* state)
 {
     DataModelLogger* RUNLOG = state->getLogger();
     camera_unit_t cameraUnit =
             getParameter("CAMERA", state) == "BACK" ? CAMERA_UNIT_REAR : CAMERA_UNIT_FRONT;
     if (!state->getRuntimeResources()->isCameraOk(
             state->getRuntimeResources()->setupCamera(cameraUnit, CAMERA_MODE_RW))) {
         LOG->error("Failed to get camera");
         RUNLOG->error("Failed to get camera");
         return;
     }
     camera_handle_t camera = state->getRuntimeResources()->getCamera();
     if (!state->getRuntimeResources()->isCameraOk(
             _camera_set_photovf_property(camera, CAMERA_IMGPROP_END))) {
         LOG->error("Failed to set photo view finder properties");
         RUNLOG->error("Failed to set photo view finder properties");
         return;
     }
     if (!state->getRuntimeResources()->isCameraOk(
             _camera_set_photo_property(camera, CAMERA_IMGPROP_END))) {
         LOG->error("Failed to set photo properties");
         RUNLOG->error("Failed to set photo properties");
         return;
     }
     state->getRuntimeResources()->callbackReset();
     if (!state->getRuntimeResources()->isCameraOk(
             camera_start_photo_viewfinder(camera, NULL, viewFinderStatusCallback,
                     (void*) state->getRuntimeResources()))) {
         LOG->error("Failed to start video viewfinder");
         RUNLOG->error("Failed to start video viewfinder");
         return;
     }
     if (!state->getRuntimeResources()->callbackWait(5000)) {
         LOG->warning("Timed out waiting for view finder to start");
     }
     std::string flashModeStr = getParameter("FLASH", state);
     camera_flashmode_t flashMode;
     if (flashModeStr == "ON") {
         flashMode = CAMERA_FLASH_ON;
     } else if (flashModeStr == "OFF") {
         flashMode = CAMERA_FLASH_OFF;
     } else {
         flashMode = CAMERA_FLASH_AUTO;
     }
     if (!state->getRuntimeResources()->isCameraOk(camera_config_flash(camera, flashMode))) {
         LOG->error("Failed to set flash setting");
         RUNLOG->error("Failed to set flash setting");
         return;
     }
     std::string filename;
     if (isValueTrue(getParameter("APPENDTIME", state))) {
         filename = state->getRuntimeResources()->uniqueFilename(getParameter("OUTFILE", state));
     } else {
         filename = getParameter("OUTFILE", state);
     }
     state->setUserProperty("PICTURE_FILENAME", filename);
     state->setExecutionProperty("ACTION_ActionRecordPicture_OUTFILE", filename);
     state->getRuntimeResources()->callbackReset();
     if (!state->getRuntimeResources()->isCameraOk(
             camera_take_photo(camera, NULL, NULL, NULL, photoRecordingStatusCallback,
                     (void*) state, false))) {
         LOG->error("Failed to take photo");
         RUNLOG->error("Failed to take photo");
         return;
     }
     if (!state->getRuntimeResources()->callbackWait(3000)) {
         LOG->warning("Timed out waiting for view finder to start");
         return;
     }
     if (!state->getRuntimeResources()->isCameraOk(camera_stop_photo_viewfinder(camera))) {
         LOG->error("Failed to stop photo viewfinder");
         RUNLOG->error("Failed to stop photo viewfinder");
         return;
     }
     state->getRuntimeResources()->destroyCamera();
     RUNLOG->debug("Photo captured");
 }