gst: Use the streams of CameraConfiguration when allocating buffers
Currently, when allocating buffers, the streams of the Camera object are used. Instead the streams of the CameraConfiguration object should be used. This is because the Camera object holds all available streams while the CameraConfiguration holds only the streams associated with the current configuration. Signed-off-by: Dafna Hirschfeld <dafna.hirschfeld@collabora.com> Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
21f90025e5
commit
287e4f82bd
3 changed files with 8 additions and 4 deletions
|
@ -183,13 +183,15 @@ gst_libcamera_allocator_class_init(GstLibcameraAllocatorClass *klass)
|
|||
}
|
||||
|
||||
GstLibcameraAllocator *
|
||||
gst_libcamera_allocator_new(std::shared_ptr<Camera> camera)
|
||||
gst_libcamera_allocator_new(std::shared_ptr<Camera> camera,
|
||||
CameraConfiguration *config_)
|
||||
{
|
||||
auto *self = GST_LIBCAMERA_ALLOCATOR(g_object_new(GST_TYPE_LIBCAMERA_ALLOCATOR,
|
||||
nullptr));
|
||||
|
||||
self->fb_allocator = new FrameBufferAllocator(camera);
|
||||
for (Stream *stream : camera->streams()) {
|
||||
for (StreamConfiguration &streamCfg : *config_) {
|
||||
Stream *stream = streamCfg.stream();
|
||||
gint ret;
|
||||
|
||||
ret = self->fb_allocator->allocate(stream);
|
||||
|
|
|
@ -12,13 +12,15 @@
|
|||
#include <gst/gst.h>
|
||||
#include <gst/allocators/allocators.h>
|
||||
|
||||
#include <libcamera/camera.h>
|
||||
#include <libcamera/stream.h>
|
||||
|
||||
#define GST_TYPE_LIBCAMERA_ALLOCATOR gst_libcamera_allocator_get_type()
|
||||
G_DECLARE_FINAL_TYPE(GstLibcameraAllocator, gst_libcamera_allocator,
|
||||
GST_LIBCAMERA, ALLOCATOR, GstDmaBufAllocator)
|
||||
|
||||
GstLibcameraAllocator *gst_libcamera_allocator_new(std::shared_ptr<libcamera::Camera> camera);
|
||||
GstLibcameraAllocator *gst_libcamera_allocator_new(std::shared_ptr<libcamera::Camera> camera,
|
||||
libcamera::CameraConfiguration *config_);
|
||||
|
||||
bool gst_libcamera_allocator_prepare_buffer(GstLibcameraAllocator *self,
|
||||
libcamera::Stream *stream,
|
||||
|
|
|
@ -436,7 +436,7 @@ gst_libcamera_src_task_enter(GstTask *task, [[maybe_unused]] GThread *thread,
|
|||
return;
|
||||
}
|
||||
|
||||
self->allocator = gst_libcamera_allocator_new(state->cam_);
|
||||
self->allocator = gst_libcamera_allocator_new(state->cam_, state->config_.get());
|
||||
if (!self->allocator) {
|
||||
GST_ELEMENT_ERROR(self, RESOURCE, NO_SPACE_LEFT,
|
||||
("Failed to allocate memory"),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue