} GstV4L2CamSrcProperties;
-
+static GstStaticPadTemplate gst_v4l2camsrc_template =
+ GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/x-raw-yuv, "
+ "format = (fourcc) NV12, "
+ "framerate = (fraction) [ 0, 200 ], "
+ "width = (int) [ 1, MAX ], "
+ "height = (int) [ 1, MAX ];"
+ "video/x-raw-yuv, "
+ "format = (fourcc) I420, "
+ "framerate = (fraction) [ 0, 200 ], "
+ "width = (int) [ 1, MAX ], "
+ "height = (int) [ 1, MAX ];"
+ "video/x-raw-yuv, "
+ "format = (fourcc) BA10, "
+ "framerate = (fraction) [ 0, 200 ], "
+ "width = (int) [ 1, MAX ], "
+ "height = (int) [ 1, MAX ];"
+ "video/x-vaapi-sharing, "
+ "type = vaapi, "
+ "width = (int) [ 1, MAX ], "
+ "height = (int) [ 1, MAX ], "
+ "framerate = (fraction) [ 0, MAX ]"));
#define DEFAULT_PROP_DEVICE_NAME NULL
#define DEFAULT_PROP_DEVICE "/dev/video0"
return v4l2camsrc->num_buffers;
}
-/*
- * common format / caps utilities:
- */
-typedef struct
-{
- guint32 format;
- gboolean dimensions;
-} GstV4L2FormatDesc;
-
-static const GstV4L2FormatDesc gst_v4l2_formats[] = {
- /* from Linux 2.6.15 videodev2.h */
- {V4L2_PIX_FMT_YUV420, TRUE},
- {V4L2_PIX_FMT_YVU420, TRUE},
- {V4L2_PIX_FMT_YUV422P, TRUE},
- {V4L2_PIX_FMT_YUV444, TRUE},
-
- {V4L2_PIX_FMT_NV12, TRUE},
- {V4L2_PIX_FMT_NV21, TRUE},
-
- {V4L2_PIX_FMT_NV16, TRUE},
- {V4L2_PIX_FMT_NV61, TRUE},
-
- {V4L2_PIX_FMT_YUYV, TRUE},
- {V4L2_PIX_FMT_UYVY, TRUE},
-
- {V4L2_PIX_FMT_SBGGR16, TRUE},
-
- {V4L2_PIX_FMT_SBGGR8, TRUE},
- {V4L2_PIX_FMT_SGBRG8, TRUE},
- {V4L2_PIX_FMT_SGRBG8, TRUE},
- {V4L2_PIX_FMT_SRGGB8, TRUE},
-
- {V4L2_PIX_FMT_SBGGR10, TRUE},
- {V4L2_PIX_FMT_SGBRG10, TRUE},
- {V4L2_PIX_FMT_SGRBG10, TRUE},
- {V4L2_PIX_FMT_SRGGB10, TRUE},
-
- {V4L2_PIX_FMT_RGB24, TRUE},
- {V4L2_PIX_FMT_RGB32, TRUE},
- {V4L2_PIX_FMT_RGB565, TRUE},
-};
-
-#define GST_V4L2_FORMAT_COUNT (G_N_ELEMENTS (gst_v4l2_formats))
-#define GST_V4L2_MAX_SIZE (1<<15) /* 2^15 == 32768 */
-
-GstCaps *
-gst_v4l2camsrc_get_all_caps (void)
-{
- static GstCaps *caps = NULL;
-
- if (caps == NULL) {
- GstStructure *structure;
-
- guint i;
-
- caps = gst_caps_new_empty ();
- for (i = 0; i < GST_V4L2_FORMAT_COUNT; i++) {
- structure =
- gst_v4l2camsrc_v4l2fourcc_to_structure (gst_v4l2_formats[i].format);
- if (structure) {
- if (gst_v4l2_formats[i].dimensions) {
- gst_structure_set (structure,
- "width", GST_TYPE_INT_RANGE, 1, GST_V4L2_MAX_SIZE,
- "height", GST_TYPE_INT_RANGE, 1, GST_V4L2_MAX_SIZE,
- "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 100, 1, NULL);
- }
- gst_caps_append_structure (caps, structure);
- }
- }
- structure = gst_structure_from_string(surface_string, NULL);
- gst_caps_append_structure (caps, structure);
- }
-
- return gst_caps_ref (caps);
-}
-
/*
* gst_v4l2camsrc_base_init:
"Maemo Multimedia <multimedia@maemo.org>");
gst_element_class_add_pad_template (element_class,
- gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
- gst_v4l2camsrc_get_all_caps ()));
+ gst_static_pad_template_get (&gst_v4l2camsrc_template));
}
gboolean gst_v4l2camsrc_set_autofocus (GstCameraSrc * camsrc, gboolean on);