Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/GStreamer/gst-plugins-good.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorPhilippe Normand <philn@igalia.com>2015-05-11 12:16:52 +0300
committerTim-Philipp Müller <tim@centricular.com>2020-07-10 18:45:13 +0300
commitcda483cb3c18b6666efbdfaf5a4800e30b888606 (patch)
tree09b447c307608a9b9beb7ecc2be306f5f65bafca /sys
parent1a4870d13ddaf557fe62952ba34a56484d8418fe (diff)
rpicamsrc: Basic orientation interface support
The (h,v)flip attributes are now supported through this interface. It should also be possible to support (h,v)center attributes using the ROI properties.
Diffstat (limited to 'sys')
-rw-r--r--sys/rpicamsrc/gstrpicamsrc.c78
1 files changed, 77 insertions, 1 deletions
diff --git a/sys/rpicamsrc/gstrpicamsrc.c b/sys/rpicamsrc/gstrpicamsrc.c
index 0e831e5bb..8272188e0 100644
--- a/sys/rpicamsrc/gstrpicamsrc.c
+++ b/sys/rpicamsrc/gstrpicamsrc.c
@@ -188,6 +188,7 @@ static void gst_rpi_cam_src_finalize (GObject *object);
static void gst_rpi_cam_src_colorbalance_init (GstColorBalanceInterface *
iface);
+static void gst_rpi_cam_src_orientation_init (GstVideoOrientationInterface * iface);
static void gst_rpi_cam_src_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec);
@@ -210,7 +211,9 @@ static gboolean gst_rpi_cam_src_send_event (GstElement * element,
G_DEFINE_TYPE_WITH_CODE (GstRpiCamSrc, gst_rpi_cam_src,
GST_TYPE_PUSH_SRC,
G_IMPLEMENT_INTERFACE (GST_TYPE_COLOR_BALANCE,
- gst_rpi_cam_src_colorbalance_init));
+ gst_rpi_cam_src_colorbalance_init);
+ G_IMPLEMENT_INTERFACE (GST_TYPE_VIDEO_ORIENTATION,
+ gst_rpi_cam_src_orientation_init));
#define C_ENUM(v) ((gint) v)
@@ -583,6 +586,79 @@ gst_rpi_cam_src_colorbalance_init (GstColorBalanceInterface * iface)
iface->get_balance_type = gst_rpi_cam_src_colorbalance_get_balance_type;
}
+static gboolean
+gst_rpi_cam_src_orientation_get_hflip (GstVideoOrientation * orientation, gboolean * flip)
+{
+ GstRpiCamSrc *src = GST_RPICAMSRC (orientation);
+
+ g_return_val_if_fail (src != NULL, FALSE);
+ g_return_val_if_fail (GST_IS_RPICAMSRC (src), FALSE);
+
+ g_mutex_lock (&src->config_lock);
+ *flip = src->capture_config.camera_parameters.hflip;
+ g_mutex_unlock (&src->config_lock);
+
+ return TRUE;
+}
+
+static gboolean
+gst_rpi_cam_src_orientation_get_vflip (GstVideoOrientation * orientation, gboolean * flip)
+{
+ GstRpiCamSrc *src = GST_RPICAMSRC (orientation);
+
+ g_return_val_if_fail (src != NULL, FALSE);
+ g_return_val_if_fail (GST_IS_RPICAMSRC (src), FALSE);
+
+ g_mutex_lock (&src->config_lock);
+ *flip = src->capture_config.camera_parameters.vflip;
+ g_mutex_unlock (&src->config_lock);
+
+ return TRUE;
+}
+
+static gboolean
+gst_rpi_cam_src_orientation_set_hflip (GstVideoOrientation * orientation, gboolean flip)
+{
+ GstRpiCamSrc *src = GST_RPICAMSRC (orientation);
+
+ g_return_val_if_fail (src != NULL, FALSE);
+ g_return_val_if_fail (GST_IS_RPICAMSRC (src), FALSE);
+
+ g_mutex_lock (&src->config_lock);
+ src->capture_config.camera_parameters.hflip = flip;
+ src->capture_config.change_flags |= PROP_CHANGE_ORIENTATION;
+ g_mutex_unlock (&src->config_lock);
+
+ return TRUE;
+}
+
+static gboolean
+gst_rpi_cam_src_orientation_set_vflip (GstVideoOrientation * orientation, gboolean flip)
+{
+ GstRpiCamSrc *src = GST_RPICAMSRC (orientation);
+
+ g_return_val_if_fail (src != NULL, FALSE);
+ g_return_val_if_fail (GST_IS_RPICAMSRC (src), FALSE);
+
+ g_mutex_lock (&src->config_lock);
+ src->capture_config.camera_parameters.vflip = flip;
+ src->capture_config.change_flags |= PROP_CHANGE_ORIENTATION;
+ g_mutex_unlock (&src->config_lock);
+
+ return TRUE;
+}
+
+static void
+gst_rpi_cam_src_orientation_init (GstVideoOrientationInterface * iface)
+{
+ iface->get_hflip = gst_rpi_cam_src_orientation_get_hflip;
+ iface->set_hflip = gst_rpi_cam_src_orientation_set_hflip;
+ iface->get_vflip = gst_rpi_cam_src_orientation_get_vflip;
+ iface->set_vflip = gst_rpi_cam_src_orientation_set_vflip;
+
+ /* TODO: hcenter / vcenter support */
+}
+
static void
gst_rpi_cam_src_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec)