libcamera: v4l2_subdevice: Store media entity
Store the media entity backing the V4L2Subdevice and add a deviceName() method to retrieve the human readable name of the subdevice, which is created using the name of the associated media entity. Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
@@ -9,9 +9,10 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "media_object.h"
|
||||
|
||||
namespace libcamera {
|
||||
|
||||
class MediaEntity;
|
||||
struct Rectangle;
|
||||
|
||||
struct V4L2SubdeviceFormat {
|
||||
@@ -31,7 +32,8 @@ public:
|
||||
bool isOpen() const;
|
||||
void close();
|
||||
|
||||
std::string deviceNode() const { return deviceNode_; }
|
||||
std::string deviceNode() const { return entity_->deviceNode(); }
|
||||
std::string deviceName() const { return entity_->name(); }
|
||||
|
||||
int setCrop(unsigned int pad, Rectangle *rect);
|
||||
int setCompose(unsigned int pad, Rectangle *rect);
|
||||
@@ -43,7 +45,7 @@ private:
|
||||
int setSelection(unsigned int pad, unsigned int target,
|
||||
Rectangle *rect);
|
||||
|
||||
std::string deviceNode_;
|
||||
const MediaEntity *entity_;
|
||||
int fd_;
|
||||
};
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@ LOG_DEFINE_CATEGORY(V4L2Subdev)
|
||||
* path
|
||||
*/
|
||||
V4L2Subdevice::V4L2Subdevice(const MediaEntity *entity)
|
||||
: deviceNode_(entity->deviceNode()), fd_(-1)
|
||||
: entity_(entity), fd_(-1)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -106,11 +106,11 @@ int V4L2Subdevice::open()
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
ret = ::open(deviceNode_.c_str(), O_RDWR);
|
||||
ret = ::open(deviceNode().c_str(), O_RDWR);
|
||||
if (ret < 0) {
|
||||
ret = -errno;
|
||||
LOG(V4L2Subdev, Error)
|
||||
<< "Failed to open V4L2 subdevice '" << deviceNode_
|
||||
<< "Failed to open V4L2 subdevice '" << deviceNode()
|
||||
<< "': " << strerror(-ret);
|
||||
return ret;
|
||||
}
|
||||
@@ -147,6 +147,13 @@ void V4L2Subdevice::close()
|
||||
* \return The subdevice's device node system path
|
||||
*/
|
||||
|
||||
/**
|
||||
* \fn V4L2Subdevice::deviceName()
|
||||
* \brief Retrieve the name of the media entity associated with the subdevice
|
||||
*
|
||||
* \return The name of the media entity the subdevice is associated to
|
||||
*/
|
||||
|
||||
/**
|
||||
* \brief Set a crop rectangle on one of the V4L2 subdevice pads
|
||||
* \param[in] pad The 0-indexed pad number the rectangle is to be applied to
|
||||
@@ -189,7 +196,7 @@ int V4L2Subdevice::getFormat(unsigned int pad, V4L2SubdeviceFormat *format)
|
||||
ret = -errno;
|
||||
LOG(V4L2Subdev, Error)
|
||||
<< "Unable to get format on pad " << pad
|
||||
<< " of " << deviceNode_ << ": " << strerror(-ret);
|
||||
<< " of " << deviceNode() << ": " << strerror(-ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -255,7 +262,7 @@ int V4L2Subdevice::setSelection(unsigned int pad, unsigned int target,
|
||||
ret = -errno;
|
||||
LOG(V4L2Subdev, Error)
|
||||
<< "Unable to set rectangle " << target << " on pad "
|
||||
<< pad << " of " << deviceNode_ << ": "
|
||||
<< pad << " of " << deviceNode() << ": "
|
||||
<< strerror(-ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user