<div dir="auto"><div><br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Le sam. 24 déc. 2022, 05 h 12, Rafael Diniz <<a href="mailto:rafael@riseup.net">rafael@riseup.net</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Pavel and all,<br>
<br>
Do you have a sample gst-lauch line which forces bayer format in order I <br>
can test this also in the PinePhone 1?<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">I can't test, but this should do:</div><div dir="auto"><br></div><div dir="auto">gst-launch-1.0 libcamerasrc ! bayer2rgb ! glimagesink</div><div dir="auto"><br></div><div dir="auto">The bayer2rgb template caps will serve as a filter, like a jpeg decoder would force jpeg. But if needed, video/x-bayer is the filter you need.</div><div dir="auto"><br></div><div dir="auto">best wishes,</div><div dir="auto">Nicolas</div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Rafael<br>
<br>
On 12/23/22 20:23, Pavel Machek via libcamera-devel wrote:<br>
> Bayer8 support is useful on hardware such as Librem 5, as GStreamer<br>
> provides easy solution for debayering and display of the camera<br>
> data. Add neccessary glue to libcamerasrc element.<br>
>      <br>
> Signed-off-by: Pavel Machek <<a href="mailto:pavel@ucw.cz" target="_blank" rel="noreferrer">pavel@ucw.cz</a>><br>
> Reviewed-by: Nicolas Dufresne <<a href="mailto:nicolas.dufresne@collabora.com" target="_blank" rel="noreferrer">nicolas.dufresne@collabora.com</a>><br>
> <br>
> --<br>
> <br>
> Thanks for the review!<br>
> <br>
> diff --git a/src/gstreamer/gstlibcamera-utils.cpp b/src/gstreamer/gstlibcamera-utils.cpp<br>
> index 36b9564c..b2cc7661 100644<br>
> --- a/src/gstreamer/gstlibcamera-utils.cpp<br>
> +++ b/src/gstreamer/gstlibcamera-utils.cpp<br>
> @@ -20,6 +20,12 @@ static struct {<br>
>       /* Compressed */<br>
>       { GST_VIDEO_FORMAT_ENCODED, formats::MJPEG },<br>
>   <br>
> +     /* Bayer formats, gstreamer only supports 8-bit */<br>
> +     { GST_VIDEO_FORMAT_ENCODED, formats::SGRBG8 },<br>
> +     { GST_VIDEO_FORMAT_ENCODED, formats::SGBRG8 },<br>
> +     { GST_VIDEO_FORMAT_ENCODED, formats::SRGGB8 },<br>
> +     { GST_VIDEO_FORMAT_ENCODED, formats::SBGGR8 },<br>
> +<br>
>       /* RGB16 */<br>
>       { GST_VIDEO_FORMAT_RGB16, formats::RGB565 },<br>
>   <br>
> @@ -228,6 +234,22 @@ gst_format_to_pixel_format(GstVideoFormat gst_format)<br>
>       return PixelFormat{};<br>
>   }<br>
>   <br>
> +static const gchar *<br>
> +bayer_format_to_string(int format)<br>
> +{<br>
> +     switch (format) {<br>
> +     case formats::SGRBG8:<br>
> +             return "grbg";<br>
> +     case formats::SGBRG8:<br>
> +             return "gbrg";<br>
> +     case formats::SRGGB8:<br>
> +             return "rggb";<br>
> +     case formats::SBGGR8:<br>
> +             return "bggr";<br>
> +     }<br>
> +     return NULL;<br>
> +}<br>
> +<br>
>   static GstStructure *<br>
>   bare_structure_from_format(const PixelFormat &format)<br>
>   {<br>
> @@ -243,6 +265,12 @@ bare_structure_from_format(const PixelFormat &format)<br>
>       switch (format) {<br>
>       case formats::MJPEG:<br>
>               return gst_structure_new_empty("image/jpeg");<br>
> +     case formats::SGRBG8:<br>
> +     case formats::SGBRG8:<br>
> +     case formats::SRGGB8:<br>
> +     case formats::SBGGR8:<br>
> +             return gst_structure_new("video/x-bayer", "format", G_TYPE_STRING,<br>
> +                                      bayer_format_to_string(format), nullptr);<br>
>       default:<br>
>               return nullptr;<br>
>       }<br>
> diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp<br>
> index 8d97d7c2..a10cbd4f 100644<br>
> --- a/src/gstreamer/gstlibcamerasrc.cpp<br>
> +++ b/src/gstreamer/gstlibcamerasrc.cpp<br>
> @@ -161,7 +161,7 @@ G_DEFINE_TYPE_WITH_CODE(GstLibcameraSrc, gst_libcamera_src, GST_TYPE_ELEMENT,<br>
>                       GST_DEBUG_CATEGORY_INIT(source_debug, "libcamerasrc", 0,<br>
>                                               "libcamera Source"))<br>
>   <br>
> -#define TEMPLATE_CAPS GST_STATIC_CAPS("video/x-raw; image/jpeg")<br>
> +#define TEMPLATE_CAPS GST_STATIC_CAPS("video/x-raw; image/jpeg; video/x-bayer")<br>
>   <br>
>   /* For the simple case, we have a src pad that is always present. */<br>
>   GstStaticPadTemplate src_template = {<br>
> <br>
</blockquote></div></div></div>