}
+void
+gst_v4l2_object_install_m2m_properties_helper (GObjectClass * gobject_class)
+{
+ g_object_class_install_property (gobject_class, PROP_DEVICE,
+ g_param_spec_string ("device", "Device", "Device location",
+ NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, PROP_DEVICE_NAME,
+ g_param_spec_string ("device-name", "Device name",
+ "Name of the device", DEFAULT_PROP_DEVICE_NAME,
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, PROP_DEVICE_FD,
+ g_param_spec_int ("device-fd", "File descriptor",
+ "File descriptor of the device", -1, G_MAXINT, DEFAULT_PROP_DEVICE_FD,
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, PROP_OUTPUT_IO_MODE,
+ g_param_spec_enum ("output-io-mode", "Output IO mode",
+ "Output side I/O mode (matches sink pad)",
+ GST_TYPE_V4L2_IO_MODE, DEFAULT_PROP_IO_MODE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, PROP_CAPTURE_IO_MODE,
+ g_param_spec_enum ("capture-io-mode", "Capture IO mode",
+ "Capture I/O mode (matches src pad)",
+ GST_TYPE_V4L2_IO_MODE, DEFAULT_PROP_IO_MODE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, PROP_EXTRA_CONTROLS,
+ g_param_spec_boxed ("extra-controls", "Extra Controls",
+ "Extra v4l2 controls (CIDs) for the device",
+ GST_TYPE_STRUCTURE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+}
+
GstV4l2Object *
gst_v4l2_object_new (GstElement * element,
enum v4l2_buf_type type,
}
break;
#endif
+
case PROP_IO_MODE:
v4l2object->req_mode = g_value_get_enum (value);
break;
+ case PROP_CAPTURE_IO_MODE:
+ g_return_val_if_fail (!V4L2_TYPE_IS_OUTPUT (v4l2object->type), FALSE);
+ v4l2object->req_mode = g_value_get_enum (value);
+ break;
+ case PROP_OUTPUT_IO_MODE:
+ g_return_val_if_fail (V4L2_TYPE_IS_OUTPUT (v4l2object->type), FALSE);
+ v4l2object->req_mode = g_value_get_enum (value);
+ break;
case PROP_EXTRA_CONTROLS:{
const GstStructure *s = gst_value_get_structure (value);
case PROP_IO_MODE:
g_value_set_enum (value, v4l2object->req_mode);
break;
+ case PROP_CAPTURE_IO_MODE:
+ g_return_val_if_fail (!V4L2_TYPE_IS_OUTPUT (v4l2object->type), FALSE);
+ g_value_set_enum (value, v4l2object->req_mode);
+ break;
+ case PROP_OUTPUT_IO_MODE:
+ g_return_val_if_fail (V4L2_TYPE_IS_OUTPUT (v4l2object->type), FALSE);
+ g_value_set_enum (value, v4l2object->req_mode);
+ break;
case PROP_EXTRA_CONTROLS:
gst_value_set_structure (value, v4l2object->extra_controls);
break;
PROP_HUE, \
PROP_TV_NORM, \
PROP_IO_MODE, \
+ PROP_OUTPUT_IO_MODE, \
+ PROP_CAPTURE_IO_MODE, \
PROP_EXTRA_CONTROLS, \
PROP_PIXEL_ASPECT_RATIO, \
PROP_FORCE_ASPECT_RATIO
void gst_v4l2_object_install_properties_helper (GObjectClass * gobject_class,
const char * default_device);
+void gst_v4l2_object_install_m2m_properties_helper (GObjectClass * gobject_class);
+
gboolean gst_v4l2_object_set_property_helper (GstV4l2Object * v4l2object,
guint prop_id,
const GValue * value,
enum
{
PROP_0,
- V4L2_STD_OBJECT_PROPS,
- PROP_CAPTURE_IO_MODE,
+ V4L2_STD_OBJECT_PROPS
};
typedef struct
GstV4l2Transform *self = GST_V4L2_TRANSFORM (object);
switch (prop_id) {
- /* Split IO mode so output is configure through 'io-mode' and capture
- * through 'capture-io-mode' */
- case PROP_IO_MODE:
+ case PROP_OUTPUT_IO_MODE:
gst_v4l2_object_set_property_helper (self->v4l2output, prop_id, value,
pspec);
break;
value, pspec);
break;
- case PROP_DEVICE:
- gst_v4l2_object_set_property_helper (self->v4l2output, prop_id, value,
- pspec);
- gst_v4l2_object_set_property_helper (self->v4l2capture, prop_id, value,
- pspec);
- break;
-
/* By default, only set on output */
default:
if (!gst_v4l2_object_set_property_helper (self->v4l2output,
GstV4l2Transform *self = GST_V4L2_TRANSFORM (object);
switch (prop_id) {
- case PROP_IO_MODE:
+ case PROP_OUTPUT_IO_MODE:
gst_v4l2_object_get_property_helper (self->v4l2output, prop_id, value,
pspec);
break;
case PROP_CAPTURE_IO_MODE:
- gst_v4l2_object_get_property_helper (self->v4l2output, PROP_IO_MODE,
- value, pspec);
+ gst_v4l2_object_get_property_helper (self->v4l2capture, prop_id, value,
+ pspec);
break;
/* By default read from output */
gst_v4l2_get_input, gst_v4l2_set_input, NULL);
self->v4l2capture->no_initial_format = TRUE;
self->v4l2output->keep_aspect = FALSE;
-
- g_object_set (self, "device", klass->default_device, NULL);
}
static void
base_transform_class->passthrough_on_same_caps = TRUE;
- /* FIXME need this ? */
element_class->change_state =
GST_DEBUG_FUNCPTR (gst_v4l2_transform_change_state);
- gst_v4l2_object_install_properties_helper (gobject_class,
- DEFAULT_PROP_DEVICE);
-
- /**
- * GstV4l2Transform:capture-io-mode
- *
- * Capture IO Mode
- */
- g_object_class_install_property (gobject_class, PROP_CAPTURE_IO_MODE,
- g_param_spec_enum ("capture-io-mode", "Capture IO mode",
- "Capture I/O mode",
- GST_TYPE_V4L2_IO_MODE, GST_V4L2_IO_AUTO,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ gst_v4l2_object_install_m2m_properties_helper (gobject_class);
}
static void
#include <string.h>
#include <gst/gst-i18n-plugin.h>
-#define DEFAULT_PROP_DEVICE "/dev/video0"
-
GST_DEBUG_CATEGORY_STATIC (gst_v4l2_video_dec_debug);
#define GST_CAT_DEFAULT gst_v4l2_video_dec_debug
enum
{
PROP_0,
- V4L2_STD_OBJECT_PROPS,
- PROP_CAPTURE_IO_MODE,
+ V4L2_STD_OBJECT_PROPS
};
#define gst_v4l2_video_dec_parent_class parent_class
GstV4l2VideoDec *self = GST_V4L2_VIDEO_DEC (object);
switch (prop_id) {
- /* Split IO mode so output is configure through 'io-mode' and capture
- * through 'capture-io-mode' */
- case PROP_IO_MODE:
+ case PROP_OUTPUT_IO_MODE:
gst_v4l2_object_set_property_helper (self->v4l2output, prop_id, value,
pspec);
break;
case PROP_CAPTURE_IO_MODE:
- gst_v4l2_object_set_property_helper (self->v4l2capture, PROP_IO_MODE,
- value, pspec);
- break;
-
- case PROP_DEVICE:
- gst_v4l2_object_set_property_helper (self->v4l2output, prop_id, value,
- pspec);
gst_v4l2_object_set_property_helper (self->v4l2capture, prop_id, value,
pspec);
break;
gst_v4l2_get_input, gst_v4l2_set_input, NULL);
self->v4l2capture->no_initial_format = TRUE;
self->v4l2output->keep_aspect = FALSE;
-
- g_object_set (self, "device", klass->default_device, NULL);
}
static void
element_class->change_state =
GST_DEBUG_FUNCPTR (gst_v4l2_video_dec_change_state);
- gst_v4l2_object_install_properties_helper (gobject_class,
- DEFAULT_PROP_DEVICE);
-
- /**
- * GstV4l2VideoDec:capture-io-mode
- *
- * Capture IO Mode
- */
- g_object_class_install_property (gobject_class, PROP_CAPTURE_IO_MODE,
- g_param_spec_enum ("capture-io-mode", "Capture IO mode",
- "Capture I/O mode",
- GST_TYPE_V4L2_IO_MODE, GST_V4L2_IO_AUTO,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ gst_v4l2_object_install_m2m_properties_helper (gobject_class);
}
static void