mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-31 22:25:38 -04:00
v4l2: use log topic
This commit is contained in:
parent
a95937dfdb
commit
865635ef10
4 changed files with 65 additions and 51 deletions
|
|
@ -49,8 +49,6 @@
|
|||
|
||||
#include "v4l2.h"
|
||||
|
||||
#define NAME "v4l2-source"
|
||||
|
||||
static const char default_device[] = "/dev/video0";
|
||||
|
||||
struct props {
|
||||
|
|
@ -877,7 +875,7 @@ static int impl_node_process(void *object)
|
|||
if (port->control)
|
||||
process_control(this, &port->control->sequence);
|
||||
|
||||
spa_log_trace(this->log, NAME " %p; status %d", this, io->status);
|
||||
spa_log_trace(this->log, "%p; status %d", this, io->status);
|
||||
|
||||
if (io->status == SPA_STATUS_HAVE_DATA)
|
||||
return SPA_STATUS_HAVE_DATA;
|
||||
|
|
@ -896,7 +894,7 @@ static int impl_node_process(void *object)
|
|||
spa_list_remove(&b->link);
|
||||
SPA_FLAG_SET(b->flags, BUFFER_FLAG_OUTSTANDING);
|
||||
|
||||
spa_log_trace(this->log, NAME " %p: dequeue buffer %d", this, b->id);
|
||||
spa_log_trace(this->log, "%p: dequeue buffer %d", this, b->id);
|
||||
|
||||
io->buffer_id = b->id;
|
||||
io->status = SPA_STATUS_HAVE_DATA;
|
||||
|
|
@ -973,8 +971,9 @@ impl_init(const struct spa_handle_factory *factory,
|
|||
this = (struct impl *) handle;
|
||||
|
||||
this->log = spa_support_find(support, n_support, SPA_TYPE_INTERFACE_Log);
|
||||
this->data_loop = spa_support_find(support, n_support, SPA_TYPE_INTERFACE_DataLoop);
|
||||
v4l2_log_topic_init(this->log);
|
||||
|
||||
this->data_loop = spa_support_find(support, n_support, SPA_TYPE_INTERFACE_DataLoop);
|
||||
if (this->data_loop == NULL) {
|
||||
spa_log_error(this->log, "a data_loop is needed");
|
||||
return -EINVAL;
|
||||
|
|
|
|||
|
|
@ -53,36 +53,36 @@ int spa_v4l2_open(struct spa_v4l2_device *dev, const char *path)
|
|||
return 0;
|
||||
|
||||
if (path == NULL) {
|
||||
spa_log_error(dev->log, "v4l2: Device property not set");
|
||||
spa_log_error(dev->log, "Device property not set");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
spa_log_info(dev->log, "v4l2: Playback device is '%s'", path);
|
||||
spa_log_info(dev->log, "Playback device is '%s'", path);
|
||||
|
||||
dev->fd = open(path, O_RDWR | O_NONBLOCK, 0);
|
||||
if (dev->fd == -1) {
|
||||
err = errno;
|
||||
spa_log_error(dev->log, "v4l2: Cannot open '%s': %d, %s",
|
||||
spa_log_error(dev->log, "Cannot open '%s': %d, %s",
|
||||
path, err, strerror(err));
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (fstat(dev->fd, &st) < 0) {
|
||||
err = errno;
|
||||
spa_log_error(dev->log, "v4l2: Cannot identify '%s': %d, %s",
|
||||
spa_log_error(dev->log, "Cannot identify '%s': %d, %s",
|
||||
path, err, strerror(err));
|
||||
goto error_close;
|
||||
}
|
||||
|
||||
if (!S_ISCHR(st.st_mode)) {
|
||||
spa_log_error(dev->log, "v4l2: %s is no device", path);
|
||||
spa_log_error(dev->log, "%s is no device", path);
|
||||
err = ENODEV;
|
||||
goto error_close;
|
||||
}
|
||||
|
||||
if (xioctl(dev->fd, VIDIOC_QUERYCAP, &dev->cap) < 0) {
|
||||
err = errno;
|
||||
spa_log_error(dev->log, "v4l2: '%s' QUERYCAP: %m", path);
|
||||
spa_log_error(dev->log, "'%s' QUERYCAP: %m", path);
|
||||
goto error_close;
|
||||
}
|
||||
return 0;
|
||||
|
|
@ -110,7 +110,7 @@ int spa_v4l2_close(struct spa_v4l2_device *dev)
|
|||
if (dev->active || dev->have_format)
|
||||
return 0;
|
||||
|
||||
spa_log_info(dev->log, "v4l2: close");
|
||||
spa_log_info(dev->log, "close");
|
||||
|
||||
if (close(dev->fd))
|
||||
spa_log_warn(dev->log, "close: %m");
|
||||
|
|
@ -134,7 +134,7 @@ static int spa_v4l2_buffer_recycle(struct impl *this, uint32_t buffer_id)
|
|||
|
||||
if (xioctl(dev->fd, VIDIOC_QBUF, &b->v4l2_buffer) < 0) {
|
||||
err = errno;
|
||||
spa_log_error(this->log, "v4l2: '%s' VIDIOC_QBUF: %m", this->props.device);
|
||||
spa_log_error(this->log, "'%s' VIDIOC_QBUF: %m", this->props.device);
|
||||
return -err;
|
||||
}
|
||||
|
||||
|
|
@ -158,14 +158,14 @@ static int spa_v4l2_clear_buffers(struct impl *this)
|
|||
d = b->outbuf->datas;
|
||||
|
||||
if (SPA_FLAG_IS_SET(b->flags, BUFFER_FLAG_OUTSTANDING)) {
|
||||
spa_log_debug(this->log, "v4l2: queueing outstanding buffer %p", b);
|
||||
spa_log_debug(this->log, "queueing outstanding buffer %p", b);
|
||||
spa_v4l2_buffer_recycle(this, i);
|
||||
}
|
||||
if (SPA_FLAG_IS_SET(b->flags, BUFFER_FLAG_MAPPED)) {
|
||||
munmap(b->ptr, d[0].maxsize);
|
||||
}
|
||||
if (SPA_FLAG_IS_SET(b->flags, BUFFER_FLAG_ALLOCATED)) {
|
||||
spa_log_debug(this->log, "v4l2: close %d", (int) d[0].fd);
|
||||
spa_log_debug(this->log, "close %d", (int) d[0].fd);
|
||||
close(d[0].fd);
|
||||
}
|
||||
d[0].type = SPA_ID_INVALID;
|
||||
|
|
@ -590,12 +590,12 @@ spa_v4l2_enum_format(struct impl *this, int seq,
|
|||
fmt.fmt.pix.height = 0;
|
||||
|
||||
if ((res = xioctl(dev->fd, VIDIOC_TRY_FMT, &fmt)) < 0) {
|
||||
spa_log_debug(this->log, "v4l2: '%s' VIDIOC_TRY_FMT %08x: %m",
|
||||
spa_log_debug(this->log, "'%s' VIDIOC_TRY_FMT %08x: %m",
|
||||
this->props.device, info->fourcc);
|
||||
goto next_fmtdesc;
|
||||
}
|
||||
if (fmt.fmt.pix.pixelformat != info->fourcc) {
|
||||
spa_log_debug(this->log, "v4l2: '%s' VIDIOC_TRY_FMT wanted %.4s gave %.4s",
|
||||
spa_log_debug(this->log, "'%s' VIDIOC_TRY_FMT wanted %.4s gave %.4s",
|
||||
this->props.device, (char*)&info->fourcc,
|
||||
(char*)&fmt.fmt.pix.pixelformat);
|
||||
goto next_fmtdesc;
|
||||
|
|
@ -607,7 +607,7 @@ spa_v4l2_enum_format(struct impl *this, int seq,
|
|||
goto enum_end;
|
||||
|
||||
res = -errno;
|
||||
spa_log_error(this->log, "v4l2: '%s' VIDIOC_ENUM_FMT: %m",
|
||||
spa_log_error(this->log, "'%s' VIDIOC_ENUM_FMT: %m",
|
||||
this->props.device);
|
||||
goto exit;
|
||||
}
|
||||
|
|
@ -653,7 +653,7 @@ spa_v4l2_enum_format(struct impl *this, int seq,
|
|||
goto next_fmtdesc;
|
||||
|
||||
res = -errno;
|
||||
spa_log_error(this->log, "v4l2: '%s' VIDIOC_ENUM_FRAMESIZES: %m",
|
||||
spa_log_error(this->log, "'%s' VIDIOC_ENUM_FRAMESIZES: %m",
|
||||
this->props.device);
|
||||
goto exit;
|
||||
}
|
||||
|
|
@ -746,7 +746,7 @@ spa_v4l2_enum_format(struct impl *this, int seq,
|
|||
goto next_frmsize;
|
||||
break;
|
||||
}
|
||||
spa_log_error(this->log, "v4l2: '%s' VIDIOC_ENUM_FRAMEINTERVALS: %m",
|
||||
spa_log_error(this->log, "'%s' VIDIOC_ENUM_FRAMEINTERVALS: %m",
|
||||
this->props.device);
|
||||
goto exit;
|
||||
}
|
||||
|
|
@ -896,7 +896,7 @@ static int spa_v4l2_set_format(struct impl *this, struct spa_video_info *format,
|
|||
info = find_format_info_by_media_type(format->media_type,
|
||||
format->media_subtype, video_format, 0);
|
||||
if (info == NULL || size == NULL || framerate == NULL) {
|
||||
spa_log_error(this->log, "v4l2: unknown media type %d %d %d", format->media_type,
|
||||
spa_log_error(this->log, "unknown media type %d %d %d", format->media_type,
|
||||
format->media_subtype, video_format);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
|
@ -909,7 +909,7 @@ static int spa_v4l2_set_format(struct impl *this, struct spa_video_info *format,
|
|||
streamparm.parm.capture.timeperframe.numerator = framerate->denom;
|
||||
streamparm.parm.capture.timeperframe.denominator = framerate->num;
|
||||
|
||||
spa_log_debug(this->log, "v4l2: set %.4s %dx%d %d/%d", (char *)&fmt.fmt.pix.pixelformat,
|
||||
spa_log_debug(this->log, "set %.4s %dx%d %d/%d", (char *)&fmt.fmt.pix.pixelformat,
|
||||
fmt.fmt.pix.width, fmt.fmt.pix.height,
|
||||
streamparm.parm.capture.timeperframe.denominator,
|
||||
streamparm.parm.capture.timeperframe.numerator);
|
||||
|
|
@ -922,7 +922,7 @@ static int spa_v4l2_set_format(struct impl *this, struct spa_video_info *format,
|
|||
cmd = (flags & SPA_NODE_PARAM_FLAG_TEST_ONLY) ? VIDIOC_TRY_FMT : VIDIOC_S_FMT;
|
||||
if (xioctl(dev->fd, cmd, &fmt) < 0) {
|
||||
res = -errno;
|
||||
spa_log_error(this->log, "v4l2: '%s' VIDIOC_S_FMT: %m",
|
||||
spa_log_error(this->log, "'%s' VIDIOC_S_FMT: %m",
|
||||
this->props.device);
|
||||
return res;
|
||||
}
|
||||
|
|
@ -936,7 +936,7 @@ static int spa_v4l2_set_format(struct impl *this, struct spa_video_info *format,
|
|||
reqfmt.fmt.pix.height == fmt.fmt.pix.height);
|
||||
|
||||
if (!match && !SPA_FLAG_IS_SET(flags, SPA_NODE_PARAM_FLAG_NEAREST)) {
|
||||
spa_log_error(this->log, "v4l2: wanted %.4s %dx%d, got %.4s %dx%d",
|
||||
spa_log_error(this->log, "wanted %.4s %dx%d, got %.4s %dx%d",
|
||||
(char *)&reqfmt.fmt.pix.pixelformat,
|
||||
reqfmt.fmt.pix.width, reqfmt.fmt.pix.height,
|
||||
(char *)&fmt.fmt.pix.pixelformat,
|
||||
|
|
@ -947,7 +947,7 @@ static int spa_v4l2_set_format(struct impl *this, struct spa_video_info *format,
|
|||
if (flags & SPA_NODE_PARAM_FLAG_TEST_ONLY)
|
||||
return match ? 0 : 1;
|
||||
|
||||
spa_log_info(this->log, "v4l2: '%s' got %.4s %dx%d %d/%d",
|
||||
spa_log_info(this->log, "'%s' got %.4s %dx%d %d/%d",
|
||||
this->props.device, (char *)&fmt.fmt.pix.pixelformat,
|
||||
fmt.fmt.pix.width, fmt.fmt.pix.height,
|
||||
streamparm.parm.capture.timeperframe.denominator,
|
||||
|
|
@ -1094,7 +1094,7 @@ spa_v4l2_enum_controls(struct impl *this, int seq,
|
|||
goto next;
|
||||
}
|
||||
res = -errno;
|
||||
spa_log_error(this->log, "v4l2: '%s' VIDIOC_QUERYCTRL: %m", this->props.device);
|
||||
spa_log_error(this->log, "'%s' VIDIOC_QUERYCTRL: %m", this->props.device);
|
||||
return res;
|
||||
}
|
||||
if (result.next & next_fl)
|
||||
|
|
@ -1261,7 +1261,7 @@ static void v4l2_on_fd_events(struct spa_source *source)
|
|||
|
||||
if (source->rmask & SPA_IO_ERR) {
|
||||
struct port *port = &this->out_ports[0];
|
||||
spa_log_error(this->log, "v4l2: '%p' error %08x", this->props.device, source->rmask);
|
||||
spa_log_error(this->log, "'%p' error %08x", this->props.device, source->rmask);
|
||||
if (port->source.loop)
|
||||
spa_loop_remove_source(this->data_loop, &port->source);
|
||||
return;
|
||||
|
|
@ -1311,7 +1311,7 @@ static int spa_v4l2_use_buffers(struct impl *this, struct spa_buffer **buffers,
|
|||
} else if (d[0].type == SPA_DATA_DmaBuf) {
|
||||
port->memtype = V4L2_MEMORY_DMABUF;
|
||||
} else {
|
||||
spa_log_error(this->log, "v4l2: can't use buffers of type %d", d[0].type);
|
||||
spa_log_error(this->log, "can't use buffers of type %d", d[0].type);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
|
@ -1322,12 +1322,12 @@ static int spa_v4l2_use_buffers(struct impl *this, struct spa_buffer **buffers,
|
|||
reqbuf.count = n_buffers;
|
||||
|
||||
if (xioctl(dev->fd, VIDIOC_REQBUFS, &reqbuf) < 0) {
|
||||
spa_log_error(this->log, "v4l2: '%s' VIDIOC_REQBUFS %m", this->props.device);
|
||||
spa_log_error(this->log, "'%s' VIDIOC_REQBUFS %m", this->props.device);
|
||||
return -errno;
|
||||
}
|
||||
spa_log_debug(this->log, "v4l2: got %d buffers", reqbuf.count);
|
||||
spa_log_debug(this->log, "got %d buffers", reqbuf.count);
|
||||
if (reqbuf.count < n_buffers) {
|
||||
spa_log_error(this->log, "v4l2: '%s' can't allocate enough buffers %d < %d",
|
||||
spa_log_error(this->log, "'%s' can't allocate enough buffers %d < %d",
|
||||
this->props.device, reqbuf.count, n_buffers);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
|
@ -1341,10 +1341,10 @@ static int spa_v4l2_use_buffers(struct impl *this, struct spa_buffer **buffers,
|
|||
b->flags = BUFFER_FLAG_OUTSTANDING;
|
||||
b->h = spa_buffer_find_meta_data(buffers[i], SPA_META_Header, sizeof(*b->h));
|
||||
|
||||
spa_log_debug(this->log, "v4l2: import buffer %p", buffers[i]);
|
||||
spa_log_debug(this->log, "import buffer %p", buffers[i]);
|
||||
|
||||
if (buffers[i]->n_datas < 1) {
|
||||
spa_log_error(this->log, "v4l2: invalid memory on buffer %p", buffers[i]);
|
||||
spa_log_error(this->log, "invalid memory on buffer %p", buffers[i]);
|
||||
return -EINVAL;
|
||||
}
|
||||
d = buffers[i]->datas;
|
||||
|
|
@ -1379,7 +1379,7 @@ static int spa_v4l2_use_buffers(struct impl *this, struct spa_buffer **buffers,
|
|||
b->v4l2_buffer.m.fd = d[0].fd;
|
||||
}
|
||||
else {
|
||||
spa_log_error(this->log, "v4l2: invalid port memory %d",
|
||||
spa_log_error(this->log, "invalid port memory %d",
|
||||
port->memtype);
|
||||
return -EIO;
|
||||
}
|
||||
|
|
@ -1409,15 +1409,15 @@ mmap_init(struct impl *this,
|
|||
reqbuf.count = n_buffers;
|
||||
|
||||
if (xioctl(dev->fd, VIDIOC_REQBUFS, &reqbuf) < 0) {
|
||||
spa_log_error(this->log, "v4l2: '%s' VIDIOC_REQBUFS: %m", this->props.device);
|
||||
spa_log_error(this->log, "'%s' VIDIOC_REQBUFS: %m", this->props.device);
|
||||
return -errno;
|
||||
}
|
||||
|
||||
spa_log_debug(this->log, "v4l2: got %d buffers", reqbuf.count);
|
||||
spa_log_debug(this->log, "got %d buffers", reqbuf.count);
|
||||
n_buffers = reqbuf.count;
|
||||
|
||||
if (n_buffers < 2) {
|
||||
spa_log_error(this->log, "v4l2: '%s' can't allocate enough buffers (%d)",
|
||||
spa_log_error(this->log, "'%s' can't allocate enough buffers (%d)",
|
||||
this->props.device, n_buffers);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
|
@ -1427,7 +1427,7 @@ mmap_init(struct impl *this,
|
|||
struct spa_data *d;
|
||||
|
||||
if (buffers[i]->n_datas < 1) {
|
||||
spa_log_error(this->log, "v4l2: invalid buffer data");
|
||||
spa_log_error(this->log, "invalid buffer data");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
@ -1443,13 +1443,13 @@ mmap_init(struct impl *this,
|
|||
b->v4l2_buffer.index = i;
|
||||
|
||||
if (xioctl(dev->fd, VIDIOC_QUERYBUF, &b->v4l2_buffer) < 0) {
|
||||
spa_log_error(this->log, "v4l2: '%s' VIDIOC_QUERYBUF: %m", this->props.device);
|
||||
spa_log_error(this->log, "'%s' VIDIOC_QUERYBUF: %m", this->props.device);
|
||||
return -errno;
|
||||
}
|
||||
|
||||
if (b->v4l2_buffer.flags & V4L2_BUF_FLAG_QUEUED) {
|
||||
/* some drivers can give us an already queued buffer. */
|
||||
spa_log_warn(this->log, "v4l2: buffer %d was already queued", i);
|
||||
spa_log_warn(this->log, "buffer %d was already queued", i);
|
||||
n_buffers = i;
|
||||
break;
|
||||
}
|
||||
|
|
@ -1462,7 +1462,7 @@ mmap_init(struct impl *this,
|
|||
d[0].chunk->stride = port->fmt.fmt.pix.bytesperline;
|
||||
d[0].chunk->flags = 0;
|
||||
|
||||
spa_log_debug(this->log, "v4l2: data types %08x", d[0].type);
|
||||
spa_log_debug(this->log, "data types %08x", d[0].type);
|
||||
|
||||
if (port->have_expbuf &&
|
||||
d[0].type != SPA_ID_INVALID &&
|
||||
|
|
@ -1475,12 +1475,12 @@ mmap_init(struct impl *this,
|
|||
expbuf.flags = O_CLOEXEC | O_RDONLY;
|
||||
if (xioctl(dev->fd, VIDIOC_EXPBUF, &expbuf) < 0) {
|
||||
if (errno == ENOTTY || errno == EINVAL) {
|
||||
spa_log_debug(this->log, "v4l2: '%s' VIDIOC_EXPBUF not supported: %m",
|
||||
spa_log_debug(this->log, "'%s' VIDIOC_EXPBUF not supported: %m",
|
||||
this->props.device);
|
||||
port->have_expbuf = false;
|
||||
goto fallback;
|
||||
}
|
||||
spa_log_error(this->log, "v4l2: '%s' VIDIOC_EXPBUF: %m", this->props.device);
|
||||
spa_log_error(this->log, "'%s' VIDIOC_EXPBUF: %m", this->props.device);
|
||||
return -errno;
|
||||
}
|
||||
if (d[0].type & (1u<<SPA_DATA_DmaBuf))
|
||||
|
|
@ -1491,7 +1491,7 @@ mmap_init(struct impl *this,
|
|||
d[0].fd = expbuf.fd;
|
||||
d[0].data = NULL;
|
||||
SPA_FLAG_SET(b->flags, BUFFER_FLAG_ALLOCATED);
|
||||
spa_log_debug(this->log, "v4l2: EXPBUF fd:%d", expbuf.fd);
|
||||
spa_log_debug(this->log, "EXPBUF fd:%d", expbuf.fd);
|
||||
use_expbuf = true;
|
||||
} else if (d[0].type & (1u << SPA_DATA_MemPtr)) {
|
||||
fallback:
|
||||
|
|
@ -1505,20 +1505,20 @@ fallback:
|
|||
dev->fd,
|
||||
b->v4l2_buffer.m.offset);
|
||||
if (d[0].data == MAP_FAILED) {
|
||||
spa_log_error(this->log, "v4l2: '%s' mmap: %m", this->props.device);
|
||||
spa_log_error(this->log, "'%s' mmap: %m", this->props.device);
|
||||
return -errno;
|
||||
}
|
||||
b->ptr = d[0].data;
|
||||
SPA_FLAG_SET(b->flags, BUFFER_FLAG_MAPPED);
|
||||
spa_log_debug(this->log, "v4l2: mmap offset:%u data:%p", d[0].mapoffset, b->ptr);
|
||||
spa_log_debug(this->log, "mmap offset:%u data:%p", d[0].mapoffset, b->ptr);
|
||||
use_expbuf = false;
|
||||
} else {
|
||||
spa_log_error(this->log, "v4l2: unsupported data type:%08x", d[0].type);
|
||||
spa_log_error(this->log, "unsupported data type:%08x", d[0].type);
|
||||
return -ENOTSUP;
|
||||
}
|
||||
spa_v4l2_buffer_recycle(this, i);
|
||||
}
|
||||
spa_log_info(this->log, "v4l2: have %u buffers using %s", n_buffers,
|
||||
spa_log_info(this->log, "have %u buffers using %s", n_buffers,
|
||||
use_expbuf ? "EXPBUF" : "MMAP");
|
||||
|
||||
port->n_buffers = n_buffers;
|
||||
|
|
@ -1556,7 +1556,7 @@ spa_v4l2_alloc_buffers(struct impl *this,
|
|||
if ((res = read_init(this)) < 0)
|
||||
return res;
|
||||
} else {
|
||||
spa_log_error(this->log, "v4l2: invalid capabilities %08x",
|
||||
spa_log_error(this->log, "invalid capabilities %08x",
|
||||
dev->cap.capabilities);
|
||||
return -EIO;
|
||||
}
|
||||
|
|
@ -1583,7 +1583,7 @@ static int spa_v4l2_stream_on(struct impl *this)
|
|||
|
||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
if (xioctl(dev->fd, VIDIOC_STREAMON, &type) < 0) {
|
||||
spa_log_error(this->log, "v4l2: '%s' VIDIOC_STREAMON: %m", this->props.device);
|
||||
spa_log_error(this->log, "'%s' VIDIOC_STREAMON: %m", this->props.device);
|
||||
return -errno;
|
||||
}
|
||||
|
||||
|
|
@ -1631,7 +1631,7 @@ static int spa_v4l2_stream_off(struct impl *this)
|
|||
|
||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
if (xioctl(dev->fd, VIDIOC_STREAMOFF, &type) < 0) {
|
||||
spa_log_error(this->log, "v4l2: '%s' VIDIOC_STREAMOFF: %m", this->props.device);
|
||||
spa_log_error(this->log, "'%s' VIDIOC_STREAMOFF: %m", this->props.device);
|
||||
return -errno;
|
||||
}
|
||||
for (i = 0; i < port->n_buffers; i++) {
|
||||
|
|
|
|||
|
|
@ -25,11 +25,15 @@
|
|||
#include <errno.h>
|
||||
|
||||
#include <spa/support/plugin.h>
|
||||
#include <spa/support/log.h>
|
||||
|
||||
extern const struct spa_handle_factory spa_v4l2_source_factory;
|
||||
extern const struct spa_handle_factory spa_v4l2_udev_factory;
|
||||
extern const struct spa_handle_factory spa_v4l2_device_factory;
|
||||
|
||||
struct spa_log_topic log_topic = SPA_LOG_TOPIC(0, "spa.v4l2");
|
||||
struct spa_log_topic *v4l2_log_topic = &log_topic;
|
||||
|
||||
SPA_EXPORT
|
||||
int spa_handle_factory_enum(const struct spa_handle_factory **factory,
|
||||
uint32_t *index)
|
||||
|
|
|
|||
|
|
@ -24,6 +24,17 @@
|
|||
|
||||
#include <errno.h>
|
||||
|
||||
#include <spa/support/log.h>
|
||||
|
||||
#undef SPA_LOG_TOPIC_DEFAULT
|
||||
#define SPA_LOG_TOPIC_DEFAULT v4l2_log_topic
|
||||
extern struct spa_log_topic *v4l2_log_topic;
|
||||
|
||||
static inline void v4l2_log_topic_init(struct spa_log *log)
|
||||
{
|
||||
spa_log_topic_init(log, v4l2_log_topic);
|
||||
}
|
||||
|
||||
struct spa_v4l2_device {
|
||||
struct spa_log *log;
|
||||
int fd;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue