summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiklas Söderlund <niklas.soderlund@ragnatech.se>2020-08-06 13:41:48 +0200
committerNiklas Söderlund <niklas.soderlund@ragnatech.se>2020-10-02 15:04:41 +0200
commita60020c3c3ee051de9aaa053cf07879cbd5abd3e (patch)
tree0b5b40e34d09042dbb832ed1de3e38b2a08ee819
parente0913d56c26bb55a0fd5b3de5e355f39cf26a940 (diff)
libcamera: pipeline: uvcvideo: Initialize CameraData from MediaDevice
The UVCCameraData::init() is the only consumer of the default entry in the media graph, move the lookup of it into the init() function and pass it the MediaDevice. This is done in preparation to extend the CameraData initialization to consume more information from the MediaDevice. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
-rw-r--r--src/libcamera/pipeline/uvcvideo/uvcvideo.cpp30
1 files changed, 15 insertions, 15 deletions
diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
index ba0efc8b..eff866b6 100644
--- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
+++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
@@ -44,7 +44,7 @@ public:
delete video_;
}
- int init(MediaEntity *entity);
+ int init(MediaDevice *media);
void addControl(uint32_t cid, const ControlInfo &v4l2info,
ControlInfoMap::Map *ctrls);
void bufferReady(FrameBuffer *buffer);
@@ -463,18 +463,7 @@ bool PipelineHandlerUVC::match(DeviceEnumerator *enumerator)
std::unique_ptr<UVCCameraData> data = std::make_unique<UVCCameraData>(this);
- /* Locate and initialise the camera data with the default video node. */
- const std::vector<MediaEntity *> &entities = media->entities();
- auto entity = std::find_if(entities.begin(), entities.end(),
- [](MediaEntity *entity) {
- return entity->flags() & MEDIA_ENT_FL_DEFAULT;
- });
- if (entity == entities.end()) {
- LOG(UVC, Error) << "Could not find a default video device";
- return false;
- }
-
- if (data->init(*entity))
+ if (data->init(media))
return false;
/* Create and register the camera. */
@@ -494,12 +483,23 @@ bool PipelineHandlerUVC::match(DeviceEnumerator *enumerator)
return true;
}
-int UVCCameraData::init(MediaEntity *entity)
+int UVCCameraData::init(MediaDevice *media)
{
int ret;
+ /* Locate and initialise the camera data with the default video node. */
+ const std::vector<MediaEntity *> &entities = media->entities();
+ auto entity = std::find_if(entities.begin(), entities.end(),
+ [](MediaEntity *entity) {
+ return entity->flags() & MEDIA_ENT_FL_DEFAULT;
+ });
+ if (entity == entities.end()) {
+ LOG(UVC, Error) << "Could not find a default video device";
+ return -ENODEV;
+ }
+
/* Create and open the video device. */
- video_ = new V4L2VideoDevice(entity);
+ video_ = new V4L2VideoDevice(*entity);
ret = video_->open();
if (ret)
return ret;