PROP_ROTATION,
PROP_HFLIP,
PROP_VFLIP,
- PROP_ORIENTATION,
PROP_ROI_X,
PROP_ROI_Y,
PROP_ROI_W,
PROP_ANNOTATION_TEXT_SIZE,
PROP_ANNOTATION_TEXT_COLOUR,
PROP_ANNOTATION_TEXT_BG_COLOUR,
- PROP_INTRA_REFRESH_TYPE
+ PROP_INTRA_REFRESH_TYPE,
+#ifdef GST_RPI_CAM_SRC_ENABLE_VIDEO_DIRECTION
+ PROP_VIDEO_DIRECTION
+#endif
};
-#define PROP_ORIENTATION_DEFAULT GST_RPI_CAM_ORIENTATION_IDENTITY
-
#define CAMERA_DEFAULT 0
#define BITRATE_DEFAULT 17000000 /* 17Mbit/s default for 1080p */
"alignment = (string) nal, " \
"profile = (string) { baseline, main, high }"
+#ifdef GST_RPI_CAM_SRC_ENABLE_VIDEO_DIRECTION
+#define gst_rpi_cam_src_reset_custom_orientation(src) { src->orientation = GST_VIDEO_ORIENTATION_CUSTOM; }
+#else
+#define gst_rpi_cam_src_reset_custom_orientation(src) { }
+#endif
+
static GstStaticPadTemplate video_src_template = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
static void gst_rpi_cam_src_colorbalance_init (GstColorBalanceInterface *
iface);
static void gst_rpi_cam_src_orientation_init (GstVideoOrientationInterface * iface);
+#ifdef GST_RPI_CAM_SRC_ENABLE_VIDEO_DIRECTION
+static void gst_rpi_cam_src_direction_init (GstVideoDirectionInterface * iface);
+#endif
static void gst_rpi_cam_src_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec);
GST_TYPE_PUSH_SRC,
G_IMPLEMENT_INTERFACE (GST_TYPE_COLOR_BALANCE,
gst_rpi_cam_src_colorbalance_init);
+#ifdef GST_RPI_CAM_SRC_ENABLE_VIDEO_DIRECTION
+ G_IMPLEMENT_INTERFACE (GST_TYPE_VIDEO_DIRECTION,
+ gst_rpi_cam_src_direction_init);
+#endif
G_IMPLEMENT_INTERFACE (GST_TYPE_VIDEO_ORIENTATION,
gst_rpi_cam_src_orientation_init));
#define C_ENUM(v) ((gint) v)
-#define GST_TYPE_RPI_CAM_ORIENTATION (gst_rpi_cam_orientation_get_type())
-
-static const GEnumValue video_orientation_methods[] = {
- {GST_RPI_CAM_ORIENTATION_IDENTITY, "Identity (no rotation)", "none"},
- {GST_RPI_CAM_ORIENTATION_90R, "Rotate clockwise 90 degrees", "clockwise"},
- {GST_RPI_CAM_ORIENTATION_180, "Rotate 180 degrees", "rotate-180"},
- {GST_RPI_CAM_ORIENTATION_90L, "Rotate counter-clockwise 90 degrees",
- "counterclockwise"},
- {GST_RPI_CAM_ORIENTATION_FLIP_HORIZ, "Flip horizontally", "horizontal-flip"},
- {GST_RPI_CAM_ORIENTATION_FLIP_VERT, "Flip vertically", "vertical-flip"},
- {GST_RPI_CAM_ORIENTATION_FLIP_TRANS,
- "Flip across upper left/lower right diagonal", "upper-left-diagonal"},
- {GST_RPI_CAM_ORIENTATION_FLIP_OTHER,
- "Flip across upper right/lower left diagonal", "upper-right-diagonal"},
- {GST_RPI_CAM_ORIENTATION_CUSTOM,
- "Set through custom properties", "custom"},
- {0, NULL, NULL},
-};
-
-static GType
-gst_rpi_cam_orientation_get_type (void)
-{
- static GType rpi_cam_orientation_type = 0;
-
- if (!rpi_cam_orientation_type) {
- rpi_cam_orientation_type = g_enum_register_static ("GstRpiCamOrientation",
- video_orientation_methods);
- }
- return rpi_cam_orientation_type;
-}
-
GType
gst_rpi_cam_src_sensor_mode_get_type (void)
{
g_param_spec_boolean ("vflip", "Vertical Flip",
"Flip capture vertically", FALSE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (gobject_class, PROP_ORIENTATION,
- g_param_spec_enum ("orientation", "Orientation", "Orientation",
- GST_TYPE_RPI_CAM_ORIENTATION, PROP_ORIENTATION_DEFAULT,
- GST_PARAM_CONTROLLABLE | G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
- G_PARAM_STATIC_STRINGS));
g_object_class_install_property (gobject_class, PROP_ROI_X,
g_param_spec_float ("roi-x", "ROI X",
"Normalised region-of-interest X coord", 0, 1.0, 0,
g_param_spec_int ("annotation-text-bg-colour", "Annotation text background colour (VUY)",
"Set the annotation text background colour, as a VUY hex value eg #8080FF, -1 for default", -1,
G_MAXINT, -1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#ifdef GST_RPI_CAM_SRC_ENABLE_VIDEO_DIRECTION
+ g_object_class_override_property (gobject_class, PROP_VIDEO_DIRECTION,
+ "video-direction");
+#endif
gst_element_class_set_static_metadata (gstelement_class,
"Raspberry Pi Camera Source", "Source/Video",
return GST_COLOR_BALANCE_HARDWARE;
}
-static void gst_rpi_cam_src_set_orientation (GstRpiCamSrc * src, GstRpiCamOrientation orientation)
+#ifdef GST_RPI_CAM_SRC_ENABLE_VIDEO_DIRECTION
+static void gst_rpi_cam_src_set_orientation (GstRpiCamSrc * src, GstVideoOrientationMethod orientation)
{
switch (orientation) {
- case GST_RPI_CAM_ORIENTATION_IDENTITY:
+ case GST_VIDEO_ORIENTATION_IDENTITY:
src->capture_config.camera_parameters.rotation = 0;
src->capture_config.camera_parameters.hflip = FALSE;
src->capture_config.camera_parameters.vflip = FALSE;
GST_DEBUG_OBJECT (src, "set orientation identity");
break;
- case GST_RPI_CAM_ORIENTATION_90R:
+ case GST_VIDEO_ORIENTATION_90R:
src->capture_config.camera_parameters.rotation = 90;
src->capture_config.camera_parameters.hflip = FALSE;
src->capture_config.camera_parameters.vflip = FALSE;
GST_DEBUG_OBJECT (src, "set orientation 90R");
break;
- case GST_RPI_CAM_ORIENTATION_180:
+ case GST_VIDEO_ORIENTATION_180:
src->capture_config.camera_parameters.rotation = 180;
src->capture_config.camera_parameters.hflip = FALSE;
src->capture_config.camera_parameters.vflip = FALSE;
GST_DEBUG_OBJECT (src, "set orientation 180");
break;
- case GST_RPI_CAM_ORIENTATION_90L:
+ case GST_VIDEO_ORIENTATION_90L:
src->capture_config.camera_parameters.rotation = 270;
src->capture_config.camera_parameters.hflip = FALSE;
src->capture_config.camera_parameters.vflip = FALSE;
GST_DEBUG_OBJECT (src, "set orientation 90L");
break;
- case GST_RPI_CAM_ORIENTATION_FLIP_HORIZ:
+ case GST_VIDEO_ORIENTATION_HORIZ:
src->capture_config.camera_parameters.rotation = 0;
src->capture_config.camera_parameters.hflip = TRUE;
src->capture_config.camera_parameters.vflip = FALSE;
GST_DEBUG_OBJECT (src, "set orientation hflip");
break;
- case GST_RPI_CAM_ORIENTATION_FLIP_VERT:
+ case GST_VIDEO_ORIENTATION_VERT:
src->capture_config.camera_parameters.rotation = 0;
src->capture_config.camera_parameters.hflip = FALSE;
src->capture_config.camera_parameters.vflip = TRUE;
GST_DEBUG_OBJECT (src, "set orientation vflip");
break;
- case GST_RPI_CAM_ORIENTATION_FLIP_TRANS:
+ case GST_VIDEO_ORIENTATION_UL_LR:
src->capture_config.camera_parameters.rotation = 90;
src->capture_config.camera_parameters.hflip = FALSE;
src->capture_config.camera_parameters.vflip = TRUE;
GST_DEBUG_OBJECT (src, "set orientation trans");
break;
- case GST_RPI_CAM_ORIENTATION_FLIP_OTHER:
+ case GST_VIDEO_ORIENTATION_UR_LL:
src->capture_config.camera_parameters.rotation = 270;
src->capture_config.camera_parameters.hflip = FALSE;
src->capture_config.camera_parameters.vflip = TRUE;
GST_DEBUG_OBJECT (src, "set orientation trans");
break;
- case GST_RPI_CAM_ORIENTATION_CUSTOM:
+ case GST_VIDEO_ORIENTATION_CUSTOM:
break;
default:
GST_WARNING_OBJECT (src, "unsupported orientation %d", orientation);
break;
}
src->orientation =
- orientation >= GST_RPI_CAM_ORIENTATION_IDENTITY &&
- orientation <= GST_RPI_CAM_ORIENTATION_CUSTOM ?
- orientation : GST_RPI_CAM_ORIENTATION_CUSTOM;
+ orientation >= GST_VIDEO_ORIENTATION_IDENTITY &&
+ orientation <= GST_VIDEO_ORIENTATION_CUSTOM ?
+ orientation : GST_VIDEO_ORIENTATION_CUSTOM;
src->capture_config.change_flags |= PROP_CHANGE_ORIENTATION;
}
static void
+gst_rpi_cam_src_direction_init (GstVideoDirectionInterface * iface)
+{
+ /* We implement the video-direction property */
+}
+#endif
+
+static void
gst_rpi_cam_src_colorbalance_init (GstColorBalanceInterface * iface)
{
iface->list_channels = gst_rpi_cam_src_colorbalance_list_channels;
g_return_val_if_fail (GST_IS_RPICAMSRC (src), FALSE);
g_mutex_lock (&src->config_lock);
- src->orientation = GST_RPI_CAM_ORIENTATION_CUSTOM;
+ gst_rpi_cam_src_reset_custom_orientation(src);
src->capture_config.camera_parameters.hflip = flip;
src->capture_config.change_flags |= PROP_CHANGE_ORIENTATION;
g_mutex_unlock (&src->config_lock);
g_return_val_if_fail (GST_IS_RPICAMSRC (src), FALSE);
g_mutex_lock (&src->config_lock);
- src->orientation = GST_RPI_CAM_ORIENTATION_CUSTOM;
+ gst_rpi_cam_src_reset_custom_orientation(src);
src->capture_config.camera_parameters.vflip = flip;
src->capture_config.change_flags |= PROP_CHANGE_ORIENTATION;
g_mutex_unlock (&src->config_lock);
src->capture_config.change_flags |= PROP_CHANGE_SENSOR_SETTINGS;
break;
case PROP_ROTATION:
- src->orientation = GST_RPI_CAM_ORIENTATION_CUSTOM;
+ gst_rpi_cam_src_reset_custom_orientation(src);
src->capture_config.camera_parameters.rotation = g_value_get_int (value);
break;
- case PROP_ORIENTATION:
- gst_rpi_cam_src_set_orientation (src, g_value_get_enum (value));
- break;
case PROP_AWB_MODE:
src->capture_config.camera_parameters.awbMode = g_value_get_enum (value);
src->capture_config.change_flags |= PROP_CHANGE_AWB;
src->capture_config.change_flags |= PROP_CHANGE_IMAGE_COLOUR_EFFECT;
break;
case PROP_HFLIP:
- src->orientation = GST_RPI_CAM_ORIENTATION_CUSTOM;
+ gst_rpi_cam_src_reset_custom_orientation(src);
src->capture_config.camera_parameters.hflip = g_value_get_boolean (value);
src->capture_config.change_flags |= PROP_CHANGE_ORIENTATION;
break;
case PROP_VFLIP:
- src->orientation = GST_RPI_CAM_ORIENTATION_CUSTOM;
+ gst_rpi_cam_src_reset_custom_orientation(src);
src->capture_config.camera_parameters.vflip = g_value_get_boolean (value);
src->capture_config.change_flags |= PROP_CHANGE_ORIENTATION;
break;
src->capture_config.intra_refresh_type = g_value_get_enum (value);
src->capture_config.change_flags |= PROP_CHANGE_ENCODING;
break;
+#ifdef GST_RPI_CAM_SRC_ENABLE_VIDEO_DIRECTION
+ case PROP_VIDEO_DIRECTION:
+ gst_rpi_cam_src_set_orientation (src, g_value_get_enum (value));
+ break;
+#endif
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
case PROP_ROTATION:
g_value_set_int (value, src->capture_config.camera_parameters.rotation);
break;
- case PROP_ORIENTATION:
- g_value_set_enum (value, src->orientation);
- break;
case PROP_AWB_MODE:
g_value_set_enum (value, src->capture_config.camera_parameters.awbMode);
break;
case PROP_INTRA_REFRESH_TYPE:
g_value_set_enum (value, src->capture_config.intra_refresh_type);
break;
+#ifdef GST_RPI_CAM_SRC_ENABLE_VIDEO_DIRECTION
+ case PROP_VIDEO_DIRECTION:
+ g_value_set_enum (value, src->orientation);
+ break;
+#endif
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;