[libcamera-devel] [PATCH] gstreamer: Do not lookup controls by id

Umang Jain umang.jain at ideasonboard.com
Fri Nov 18 19:29:01 CET 2022


Hi Jacopo,

Thank you for the patch.

On 11/18/22 9:51 PM, Jacopo Mondi via libcamera-devel wrote:
> The libcamerasrc element looks for the availability of the
> FrameDurationLimits control by looking it up by numeric control id.
>
> The ControlinfoMap::find(unsigned int i) function searches the control
> numerical identifier on the ContorlInfoMap::idMap_ class member, which
> might be not initialized if the pipeline handler does not register
> any control, causing an invalid memory access.
>
> Avoid looking up the control by numerical id and use the ControlId
> instance instead to prevent that.

Nice spot.

I wonder if it's specific to ISI Pipeline-handler (probably yes) that 
you hit this non-initialization situation.
>
> Fixes: ccfe0a1af77c ("gstreamer: Provide framerate support for libcamerasrc")
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>

Reviewed-by: Umang Jain <umang.jain at ideasonboard.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 64d197010008..36b9564c4cb4 100644
> --- a/src/gstreamer/gstlibcamera-utils.cpp
> +++ b/src/gstreamer/gstlibcamera-utils.cpp
> @@ -436,7 +436,7 @@ void gst_libcamera_clamp_and_set_frameduration(ControlList &initCtrls,
>   	if (!gst_structure_has_field_typed(element_caps, "framerate", GST_TYPE_FRACTION))
>   		return;
>
> -	auto iterFrameDuration = cam_ctrls.find(controls::FrameDurationLimits.id());
> +	auto iterFrameDuration = cam_ctrls.find(&controls::FrameDurationLimits);
>   	if (iterFrameDuration == cam_ctrls.end()) {
>   		GST_WARNING("FrameDurationLimits not found in camera controls.");
>   		return;
> --
> 2.38.1
>



More information about the libcamera-devel mailing list