summaryrefslogtreecommitdiff
path: root/src/libcamera/pipeline/rkisp1/rkisp1.cpp
diff options
context:
space:
mode:
authorNiklas Söderlund <niklas.soderlund@ragnatech.se>2019-04-14 00:43:29 +0200
committerNiklas Söderlund <niklas.soderlund@ragnatech.se>2019-05-17 01:33:57 +0200
commit1a813a5c3ab71a91e327d538d0df5d945e50561e (patch)
tree2ac615e5dacbb8d36a6408d59994eb7e448a45a9 /src/libcamera/pipeline/rkisp1/rkisp1.cpp
parentef30be09eb0faba6739b4efee450d0c9751c121b (diff)
libcamera: media_device: Handle media device fd in acquire() and release()
To gain better control of when a file descriptor is open to the media device and reduce the work needed in pipeline handler implementations, handle the file descriptor in acquire() and release(). This changes the current behavior where a file descriptor is only open when requested by the pipeline handler to that one is always open as long a media device is acquired. This new behavior is desired to allow implementing exclusive access to a pipeline handler between processes. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src/libcamera/pipeline/rkisp1/rkisp1.cpp')
-rw-r--r--src/libcamera/pipeline/rkisp1/rkisp1.cpp42
1 files changed, 11 insertions, 31 deletions
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 134d3df4..b94d742d 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -148,10 +148,6 @@ int PipelineHandlerRkISP1::configureStreams(Camera *camera,
*/
const MediaPad *pad = dphy_->entity()->getPadByIndex(0);
- ret = media_->open();
- if (ret < 0)
- return ret;
-
for (MediaLink *link : pad->links()) {
bool enable = link->source()->entity() == sensor->entity();
@@ -169,8 +165,6 @@ int PipelineHandlerRkISP1::configureStreams(Camera *camera,
break;
}
- media_->close();
-
if (ret < 0)
return ret;
@@ -352,7 +346,6 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor)
bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator)
{
const MediaPad *pad;
- int ret;
DeviceMatch dm("rkisp1");
dm.add("rkisp1-isp-subdev");
@@ -368,35 +361,27 @@ bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator)
media_->acquire();
- ret = media_->open();
- if (ret < 0)
- return ret;
-
/* Create the V4L2 subdevices we will need. */
dphy_ = V4L2Subdevice::fromEntityName(media_.get(),
"rockchip-sy-mipi-dphy");
- ret = dphy_->open();
- if (ret < 0)
- goto done;
+ if (dphy_->open() < 0)
+ return false;
isp_ = V4L2Subdevice::fromEntityName(media_.get(), "rkisp1-isp-subdev");
- ret = isp_->open();
- if (ret < 0)
- goto done;
+ if (isp_->open() < 0)
+ return false;
/* Locate and open the capture video node. */
video_ = V4L2Device::fromEntityName(media_.get(), "rkisp1_mainpath");
- ret = video_->open();
- if (ret < 0)
- goto done;
+ if (video_->open() < 0)
+ return false;
video_->bufferReady.connect(this, &PipelineHandlerRkISP1::bufferReady);
/* Configure default links. */
- ret = initLinks();
- if (ret < 0) {
+ if (initLinks() < 0) {
LOG(RkISP1, Error) << "Failed to setup links";
- goto done;
+ return false;
}
/*
@@ -404,18 +389,13 @@ bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator)
* camera instance for each of them.
*/
pad = dphy_->entity()->getPadByIndex(0);
- if (!pad) {
- ret = -EINVAL;
- goto done;
- }
+ if (!pad)
+ return false;
for (MediaLink *link : pad->links())
createCamera(link->source()->entity());
-done:
- media_->close();
-
- return ret == 0;
+ return true;
}
/* -----------------------------------------------------------------------------