@@ -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 };
+ }
- 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 };
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@ideasonboard.com> --- src/gstreamer/gstlibcamerasrc.cpp | 50 ++++++++++++++----------------- 1 file changed, 23 insertions(+), 27 deletions(-)