@@ -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;
}
Use log categories in the whole existing code base. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> --- src/libcamera/camera_manager.cpp | 14 ++++--- src/libcamera/device_enumerator.cpp | 25 +++++++----- src/libcamera/event_dispatcher.cpp | 4 ++ src/libcamera/event_dispatcher_poll.cpp | 28 +++++++------ src/libcamera/media_device.cpp | 52 +++++++++++++++---------- src/libcamera/media_object.cpp | 7 +++- src/libcamera/pipeline_handler.cpp | 5 ++- src/libcamera/timer.cpp | 7 +++- src/libcamera/v4l2_device.cpp | 25 +++++++----- 9 files changed, 107 insertions(+), 60 deletions(-)