gstreamer: Do not expose the caps before configuring the camera
Configure the camera before exposing the caps valid controls values (and bounds) are available. These control values might be of interest to be exposed on the capabilites, which otherwise, would not be available if the camera is configured after the update caps event. For instance, the FrameDurationLimits are computed by RPi's IPA in its configure(). Hence, we need to Camera::configure() to happen in order to know the FrameDurationLimits, that can be exposed in the caps. This ties into the framerate support for libcamerasrc which will happen in a follow-up commit. Signed-off-by: Rishikesh Donadkar <rishikeshdonadkar@gmail.com> Signed-off-by: Umang Jain <umang.jain@ideasonboard.com> Tested-by: Umang Jain <umang.jain@ideasonboard.com> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
committed by
Umang Jain
parent
86735b12ec
commit
872588301f
@@ -515,6 +515,16 @@ gst_libcamera_src_task_enter(GstTask *task, [[maybe_unused]] GThread *thread,
|
||||
goto done;
|
||||
}
|
||||
|
||||
ret = state->cam_->configure(state->config_.get());
|
||||
if (ret) {
|
||||
GST_ELEMENT_ERROR(self, RESOURCE, SETTINGS,
|
||||
("Failed to configure camera: %s", g_strerror(-ret)),
|
||||
("Camera::configure() failed with error code %i", ret));
|
||||
gst_task_stop(task);
|
||||
flow_ret = GST_FLOW_NOT_NEGOTIATED;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/*
|
||||
* Regardless if it has been modified, create clean caps and push the
|
||||
* caps event. Downstream will decide if the caps are acceptable.
|
||||
@@ -535,15 +545,6 @@ gst_libcamera_src_task_enter(GstTask *task, [[maybe_unused]] GThread *thread,
|
||||
gst_pad_push_event(srcpad, gst_event_new_segment(&segment));
|
||||
}
|
||||
|
||||
ret = state->cam_->configure(state->config_.get());
|
||||
if (ret) {
|
||||
GST_ELEMENT_ERROR(self, RESOURCE, SETTINGS,
|
||||
("Failed to configure camera: %s", g_strerror(-ret)),
|
||||
("Camera::configure() failed with error code %i", ret));
|
||||
gst_task_stop(task);
|
||||
return;
|
||||
}
|
||||
|
||||
self->allocator = gst_libcamera_allocator_new(state->cam_, state->config_.get());
|
||||
if (!self->allocator) {
|
||||
GST_ELEMENT_ERROR(self, RESOURCE, NO_SPACE_LEFT,
|
||||
|
||||
Reference in New Issue
Block a user