[PATCH v1] gstreamer: Fix string memory leak
Nicolas Dufresne
nicolas.dufresne at collabora.com
Tue May 14 21:18:50 CEST 2024
Hi,
Le mardi 14 mai 2024 à 21:50 +0300, Laurent Pinchart a écrit :
> Hi Barnabás,
>
> Thank you for the patch.
>
> On Tue, May 14, 2024 at 05:45:39PM +0000, Barnabás Pőcze wrote:
> > The string returned by `gst_video_colorimetry_to_string()`
> > has to be freed,
>
> This is right.
>
> > this was missing.
>
> But are you sure about this ? The allocated colorimetry_str is passed to
> gst_structure_set(), which I *think* doesn't copy the string but takes
> ownership of it.
In glib, default transfer method is "none", which means the caller keeps
ownership. gst_structure_set() has no annotation thus it implies that it will
have to copy foreign strings. In general, glib API that takes ownership of a
string would use the term "take".
>
> > Fixes: fc9783acc6083a ("gstreamer: Provide colorimetry <> ColorSpace mappings")
> > Signed-off-by: Barnabás Pőcze <pobrn at protonmail.com>
> > ---
> > src/gstreamer/gstlibcamera-utils.cpp | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/src/gstreamer/gstlibcamera-utils.cpp b/src/gstreamer/gstlibcamera-utils.cpp
> > index e163ce41..ec4da435 100644
> > --- a/src/gstreamer/gstlibcamera-utils.cpp
> > +++ b/src/gstreamer/gstlibcamera-utils.cpp
> > @@ -385,7 +385,7 @@ gst_libcamera_stream_configuration_to_caps(const StreamConfiguration &stream_cfg
> >
> > if (stream_cfg.colorSpace) {
> > GstVideoColorimetry colorimetry = colorimetry_from_colorspace(stream_cfg.colorSpace.value());
> > - gchar *colorimetry_str = gst_video_colorimetry_to_string(&colorimetry);
> > + g_autofree gchar *colorimetry_str = gst_video_colorimetry_to_string(&colorimetry);
> >
> > if (colorimetry_str)
> > gst_structure_set(s, "colorimetry", G_TYPE_STRING, colorimetry_str, nullptr);
Reviewed-by: Nicolas Dufresne <nicolas.dufresne at collabora.com>
Note that we should stop hand writing GstCaps/GstStructure, it makes the
libcamerasrc produce incomplete Raw video caps. This my mistake, I apology.
Instead we should fill a GstVideoInfo and make the caps using
gst_video_info_to_caps(). The obvious benefit is that we no longer have to do
that GstVideoColorimetry to string conversion.
So we should do, StreamConfiguration -> GstVideoInfo -> caps. This will fix many
issues we are having these days.
:-D
Nicolas
More information about the libcamera-devel
mailing list