libcamera: Use log categories
Use log categories in the whole existing code base. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
457208178c
commit
8b8ae52134
9 changed files with 107 additions and 60 deletions
|
@ -21,6 +21,8 @@
|
|||
|
||||
namespace libcamera {
|
||||
|
||||
LOG_DEFINE_CATEGORY(Camera)
|
||||
|
||||
/**
|
||||
* \class CameraManager
|
||||
* \brief Provide access and manage all cameras in the system
|
||||
|
@ -101,8 +103,9 @@ int CameraManager::start()
|
|||
break;
|
||||
}
|
||||
|
||||
LOG(Debug) << "Pipeline handler \"" << factory->name()
|
||||
<< "\" matched";
|
||||
LOG(Camera, Debug)
|
||||
<< "Pipeline handler \"" << factory->name()
|
||||
<< "\" matched";
|
||||
pipes_.push_back(pipe);
|
||||
}
|
||||
}
|
||||
|
@ -176,8 +179,9 @@ void CameraManager::addCamera(std::shared_ptr<Camera> camera)
|
|||
{
|
||||
for (std::shared_ptr<Camera> c : cameras_) {
|
||||
if (c->name() == camera->name()) {
|
||||
LOG(Warning) << "Registering camera with duplicate name '"
|
||||
<< camera->name() << "'";
|
||||
LOG(Camera, Warning)
|
||||
<< "Registering camera with duplicate name '"
|
||||
<< camera->name() << "'";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -216,7 +220,7 @@ CameraManager *CameraManager::instance()
|
|||
void CameraManager::setEventDispatcher(std::unique_ptr<EventDispatcher> dispatcher)
|
||||
{
|
||||
if (dispatcher_) {
|
||||
LOG(Warning) << "Event dispatcher is already set";
|
||||
LOG(Camera, Warning) << "Event dispatcher is already set";
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -42,6 +42,8 @@
|
|||
|
||||
namespace libcamera {
|
||||
|
||||
LOG_DEFINE_CATEGORY(DeviceEnumerator)
|
||||
|
||||
/**
|
||||
* \class DeviceMatch
|
||||
* \brief Description of a media device search pattern
|
||||
|
@ -155,7 +157,8 @@ DeviceEnumerator::~DeviceEnumerator()
|
|||
{
|
||||
for (MediaDevice *dev : devices_) {
|
||||
if (dev->busy())
|
||||
LOG(Error) << "Removing media device while still in use";
|
||||
LOG(DeviceEnumerator, Error)
|
||||
<< "Removing media device while still in use";
|
||||
|
||||
delete dev;
|
||||
}
|
||||
|
@ -205,13 +208,15 @@ int DeviceEnumerator::addDevice(const std::string &devnode)
|
|||
|
||||
ret = media->populate();
|
||||
if (ret < 0) {
|
||||
LOG(Info) << "Unable to populate media device " << devnode <<
|
||||
" (" << strerror(-ret) << "), skipping";
|
||||
LOG(DeviceEnumerator, Info)
|
||||
<< "Unable to populate media device " << devnode
|
||||
<< " (" << strerror(-ret) << "), skipping";
|
||||
return ret;
|
||||
}
|
||||
|
||||
LOG(Debug) << "New media device \"" << media->driver()
|
||||
<< "\" created from " << devnode;
|
||||
LOG(DeviceEnumerator, Debug)
|
||||
<< "New media device \"" << media->driver()
|
||||
<< "\" created from " << devnode;
|
||||
|
||||
/* Associate entities to device node paths. */
|
||||
for (MediaEntity *entity : media->entities()) {
|
||||
|
@ -251,8 +256,9 @@ MediaDevice *DeviceEnumerator::search(const DeviceMatch &dm)
|
|||
continue;
|
||||
|
||||
if (dm.match(dev)) {
|
||||
LOG(Debug) << "Successful match for media device \""
|
||||
<< dev->driver() << "\"";
|
||||
LOG(DeviceEnumerator, Debug)
|
||||
<< "Successful match for media device \""
|
||||
<< dev->driver() << "\"";
|
||||
return dev;
|
||||
}
|
||||
}
|
||||
|
@ -330,8 +336,9 @@ int DeviceEnumeratorUdev::enumerate()
|
|||
|
||||
dev = udev_device_new_from_syspath(udev_, syspath);
|
||||
if (!dev) {
|
||||
LOG(Warning) << "Failed to get device for '" <<
|
||||
syspath << "', skipping";
|
||||
LOG(DeviceEnumerator, Warning)
|
||||
<< "Failed to get device for '"
|
||||
<< syspath << "', skipping";
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -7,12 +7,16 @@
|
|||
|
||||
#include <libcamera/event_dispatcher.h>
|
||||
|
||||
#include "log.h"
|
||||
|
||||
/**
|
||||
* \file event_dispatcher.h
|
||||
*/
|
||||
|
||||
namespace libcamera {
|
||||
|
||||
LOG_DEFINE_CATEGORY(Event)
|
||||
|
||||
/**
|
||||
* \class EventDispatcher
|
||||
* \brief Interface to manage the libcamera events and timers
|
||||
|
|
|
@ -22,6 +22,8 @@
|
|||
|
||||
namespace libcamera {
|
||||
|
||||
LOG_DECLARE_CATEGORY(Event)
|
||||
|
||||
static const char *notifierType(EventNotifier::Type type)
|
||||
{
|
||||
if (type == EventNotifier::Read)
|
||||
|
@ -53,8 +55,9 @@ void EventDispatcherPoll::registerEventNotifier(EventNotifier *notifier)
|
|||
EventNotifier::Type type = notifier->type();
|
||||
|
||||
if (set.notifiers[type] && set.notifiers[type] != notifier) {
|
||||
LOG(Warning) << "Ignoring duplicate " << notifierType(type)
|
||||
<< " notifier for fd " << notifier->fd();
|
||||
LOG(Event, Warning)
|
||||
<< "Ignoring duplicate " << notifierType(type)
|
||||
<< " notifier for fd " << notifier->fd();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -74,8 +77,9 @@ void EventDispatcherPoll::unregisterEventNotifier(EventNotifier *notifier)
|
|||
return;
|
||||
|
||||
if (set.notifiers[type] != notifier) {
|
||||
LOG(Warning) << notifierType(type) << " notifier for fd "
|
||||
<< notifier->fd() << " is not registered";
|
||||
LOG(Event, Warning)
|
||||
<< notifierType(type) << " notifier for fd "
|
||||
<< notifier->fd() << " is not registered";
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -141,9 +145,10 @@ void EventDispatcherPoll::processEvents()
|
|||
timeout.tv_nsec = 0;
|
||||
}
|
||||
|
||||
LOG(Debug) << "timeout " << timeout.tv_sec << "."
|
||||
<< std::setfill('0') << std::setw(9)
|
||||
<< timeout.tv_nsec;
|
||||
LOG(Event, Debug)
|
||||
<< "timeout " << timeout.tv_sec << "."
|
||||
<< std::setfill('0') << std::setw(9)
|
||||
<< timeout.tv_nsec;
|
||||
}
|
||||
|
||||
/* Wait for events and process notifiers and timers. */
|
||||
|
@ -151,7 +156,7 @@ void EventDispatcherPoll::processEvents()
|
|||
nextTimer ? &timeout : nullptr, nullptr);
|
||||
if (ret < 0) {
|
||||
ret = -errno;
|
||||
LOG(Warning) << "poll() failed with " << strerror(-ret);
|
||||
LOG(Event, Warning) << "poll() failed with " << strerror(-ret);
|
||||
} else if (ret > 0) {
|
||||
processNotifiers(pollfds);
|
||||
}
|
||||
|
@ -201,9 +206,10 @@ void EventDispatcherPoll::processNotifiers(const std::vector<struct pollfd> &pol
|
|||
* notifier immediately.
|
||||
*/
|
||||
if (pfd.revents & POLLNVAL) {
|
||||
LOG(Warning) << "Disabling " << notifierType(event.type)
|
||||
<< " due to invalid file descriptor "
|
||||
<< pfd.fd;
|
||||
LOG(Event, Warning)
|
||||
<< "Disabling " << notifierType(event.type)
|
||||
<< " due to invalid file descriptor "
|
||||
<< pfd.fd;
|
||||
unregisterEventNotifier(notifier);
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -27,6 +27,8 @@
|
|||
|
||||
namespace libcamera {
|
||||
|
||||
LOG_DEFINE_CATEGORY(MediaDevice)
|
||||
|
||||
/**
|
||||
* \class MediaDevice
|
||||
* \brief The MediaDevice represents a Media Controller device with its full
|
||||
|
@ -139,15 +141,16 @@ bool MediaDevice::acquire()
|
|||
int MediaDevice::open()
|
||||
{
|
||||
if (fd_ != -1) {
|
||||
LOG(Error) << "MediaDevice already open";
|
||||
LOG(MediaDevice, Error) << "MediaDevice already open";
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
int ret = ::open(devnode_.c_str(), O_RDWR);
|
||||
if (ret < 0) {
|
||||
ret = -errno;
|
||||
LOG(Error) << "Failed to open media device at " << devnode_
|
||||
<< ": " << strerror(-ret);
|
||||
LOG(MediaDevice, Error)
|
||||
<< "Failed to open media device at "
|
||||
<< devnode_ << ": " << strerror(-ret);
|
||||
return ret;
|
||||
}
|
||||
fd_ = ret;
|
||||
|
@ -156,8 +159,9 @@ int MediaDevice::open()
|
|||
ret = ioctl(fd_, MEDIA_IOC_DEVICE_INFO, &info);
|
||||
if (ret) {
|
||||
ret = -errno;
|
||||
LOG(Error) << "Failed to get media device info "
|
||||
<< ": " << strerror(-ret);
|
||||
LOG(MediaDevice, Error)
|
||||
<< "Failed to get media device info "
|
||||
<< ": " << strerror(-ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -227,8 +231,9 @@ int MediaDevice::populate()
|
|||
ret = ioctl(fd_, MEDIA_IOC_G_TOPOLOGY, &topology);
|
||||
if (ret < 0) {
|
||||
ret = -errno;
|
||||
LOG(Error) << "Failed to enumerate topology: "
|
||||
<< strerror(-ret);
|
||||
LOG(MediaDevice, Error)
|
||||
<< "Failed to enumerate topology: "
|
||||
<< strerror(-ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -445,8 +450,9 @@ bool MediaDevice::addObject(MediaObject *object)
|
|||
{
|
||||
|
||||
if (objects_.find(object->id()) != objects_.end()) {
|
||||
LOG(Error) << "Element with id " << object->id()
|
||||
<< " already enumerated.";
|
||||
LOG(MediaDevice, Error)
|
||||
<< "Element with id " << object->id()
|
||||
<< " already enumerated.";
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -568,8 +574,9 @@ bool MediaDevice::populatePads(const struct media_v2_topology &topology)
|
|||
MediaEntity *mediaEntity = dynamic_cast<MediaEntity *>
|
||||
(object(entity_id));
|
||||
if (!mediaEntity) {
|
||||
LOG(Error) << "Failed to find entity with id: "
|
||||
<< entity_id;
|
||||
LOG(MediaDevice, Error)
|
||||
<< "Failed to find entity with id: "
|
||||
<< entity_id;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -604,8 +611,9 @@ bool MediaDevice::populateLinks(const struct media_v2_topology &topology)
|
|||
MediaPad *source = dynamic_cast<MediaPad *>
|
||||
(object(source_id));
|
||||
if (!source) {
|
||||
LOG(Error) << "Failed to find pad with id: "
|
||||
<< source_id;
|
||||
LOG(MediaDevice, Error)
|
||||
<< "Failed to find pad with id: "
|
||||
<< source_id;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -613,8 +621,9 @@ bool MediaDevice::populateLinks(const struct media_v2_topology &topology)
|
|||
MediaPad *sink = dynamic_cast<MediaPad *>
|
||||
(object(sink_id));
|
||||
if (!sink) {
|
||||
LOG(Error) << "Failed to find pad with id: "
|
||||
<< sink_id;
|
||||
LOG(MediaDevice, Error)
|
||||
<< "Failed to find pad with id: "
|
||||
<< sink_id;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -665,14 +674,17 @@ int MediaDevice::setupLink(const MediaLink *link, unsigned int flags)
|
|||
int ret = ioctl(fd_, MEDIA_IOC_SETUP_LINK, &linkDesc);
|
||||
if (ret) {
|
||||
ret = -errno;
|
||||
LOG(Error) << "Failed to setup link: " << strerror(-ret);
|
||||
LOG(MediaDevice, Error)
|
||||
<< "Failed to setup link: "
|
||||
<< strerror(-ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
LOG(Debug) << source->entity()->name() << "["
|
||||
<< source->index() << "] -> "
|
||||
<< sink->entity()->name() << "["
|
||||
<< sink->index() << "]: " << flags;
|
||||
LOG(MediaDevice, Debug)
|
||||
<< source->entity()->name() << "["
|
||||
<< source->index() << "] -> "
|
||||
<< sink->entity()->name() << "["
|
||||
<< sink->index() << "]: " << flags;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -39,6 +39,8 @@
|
|||
|
||||
namespace libcamera {
|
||||
|
||||
LOG_DECLARE_CATEGORY(MediaDevice)
|
||||
|
||||
/**
|
||||
* \class MediaObject
|
||||
* \brief Base class for all media objects
|
||||
|
@ -334,8 +336,9 @@ int MediaEntity::setDeviceNode(const std::string &devnode)
|
|||
int ret = ::access(devnode.c_str(), R_OK | W_OK);
|
||||
if (ret < 0) {
|
||||
ret = -errno;
|
||||
LOG(Error) << "Device node " << devnode << " can't be accessed: "
|
||||
<< strerror(-ret);
|
||||
LOG(MediaDevice, Error)
|
||||
<< "Device node " << devnode << " can't be accessed: "
|
||||
<< strerror(-ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -24,6 +24,8 @@
|
|||
|
||||
namespace libcamera {
|
||||
|
||||
LOG_DEFINE_CATEGORY(Pipeline)
|
||||
|
||||
/**
|
||||
* \class PipelineHandler
|
||||
* \brief Create and manage cameras based on a set of media devices
|
||||
|
@ -120,7 +122,8 @@ void PipelineHandlerFactory::registerType(PipelineHandlerFactory *factory)
|
|||
|
||||
factories.push_back(factory);
|
||||
|
||||
LOG(Debug) << "Registered pipeline handler \"" << factory->name() << "\"";
|
||||
LOG(Pipeline, Debug)
|
||||
<< "Registered pipeline handler \"" << factory->name() << "\"";
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -20,6 +20,8 @@
|
|||
|
||||
namespace libcamera {
|
||||
|
||||
LOG_DEFINE_CATEGORY(Timer)
|
||||
|
||||
/**
|
||||
* \class Timer
|
||||
* \brief Single-shot timer interface
|
||||
|
@ -54,8 +56,9 @@ void Timer::start(unsigned int msec)
|
|||
interval_ = msec;
|
||||
deadline_ = tp.tv_sec * 1000000000ULL + tp.tv_nsec + msec * 1000000ULL;
|
||||
|
||||
LOG(Debug) << "Starting timer " << this << " with interval " << msec
|
||||
<< ": deadline " << deadline_;
|
||||
LOG(Timer, Debug)
|
||||
<< "Starting timer " << this << " with interval "
|
||||
<< msec << ": deadline " << deadline_;
|
||||
|
||||
CameraManager::instance()->eventDispatcher()->registerTimer(this);
|
||||
}
|
||||
|
|
|
@ -20,6 +20,8 @@
|
|||
*/
|
||||
namespace libcamera {
|
||||
|
||||
LOG_DEFINE_CATEGORY(V4L2)
|
||||
|
||||
/**
|
||||
* \struct V4L2Capability
|
||||
* \brief struct v4l2_capability object wrapper and helpers
|
||||
|
@ -106,15 +108,16 @@ int V4L2Device::open()
|
|||
int ret;
|
||||
|
||||
if (isOpen()) {
|
||||
LOG(Error) << "Device already open";
|
||||
LOG(V4L2, Error) << "Device already open";
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
ret = ::open(devnode_.c_str(), O_RDWR);
|
||||
if (ret < 0) {
|
||||
ret = -errno;
|
||||
LOG(Error) << "Failed to open V4L2 device '" << devnode_
|
||||
<< "': " << strerror(-ret);
|
||||
LOG(V4L2, Error)
|
||||
<< "Failed to open V4L2 device '" << devnode_
|
||||
<< "': " << strerror(-ret);
|
||||
return ret;
|
||||
}
|
||||
fd_ = ret;
|
||||
|
@ -122,22 +125,24 @@ int V4L2Device::open()
|
|||
ret = ioctl(fd_, VIDIOC_QUERYCAP, &caps_);
|
||||
if (ret < 0) {
|
||||
ret = -errno;
|
||||
LOG(Error) << "Failed to query device capabilities: "
|
||||
<< strerror(-ret);
|
||||
LOG(V4L2, Error)
|
||||
<< "Failed to query device capabilities: "
|
||||
<< strerror(-ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
LOG(Debug) << "Opened '" << devnode_ << "' "
|
||||
<< caps_.bus_info() << ": " << caps_.driver()
|
||||
<< ": " << caps_.card();
|
||||
LOG(V4L2, Debug)
|
||||
<< "Opened '" << devnode_ << "' "
|
||||
<< caps_.bus_info() << ": " << caps_.driver()
|
||||
<< ": " << caps_.card();
|
||||
|
||||
if (!caps_.isCapture() && !caps_.isOutput()) {
|
||||
LOG(Debug) << "Device is not a supported type";
|
||||
LOG(V4L2, Debug) << "Device is not a supported type";
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!caps_.hasStreaming()) {
|
||||
LOG(Error) << "Device does not support streaming I/O";
|
||||
LOG(V4L2, Error) << "Device does not support streaming I/O";
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue