qcamsrc: add region of interest (ROI) properties
This commit is contained in:
parent
c72458c918
commit
f1b31927f3
@ -74,7 +74,11 @@ enum
|
|||||||
PROP_EXPOSURE,
|
PROP_EXPOSURE,
|
||||||
PROP_GAIN,
|
PROP_GAIN,
|
||||||
PROP_OFFSET,
|
PROP_OFFSET,
|
||||||
PROP_FORMAT
|
PROP_FORMAT,
|
||||||
|
PROP_X,
|
||||||
|
PROP_Y,
|
||||||
|
PROP_WIDTH,
|
||||||
|
PROP_HEIGHT
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DEFAULT_PROP_DEVICE_INDEX 0
|
#define DEFAULT_PROP_DEVICE_INDEX 0
|
||||||
@ -84,6 +88,10 @@ enum
|
|||||||
#define DEFAULT_PROP_GAIN 1.0
|
#define DEFAULT_PROP_GAIN 1.0
|
||||||
#define DEFAULT_PROP_OFFSET 0
|
#define DEFAULT_PROP_OFFSET 0
|
||||||
#define DEFAULT_PROP_FORMAT qfmtMono16
|
#define DEFAULT_PROP_FORMAT qfmtMono16
|
||||||
|
#define DEFAULT_PROP_X 0
|
||||||
|
#define DEFAULT_PROP_Y 0
|
||||||
|
#define DEFAULT_PROP_WIDTH 0
|
||||||
|
#define DEFAULT_PROP_HEIGHT 0
|
||||||
|
|
||||||
|
|
||||||
/* pad templates */
|
/* pad templates */
|
||||||
@ -182,6 +190,22 @@ gst_qcamsrc_class_init (GstQcamSrcClass * klass)
|
|||||||
g_param_spec_int ("format", "Image format",
|
g_param_spec_int ("format", "Image format",
|
||||||
"Image format (2=GRAY8, 3=GRAY16_LE)", 2, 3, DEFAULT_PROP_FORMAT,
|
"Image format (2=GRAY8, 3=GRAY16_LE)", 2, 3, DEFAULT_PROP_FORMAT,
|
||||||
(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_X,
|
||||||
|
g_param_spec_int ("x", "ROI x pixel",
|
||||||
|
"ROI x pixel position", 0, G_MAXINT, DEFAULT_PROP_X,
|
||||||
|
(GParamFlags) (G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE)));
|
||||||
|
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_Y,
|
||||||
|
g_param_spec_int ("y", "ROI y pixel",
|
||||||
|
"ROI y pixel position", 0, G_MAXINT, DEFAULT_PROP_Y,
|
||||||
|
(GParamFlags) (G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE)));
|
||||||
|
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_WIDTH,
|
||||||
|
g_param_spec_int ("width", "ROI width",
|
||||||
|
"ROI width", 0, G_MAXINT, DEFAULT_PROP_WIDTH,
|
||||||
|
(GParamFlags) (G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE)));
|
||||||
|
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_HEIGHT,
|
||||||
|
g_param_spec_int ("height", "ROI height",
|
||||||
|
"ROI height", 0, G_MAXINT, DEFAULT_PROP_HEIGHT,
|
||||||
|
(GParamFlags) (G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -193,6 +217,10 @@ gst_qcamsrc_reset (GstQcamSrc * src)
|
|||||||
src->gain = DEFAULT_PROP_GAIN;
|
src->gain = DEFAULT_PROP_GAIN;
|
||||||
src->offset = DEFAULT_PROP_OFFSET;
|
src->offset = DEFAULT_PROP_OFFSET;
|
||||||
src->format = DEFAULT_PROP_FORMAT;
|
src->format = DEFAULT_PROP_FORMAT;
|
||||||
|
src->x = DEFAULT_PROP_X;
|
||||||
|
src->y = DEFAULT_PROP_Y;
|
||||||
|
src->width = DEFAULT_PROP_WIDTH;
|
||||||
|
src->height = DEFAULT_PROP_HEIGHT;
|
||||||
|
|
||||||
src->last_frame_count = 0;
|
src->last_frame_count = 0;
|
||||||
src->total_dropped_frames = 0;
|
src->total_dropped_frames = 0;
|
||||||
@ -202,9 +230,6 @@ gst_qcamsrc_reset (GstQcamSrc * src)
|
|||||||
src->caps = NULL;
|
src->caps = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
src->width = 0;
|
|
||||||
src->height = 0;
|
|
||||||
|
|
||||||
if (src->queue) {
|
if (src->queue) {
|
||||||
// TODO: remove dangling buffers
|
// TODO: remove dangling buffers
|
||||||
g_async_queue_unref (src->queue);
|
g_async_queue_unref (src->queue);
|
||||||
@ -297,6 +322,18 @@ gst_qcamsrc_set_property (GObject * object, guint property_id,
|
|||||||
case PROP_FORMAT:
|
case PROP_FORMAT:
|
||||||
src->format = g_value_get_int (value);
|
src->format = g_value_get_int (value);
|
||||||
break;
|
break;
|
||||||
|
case PROP_X:
|
||||||
|
src->x = g_value_get_int (value);
|
||||||
|
break;
|
||||||
|
case PROP_Y:
|
||||||
|
src->y = g_value_get_int (value);
|
||||||
|
break;
|
||||||
|
case PROP_WIDTH:
|
||||||
|
src->width = GST_ROUND_DOWN_4 (g_value_get_int (value));
|
||||||
|
break;
|
||||||
|
case PROP_HEIGHT:
|
||||||
|
src->height = 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;
|
||||||
@ -334,6 +371,18 @@ gst_qcamsrc_get_property (GObject * object, guint property_id,
|
|||||||
case PROP_FORMAT:
|
case PROP_FORMAT:
|
||||||
g_value_set_int (value, src->format);
|
g_value_set_int (value, src->format);
|
||||||
break;
|
break;
|
||||||
|
case PROP_X:
|
||||||
|
g_value_set_int (value, src->x);
|
||||||
|
break;
|
||||||
|
case PROP_Y:
|
||||||
|
g_value_set_int (value, src->y);
|
||||||
|
break;
|
||||||
|
case PROP_WIDTH:
|
||||||
|
g_value_set_int (value, src->width);
|
||||||
|
break;
|
||||||
|
case PROP_HEIGHT:
|
||||||
|
g_value_set_int (value, src->height);
|
||||||
|
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;
|
||||||
@ -467,6 +516,12 @@ 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, qprmRoiX, src->x);
|
||||||
|
err = QCam_SetParam (&src->qsettings, qprmRoiX, src->y);
|
||||||
|
if (src->width > 0)
|
||||||
|
err = QCam_SetParam (&src->qsettings, qprmRoiWidth, src->width);
|
||||||
|
if (src->height > 0)
|
||||||
|
err = QCam_SetParam (&src->qsettings, qprmRoiHeight, src->height);
|
||||||
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);
|
||||||
|
|||||||
@ -51,6 +51,10 @@ struct _GstQcamSrc
|
|||||||
gfloat gain;
|
gfloat gain;
|
||||||
gint offset;
|
gint offset;
|
||||||
gint format;
|
gint format;
|
||||||
|
gint x;
|
||||||
|
gint y;
|
||||||
|
gint width;
|
||||||
|
gint height;
|
||||||
|
|
||||||
GAsyncQueue *queue;
|
GAsyncQueue *queue;
|
||||||
GstClockTime base_time;
|
GstClockTime base_time;
|
||||||
@ -59,8 +63,6 @@ struct _GstQcamSrc
|
|||||||
guint32 total_dropped_frames;
|
guint32 total_dropped_frames;
|
||||||
|
|
||||||
GstCaps *caps;
|
GstCaps *caps;
|
||||||
gint width;
|
|
||||||
gint height;
|
|
||||||
|
|
||||||
gboolean stop_requested;
|
gboolean stop_requested;
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user