[libcamera-devel] [PATCH v2 1/4] gstreamer: convert from libcamera colorspace toGStreamer colorimetry.

Vedant Paranjape vedantparanjape160201 at gmail.com
Thu Jul 7 14:16:07 CEST 2022


Somehow the pointer to the mistake didn't format as it is visible in
the reply ;( About time I stop using Gmail.

On Thu, Jul 7, 2022 at 2:14 PM Vedant Paranjape
<vedantparanjape160201 at gmail.com> wrote:
>
> Hello Rishikesh,
>
> On Thu, Jul 7, 2022 at 11:45 AM Rishikesh Donadkar
> <rishikeshdonadkar at gmail.com> wrote:
> >
> > Libcamera StreamConfiguration class has colorSpace attribute, which
> > holds the colorspace that is being applied to the camera after the
> > validation of the camera configuration.
> >
> > Map the libcamera colorspace to GStreamer colorimetry and find
> > the colorimetry corresponding to the colorspace that is being applied to
> > the camera. This colorimetry if found will be pushed in the caps.
> >
> > Signed-off-by: Rishikesh Donadkar <rishikeshdonadkar at gmail.com>
> > ---
> >  src/gstreamer/gstlibcamera-utils.cpp | 32 ++++++++++++++++++++++++++++
> >  1 file changed, 32 insertions(+)
> >
> > diff --git a/src/gstreamer/gstlibcamera-utils.cpp b/src/gstreamer/gstlibcamera-utils.cpp
> > index c97c0d43..60ac8c8e 100644
> > --- a/src/gstreamer/gstlibcamera-utils.cpp
> > +++ b/src/gstreamer/gstlibcamera-utils.cpp
> > @@ -45,6 +45,12 @@ static struct {
> >         /* \todo NV42 is used in libcamera but is not mapped in GStreamer yet. */
> >  };
> >
> > +static const std::vector<std::pair<ColorSpace, std::string>> ColorSpaceTocolorimetry = {
> > +       { ColorSpace::Srgb, GST_VIDEO_COLORIMETRY_SRGB },
> > +       { ColorSpace::Rec709, GST_VIDEO_COLORIMETRY_BT709 },
> > +       { ColorSpace::Rec2020, GST_VIDEO_COLORIMETRY_BT2020 },
> > +};
> > +
> >  static GstVideoFormat
> >  pixel_format_to_gst_format(const PixelFormat &format)
> >  {
> > @@ -87,6 +93,32 @@ bare_structure_from_format(const PixelFormat &format)
> >         }
> >  }
> >
> > +static gchar *
> > +colorimerty_from_colorspace(std::optional<ColorSpace> colorSpace)
>           ------^^^-----
> It should be colorimetry
>
> > +{
> > +       gchar *colorimetry_str = nullptr;
> > +       gchar *colorimetry_found = nullptr;
> > +       GstVideoColorimetry colorimetry;
> > +       gboolean isColorimetryValid;
> > +
> > +       auto iterColorimetry = std::find_if(ColorSpaceTocolorimetry.begin(), ColorSpaceTocolorimetry.end(),
> > +                                           [&colorSpace](const auto &item) {
> > +                                                   return colorSpace == item.first;
> > +                                           });
> > +       if (iterColorimetry != ColorSpaceTocolorimetry.end()) {
> > +               colorimetry_found = (gchar *)iterColorimetry->second.c_str();
> > +               isColorimetryValid = gst_video_colorimetry_from_string(&colorimetry, colorimetry_found);
> > +       }
> > +       if (isColorimetryValid) {
> > +               colorimetry_str = gst_video_colorimetry_to_string(&colorimetry);
> > +               return colorimetry_str;
> > +       } else {
> > +               g_free(colorimetry_found);
> > +               g_free(colorimetry_str);
> > +               return nullptr;
> > +       }
> > +}
> > +
> >  GstCaps *
> >  gst_libcamera_stream_formats_to_caps(const StreamFormats &formats)
> >  {
> > --
> > 2.25.1
> >


More information about the libcamera-devel mailing list