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:
Laurent Pinchart 2019-01-20 15:03:01 +02:00
parent 457208178c
commit 8b8ae52134
9 changed files with 107 additions and 60 deletions

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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() << "\"";
}
/**

View file

@ -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);
}

View file

@ -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;
}