qcamsrc: add binning property

This commit is contained in:
Joshua M. Doe 2021-02-12 15:31:12 -05:00
parent 6c62aa3548
commit b13bcc5212
2 changed files with 16 additions and 2 deletions

View File

@ -78,7 +78,8 @@ enum
PROP_X, PROP_X,
PROP_Y, PROP_Y,
PROP_WIDTH, PROP_WIDTH,
PROP_HEIGHT PROP_HEIGHT,
PROP_BINNING
}; };
#define DEFAULT_PROP_DEVICE_INDEX 0 #define DEFAULT_PROP_DEVICE_INDEX 0
@ -92,7 +93,7 @@ enum
#define DEFAULT_PROP_Y 0 #define DEFAULT_PROP_Y 0
#define DEFAULT_PROP_WIDTH 0 #define DEFAULT_PROP_WIDTH 0
#define DEFAULT_PROP_HEIGHT 0 #define DEFAULT_PROP_HEIGHT 0
#define DEFAULT_PROP_BINNING 1
/* pad templates */ /* pad templates */
static GstStaticPadTemplate gst_qcamsrc_src_template = static GstStaticPadTemplate gst_qcamsrc_src_template =
@ -207,6 +208,10 @@ gst_qcamsrc_class_init (GstQcamSrcClass * klass)
g_param_spec_int ("height", "ROI height", "ROI height", 0, G_MAXINT, g_param_spec_int ("height", "ROI height", "ROI height", 0, G_MAXINT,
DEFAULT_PROP_HEIGHT, DEFAULT_PROP_HEIGHT,
(GParamFlags) (G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE))); (GParamFlags) (G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE)));
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BINNING,
g_param_spec_int ("binning", "Binning", "Symmetrical binning", 1, 8,
DEFAULT_PROP_BINNING,
(GParamFlags) (G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE)));
} }
static void static void
@ -222,6 +227,7 @@ gst_qcamsrc_reset (GstQcamSrc * src)
src->y = DEFAULT_PROP_Y; src->y = DEFAULT_PROP_Y;
src->width = DEFAULT_PROP_WIDTH; src->width = DEFAULT_PROP_WIDTH;
src->height = DEFAULT_PROP_HEIGHT; src->height = DEFAULT_PROP_HEIGHT;
src->binning = DEFAULT_PROP_BINNING;
src->last_frame_count = 0; src->last_frame_count = 0;
src->total_dropped_frames = 0; src->total_dropped_frames = 0;
@ -329,6 +335,9 @@ gst_qcamsrc_set_property (GObject * object, guint property_id,
case PROP_HEIGHT: case PROP_HEIGHT:
src->height = g_value_get_int (value); src->height = g_value_get_int (value);
break; break;
case PROP_BINNING:
src->binning = g_value_get_int (value);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break; break;
@ -378,6 +387,9 @@ gst_qcamsrc_get_property (GObject * object, guint property_id,
case PROP_HEIGHT: case PROP_HEIGHT:
g_value_set_int (value, src->height); g_value_set_int (value, src->height);
break; break;
case PROP_BINNING:
g_value_set_int (value, src->binning);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break; break;
@ -513,6 +525,7 @@ gst_qcamsrc_setup_stream (GstQcamSrc * src)
} }
err = QCam_SetParam (&src->qsettings, qprmImageFormat, src->format); err = QCam_SetParam (&src->qsettings, qprmImageFormat, src->format);
err = QCam_SetParam (&src->qsettings, qprmBinning, src->binning);
err = QCam_SetParam (&src->qsettings, qprmRoiX, src->x); err = QCam_SetParam (&src->qsettings, qprmRoiX, src->x);
err = QCam_SetParam (&src->qsettings, qprmRoiX, src->y); err = QCam_SetParam (&src->qsettings, qprmRoiX, src->y);
if (src->width > 0) if (src->width > 0)

View File

@ -56,6 +56,7 @@ struct _GstQcamSrc
gint y; gint y;
gint width; gint width;
gint height; gint height;
gint binning;
GAsyncQueue *queue; GAsyncQueue *queue;
GstClockTime base_time; GstClockTime base_time;