gstreamer: Add bayer8 support to libcamerasrc element
Bayer8 support is useful on hardware such as Librem 5, as GStreamer provides easy solution for debayering and display of the camera data. Add necessary glue to libcamerasrc element. Signed-off-by: Pavel Machek <pavel@ucw.cz> Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
21a82ed8a5
commit
e83d94915d
2 changed files with 31 additions and 1 deletions
|
@ -20,6 +20,12 @@ static struct {
|
|||
/* Compressed */
|
||||
{ GST_VIDEO_FORMAT_ENCODED, formats::MJPEG },
|
||||
|
||||
/* Bayer formats, gstreamer only supports 8-bit */
|
||||
{ GST_VIDEO_FORMAT_ENCODED, formats::SBGGR8 },
|
||||
{ GST_VIDEO_FORMAT_ENCODED, formats::SGBRG8 },
|
||||
{ GST_VIDEO_FORMAT_ENCODED, formats::SGRBG8 },
|
||||
{ GST_VIDEO_FORMAT_ENCODED, formats::SRGGB8 },
|
||||
|
||||
/* RGB16 */
|
||||
{ GST_VIDEO_FORMAT_RGB16, formats::RGB565 },
|
||||
|
||||
|
@ -228,6 +234,22 @@ gst_format_to_pixel_format(GstVideoFormat gst_format)
|
|||
return PixelFormat{};
|
||||
}
|
||||
|
||||
static const gchar *
|
||||
bayer_format_to_string(int format)
|
||||
{
|
||||
switch (format) {
|
||||
case formats::SBGGR8:
|
||||
return "bggr";
|
||||
case formats::SGBRG8:
|
||||
return "gbrg";
|
||||
case formats::SGRBG8:
|
||||
return "grbg";
|
||||
case formats::SRGGB8:
|
||||
return "rggb";
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static GstStructure *
|
||||
bare_structure_from_format(const PixelFormat &format)
|
||||
{
|
||||
|
@ -243,6 +265,14 @@ bare_structure_from_format(const PixelFormat &format)
|
|||
switch (format) {
|
||||
case formats::MJPEG:
|
||||
return gst_structure_new_empty("image/jpeg");
|
||||
|
||||
case formats::SBGGR8:
|
||||
case formats::SGBRG8:
|
||||
case formats::SGRBG8:
|
||||
case formats::SRGGB8:
|
||||
return gst_structure_new("video/x-bayer", "format", G_TYPE_STRING,
|
||||
bayer_format_to_string(format), nullptr);
|
||||
|
||||
default:
|
||||
return nullptr;
|
||||
}
|
||||
|
|
|
@ -161,7 +161,7 @@ G_DEFINE_TYPE_WITH_CODE(GstLibcameraSrc, gst_libcamera_src, GST_TYPE_ELEMENT,
|
|||
GST_DEBUG_CATEGORY_INIT(source_debug, "libcamerasrc", 0,
|
||||
"libcamera Source"))
|
||||
|
||||
#define TEMPLATE_CAPS GST_STATIC_CAPS("video/x-raw; image/jpeg")
|
||||
#define TEMPLATE_CAPS GST_STATIC_CAPS("video/x-raw; image/jpeg; video/x-bayer")
|
||||
|
||||
/* For the simple case, we have a src pad that is always present. */
|
||||
GstStaticPadTemplate src_template = {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue