From 0e8d6903b2f27b6cd31bf7a25f5d47483fc5c36f Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Sat, 3 Jul 2021 18:33:55 +0300 Subject: libcamera: pipeline: simple: Delay opening of video device until init() The video device is currently opened in the SimpleCameraData constructor. This requires opening the video devices on-demand the first time they're accessed, which gets in the way of refactoring of per-entity data storage in the pipeline handler. Move opening of the video device to the SimpleCameraData::init() function. The on-demand open mechanism isn't touched yet, it will be refactored later. Signed-off-by: Laurent Pinchart Tested-by: Martin Kepplinger --- src/libcamera/pipeline/simple/simple.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'src/libcamera/pipeline/simple') diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp index 32bfd45f..76ead3e0 100644 --- a/src/libcamera/pipeline/simple/simple.cpp +++ b/src/libcamera/pipeline/simple/simple.cpp @@ -309,6 +309,7 @@ SimpleCameraData::SimpleCameraData(SimplePipelineHandler *pipe, /* Remember at each entity where we came from. */ std::unordered_map parents; MediaEntity *entity = nullptr; + MediaEntity *video = nullptr; queue.push({ sensor, nullptr }); @@ -322,7 +323,7 @@ SimpleCameraData::SimpleCameraData(SimplePipelineHandler *pipe, if (entity->function() == MEDIA_ENT_F_IO_V4L) { LOG(SimplePipeline, Debug) << "Found capture device " << entity->name(); - video_ = pipe->video(entity); + video = entity; break; } @@ -342,7 +343,7 @@ SimpleCameraData::SimpleCameraData(SimplePipelineHandler *pipe, } } - if (!video_) + if (!video) return; /* @@ -386,9 +387,16 @@ SimplePipelineHandler *SimpleCameraData::pipe() int SimpleCameraData::init() { - SimpleConverter *converter = pipe()->converter(); + SimplePipelineHandler *pipe = SimpleCameraData::pipe(); + SimpleConverter *converter = pipe->converter(); int ret; + video_ = pipe->video(entities_.back().entity); + if (!video_) { + LOG(SimplePipeline, Error) << "Failed to open video device"; + return -ENODEV; + } + /* * Setup links first as some subdev drivers take active links into * account to propagate TRY formats. Such is life :-( -- cgit v1.2.1