qcamsrc: send camera settings as a group

This commit is contained in:
Joshua M. Doe 2021-01-21 13:57:48 -05:00
parent 9a99935cad
commit 8dcf24d0f3
2 changed files with 14 additions and 9 deletions

View File

@ -268,7 +268,6 @@ static void
gst_qcamsrc_set_exposure (GstQcamSrc * src, unsigned long exposure) gst_qcamsrc_set_exposure (GstQcamSrc * src, unsigned long exposure)
{ {
QCam_SetParam (&src->qsettings, qprmExposure, exposure); QCam_SetParam (&src->qsettings, qprmExposure, exposure);
QCam_SendSettingsToCam (src->handle, &src->qsettings);
} }
static void static void
@ -276,14 +275,12 @@ gst_qcamsrc_set_gain (GstQcamSrc * src, float gain)
{ {
QCam_SetParam (&src->qsettings, qprmNormalizedGain, QCam_SetParam (&src->qsettings, qprmNormalizedGain,
(unsigned long) (gain * 1000000)); (unsigned long) (gain * 1000000));
QCam_SendSettingsToCam (src->handle, &src->qsettings);
} }
static void static void
gst_qcamsrc_set_offset (GstQcamSrc * src, long offset) gst_qcamsrc_set_offset (GstQcamSrc * src, long offset)
{ {
QCam_SetParamS32 (&src->qsettings, qprmS32AbsoluteOffset, offset); QCam_SetParamS32 (&src->qsettings, qprmS32AbsoluteOffset, offset);
QCam_SendSettingsToCam (src->handle, &src->qsettings);
} }
@ -307,18 +304,15 @@ gst_qcamsrc_set_property (GObject * object, guint property_id,
break; break;
case PROP_EXPOSURE: case PROP_EXPOSURE:
src->exposure = g_value_get_uint (value); src->exposure = g_value_get_uint (value);
if (src->handle) src->send_settings = TRUE;
gst_qcamsrc_set_exposure (src, src->exposure);
break; break;
case PROP_GAIN: case PROP_GAIN:
src->gain = g_value_get_double (value); src->gain = g_value_get_double (value);
if (src->handle) src->send_settings = TRUE;
gst_qcamsrc_set_gain (src, src->gain);
break; break;
case PROP_OFFSET: case PROP_OFFSET:
src->offset = g_value_get_int (value); src->offset = g_value_get_int (value);
if (src->handle) src->send_settings = TRUE;
gst_qcamsrc_set_offset (src, src->offset);
break; break;
case PROP_FORMAT: case PROP_FORMAT:
src->format = g_value_get_int (value); src->format = g_value_get_int (value);
@ -528,6 +522,8 @@ gst_qcamsrc_setup_stream (GstQcamSrc * src)
gst_qcamsrc_set_exposure (src, src->exposure); gst_qcamsrc_set_exposure (src, src->exposure);
gst_qcamsrc_set_gain (src, src->gain); gst_qcamsrc_set_gain (src, src->gain);
gst_qcamsrc_set_offset (src, src->offset); gst_qcamsrc_set_offset (src, src->offset);
QCam_SendSettingsToCam (src->handle, &src->qsettings);
src->send_settings = FALSE;
err = QCam_GetInfo (src->handle, qinfCcdWidth, &width); err = QCam_GetInfo (src->handle, qinfCcdWidth, &width);
err = QCam_GetInfo (src->handle, qinfCcdHeight, &height); err = QCam_GetInfo (src->handle, qinfCcdHeight, &height);
@ -723,6 +719,14 @@ gst_qcamsrc_create (GstPushSrc * psrc, GstBuffer ** buf)
return GST_FLOW_FLUSHING; return GST_FLOW_FLUSHING;
} }
if (src->handle && src->send_settings) {
gst_qcamsrc_set_exposure (src, src->exposure);
gst_qcamsrc_set_gain (src, src->gain);
gst_qcamsrc_set_offset (src, src->offset);
QCam_QueueSettings (src->handle, &src->qsettings, NULL, 0, 0, 0);
src->send_settings = FALSE;
}
return GST_FLOW_OK; return GST_FLOW_OK;
} }

View File

@ -41,6 +41,7 @@ struct _GstQcamSrc
/* camera handle */ /* camera handle */
QCam_Handle handle; QCam_Handle handle;
gboolean send_settings;
QCam_Settings qsettings; QCam_Settings qsettings;
/* properties */ /* properties */