[EXT] [PATCH 4/4] gstreamer: Reduce indentation in gst_libcamera_create_video_pool()

Laurent Pinchart laurent.pinchart at ideasonboard.com
Wed Jun 4 01:33:53 CEST 2025


On Fri, May 23, 2025 at 05:58:36AM +0000, Qi Hou wrote:
> On 2025年5月22日 20:55, Laurent Pinchart wrote:
> > 
> > Now that video pool creation is handled by a dedicated function, the logic can
> > be simplified by returning early instead of nesting scopes. Do so to decrease
> > indentation and improve readability.
> > 
> > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > ---
> >  src/gstreamer/gstlibcamerasrc.cpp | 50 ++++++++++++++-----------------
> >  1 file changed, 23 insertions(+), 27 deletions(-)
> > 
> > diff --git a/src/gstreamer/gstlibcamerasrc.cpp
> > b/src/gstreamer/gstlibcamerasrc.cpp
> > index 380f8368af8b..e0eb6e7b4227 100644
> > --- a/src/gstreamer/gstlibcamerasrc.cpp
> > +++ b/src/gstreamer/gstlibcamerasrc.cpp
> > @@ -528,47 +528,43 @@ gst_libcamera_create_video_pool(GstLibcameraSrc
> > *self,  {
> >         g_autoptr(GstQuery) query = NULL;
> >         const gboolean need_pool = true;
> > -       gboolean has_video_meta = false;
> >         GstBufferPool *video_pool = NULL;
> > 
> >         gst_libcamera_extrapolate_info(info, stream_cfg.stride);
> > 
> >         query = gst_query_new_allocation(caps, need_pool);
> > -       if (!gst_pad_peer_query(srcpad, query))
> > +       if (!gst_pad_peer_query(srcpad, query)) {
> >                 GST_DEBUG_OBJECT(self, "Didn't get downstream ALLOCATION hints");
> > -       else
> > -               has_video_meta = gst_query_find_allocation_meta(query, GST_VIDEO_META_API_TYPE, NULL);
> > +               return { NULL, 0 };
> > +       }
> 
> I think the failure of gst_pad_peer_query() is not a problem, because
> connected plugin such as filesink does not provide
> propose_allocation(). This case is like that of query success but
> downstream doesn't support videometa. Both require creating internal
> video pool.

You're right, I introduced a change in behaviour by mistake here. I'll
fix it. Thank you for noticing.

> > -       if (!has_video_meta) {
> > -               GstBufferPool *pool = NULL;
> > +       if (gst_query_find_allocation_meta(query, GST_VIDEO_META_API_TYPE, NULL))
> > +               return { NULL, 0 };
> > 
> > -               if (gst_query_get_n_allocation_pools(query) > 0)
> > -                       gst_query_parse_nth_allocation_pool(query, 0, &pool, NULL, NULL, NULL);
> > +       if (gst_query_get_n_allocation_pools(query) > 0)
> > +               gst_query_parse_nth_allocation_pool(query, 0, &video_pool, NULL, NULL, NULL);
> > 
> > -               if (pool)
> > -                       video_pool = pool;
> > -               else {
> > -                       GstStructure *config;
> > -                       guint min_buffers = 3;
> > -                       video_pool = gst_video_buffer_pool_new();
> > +       if (!video_pool) {
> > +               GstStructure *config;
> > +               guint min_buffers = 3;
> > 
> > -                       config = gst_buffer_pool_get_config(video_pool);
> > -                       gst_buffer_pool_config_set_params(config, caps, info->size, min_buffers, 0);
> > +               video_pool = gst_video_buffer_pool_new();
> > +               config = gst_buffer_pool_get_config(video_pool);
> > +               gst_buffer_pool_config_set_params(config, caps, info->size, min_buffers, 0);
> > 
> > -                       GST_DEBUG_OBJECT(self, "Own pool config is %" GST_PTR_FORMAT, config);
> > +               GST_DEBUG_OBJECT(self, "Own pool config is %" GST_PTR_FORMAT, config);
> > 
> > -                        gst_buffer_pool_set_config(GST_BUFFER_POOL_CAST(video_pool), config);
> > -               }
> > +               gst_buffer_pool_set_config(GST_BUFFER_POOL_CAST(video_pool), config);
> > +       }
> > 
> > -               GST_WARNING_OBJECT(self, "Downstream doesn't support video meta, need to copy frame.");
> > +       GST_WARNING_OBJECT(self, "Downstream doesn't support video meta, need to copy frame.");
> > 
> > -               if (!gst_buffer_pool_set_active(video_pool, true)) {
> > -                       gst_caps_unref(caps);
> > -                       GST_ELEMENT_ERROR(self, RESOURCE, SETTINGS,
> > -                                         ("Failed to active buffer pool"),
> > -                                         ("gst_libcamera_src_negotiate() failed."));
> > -                       return { NULL, -EINVAL };
> > -               }
> > +       if (!gst_buffer_pool_set_active(video_pool, true)) {
> > +               gst_caps_unref(caps);
> > +               GST_ELEMENT_ERROR(self, RESOURCE, SETTINGS,
> > +                                 ("Failed to active buffer pool"),
> > +                                 ("gst_libcamera_src_negotiate() failed."));
> > +               return { NULL, -EINVAL };
> >         }
> > 
> >         return { video_pool, 0 };

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list