mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-31 22:25:38 -04:00
improve debug
This commit is contained in:
parent
011992e774
commit
8dcd6c4417
3 changed files with 32 additions and 25 deletions
|
|
@ -15,7 +15,7 @@
|
||||||
|
|
||||||
#include "alsa-pcm.h"
|
#include "alsa-pcm.h"
|
||||||
|
|
||||||
#define CHECK(s,msg) if ((err = (s)) < 0) { spa_log_error(state->log, msg ": %s", snd_strerror(err)); return err; }
|
#define CHECK(s,msg,...) if ((err = (s)) < 0) { spa_log_error(state->log, msg ": %s", ##__VA_ARGS__, snd_strerror(err)); return err; }
|
||||||
|
|
||||||
static int spa_alsa_open(struct state *state)
|
static int spa_alsa_open(struct state *state)
|
||||||
{
|
{
|
||||||
|
|
@ -35,7 +35,7 @@ static int spa_alsa_open(struct state *state)
|
||||||
state->stream,
|
state->stream,
|
||||||
SND_PCM_NONBLOCK |
|
SND_PCM_NONBLOCK |
|
||||||
SND_PCM_NO_AUTO_RESAMPLE |
|
SND_PCM_NO_AUTO_RESAMPLE |
|
||||||
SND_PCM_NO_AUTO_CHANNELS | SND_PCM_NO_AUTO_FORMAT), "open failed");
|
SND_PCM_NO_AUTO_CHANNELS | SND_PCM_NO_AUTO_FORMAT), "%s: open failed", props->device);
|
||||||
|
|
||||||
if ((err = spa_system_timerfd_create(state->data_system,
|
if ((err = spa_system_timerfd_create(state->data_system,
|
||||||
CLOCK_MONOTONIC, SPA_FD_CLOEXEC | SPA_FD_NONBLOCK)) < 0)
|
CLOCK_MONOTONIC, SPA_FD_CLOEXEC | SPA_FD_NONBLOCK)) < 0)
|
||||||
|
|
@ -72,7 +72,7 @@ int spa_alsa_close(struct state *state)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
spa_log_debug(state->log, NAME" %p: Device '%s' closing", state, state->props.device);
|
spa_log_debug(state->log, NAME" %p: Device '%s' closing", state, state->props.device);
|
||||||
CHECK(snd_pcm_close(state->hndl), "close failed");
|
CHECK(snd_pcm_close(state->hndl), "%s: close failed", state->props.device);
|
||||||
|
|
||||||
spa_system_close(state->data_system, state->timerfd);
|
spa_system_close(state->data_system, state->timerfd);
|
||||||
state->opened = false;
|
state->opened = false;
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@
|
||||||
|
|
||||||
#include "alsa-seq.h"
|
#include "alsa-seq.h"
|
||||||
|
|
||||||
#define CHECK(s,msg) if ((res = (s)) < 0) { spa_log_error(state->log, msg ": %s", snd_strerror(res)); return res; }
|
#define CHECK(s,msg,...) if ((res = (s)) < 0) { spa_log_error(state->log, msg ": %s", ##__VA_ARGS__, snd_strerror(res)); return res; }
|
||||||
|
|
||||||
static int seq_open(struct seq_state *state, struct seq_conn *conn, bool with_queue)
|
static int seq_open(struct seq_state *state, struct seq_conn *conn, bool with_queue)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -83,7 +83,7 @@ int spa_v4l2_open(struct spa_v4l2_device *dev, const char *path)
|
||||||
|
|
||||||
if (xioctl(dev->fd, VIDIOC_QUERYCAP, &dev->cap) < 0) {
|
if (xioctl(dev->fd, VIDIOC_QUERYCAP, &dev->cap) < 0) {
|
||||||
err = errno;
|
err = errno;
|
||||||
spa_log_error(dev->log, "QUERYCAP: %m");
|
spa_log_error(dev->log, "v4l2: '%s' QUERYCAP: %m", path);
|
||||||
goto error_close;
|
goto error_close;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -135,7 +135,7 @@ static int spa_v4l2_buffer_recycle(struct impl *this, uint32_t buffer_id)
|
||||||
|
|
||||||
if (xioctl(dev->fd, VIDIOC_QBUF, &b->v4l2_buffer) < 0) {
|
if (xioctl(dev->fd, VIDIOC_QBUF, &b->v4l2_buffer) < 0) {
|
||||||
err = errno;
|
err = errno;
|
||||||
spa_log_error(this->log, "VIDIOC_QBUF: %m");
|
spa_log_error(this->log, "v4l2: '%s' VIDIOC_QBUF: %m", this->props.device);
|
||||||
return -err;
|
return -err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -587,7 +587,8 @@ spa_v4l2_enum_format(struct impl *this, int seq,
|
||||||
goto enum_end;
|
goto enum_end;
|
||||||
|
|
||||||
res = -errno;
|
res = -errno;
|
||||||
spa_log_error(this->log, "VIDIOC_ENUM_FMT: %m");
|
spa_log_error(this->log, "v4l2: '%s' VIDIOC_ENUM_FMT: %m",
|
||||||
|
this->props.device);
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -632,7 +633,8 @@ spa_v4l2_enum_format(struct impl *this, int seq,
|
||||||
goto next_fmtdesc;
|
goto next_fmtdesc;
|
||||||
|
|
||||||
res = -errno;
|
res = -errno;
|
||||||
spa_log_error(this->log, "VIDIOC_ENUM_FRAMESIZES: %m");
|
spa_log_error(this->log, "v4l2: '%s' VIDIOC_ENUM_FRAMESIZES: %m",
|
||||||
|
this->props.device);
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
if (filter) {
|
if (filter) {
|
||||||
|
|
@ -722,7 +724,8 @@ spa_v4l2_enum_format(struct impl *this, int seq,
|
||||||
goto next_frmsize;
|
goto next_frmsize;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
spa_log_error(this->log, "VIDIOC_ENUM_FRAMEINTERVALS: %m");
|
spa_log_error(this->log, "v4l2: '%s' VIDIOC_ENUM_FRAMEINTERVALS: %m",
|
||||||
|
this->props.device);
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
if (filter) {
|
if (filter) {
|
||||||
|
|
@ -895,7 +898,8 @@ 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;
|
cmd = (flags & SPA_NODE_PARAM_FLAG_TEST_ONLY) ? VIDIOC_TRY_FMT : VIDIOC_S_FMT;
|
||||||
if (xioctl(dev->fd, cmd, &fmt) < 0) {
|
if (xioctl(dev->fd, cmd, &fmt) < 0) {
|
||||||
res = -errno;
|
res = -errno;
|
||||||
spa_log_error(this->log, "VIDIOC_S_FMT: %m");
|
spa_log_error(this->log, "v4l2: '%s' VIDIOC_S_FMT: %m",
|
||||||
|
this->props.device);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -919,7 +923,8 @@ static int spa_v4l2_set_format(struct impl *this, struct spa_video_info *format,
|
||||||
if (flags & SPA_NODE_PARAM_FLAG_TEST_ONLY)
|
if (flags & SPA_NODE_PARAM_FLAG_TEST_ONLY)
|
||||||
return match ? 0 : 1;
|
return match ? 0 : 1;
|
||||||
|
|
||||||
spa_log_info(this->log, "v4l2: got %.4s %dx%d %d/%d", (char *)&fmt.fmt.pix.pixelformat,
|
spa_log_info(this->log, "v4l2: '%s' got %.4s %dx%d %d/%d",
|
||||||
|
this->props.device, (char *)&fmt.fmt.pix.pixelformat,
|
||||||
fmt.fmt.pix.width, fmt.fmt.pix.height,
|
fmt.fmt.pix.width, fmt.fmt.pix.height,
|
||||||
streamparm.parm.capture.timeperframe.denominator,
|
streamparm.parm.capture.timeperframe.denominator,
|
||||||
streamparm.parm.capture.timeperframe.numerator);
|
streamparm.parm.capture.timeperframe.numerator);
|
||||||
|
|
@ -1064,7 +1069,7 @@ spa_v4l2_enum_controls(struct impl *this, int seq,
|
||||||
goto next;
|
goto next;
|
||||||
}
|
}
|
||||||
res = -errno;
|
res = -errno;
|
||||||
spa_log_error(this->log, "VIDIOC_QUERYCTRL: %m");
|
spa_log_error(this->log, "v4l2: '%s' VIDIOC_QUERYCTRL: %m", this->props.device);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
if (result.next & next_fl)
|
if (result.next & next_fl)
|
||||||
|
|
@ -1231,7 +1236,7 @@ static void v4l2_on_fd_events(struct spa_source *source)
|
||||||
|
|
||||||
if (source->rmask & SPA_IO_ERR) {
|
if (source->rmask & SPA_IO_ERR) {
|
||||||
struct port *port = &this->out_ports[0];
|
struct port *port = &this->out_ports[0];
|
||||||
spa_log_error(this->log, "v4l2 %p: error %08x", this, source->rmask);
|
spa_log_error(this->log, "v4l2: '%p' error %08x", this->props.device, source->rmask);
|
||||||
if (port->source.loop)
|
if (port->source.loop)
|
||||||
spa_loop_remove_source(this->data_loop, &port->source);
|
spa_loop_remove_source(this->data_loop, &port->source);
|
||||||
return;
|
return;
|
||||||
|
|
@ -1292,12 +1297,13 @@ static int spa_v4l2_use_buffers(struct impl *this, struct spa_buffer **buffers,
|
||||||
reqbuf.count = n_buffers;
|
reqbuf.count = n_buffers;
|
||||||
|
|
||||||
if (xioctl(dev->fd, VIDIOC_REQBUFS, &reqbuf) < 0) {
|
if (xioctl(dev->fd, VIDIOC_REQBUFS, &reqbuf) < 0) {
|
||||||
spa_log_error(this->log, "v4l2: VIDIOC_REQBUFS %m");
|
spa_log_error(this->log, "v4l2: '%s' VIDIOC_REQBUFS %m", this->props.device);
|
||||||
return -errno;
|
return -errno;
|
||||||
}
|
}
|
||||||
spa_log_debug(this->log, "v4l2: got %d buffers", reqbuf.count);
|
spa_log_debug(this->log, "v4l2: got %d buffers", reqbuf.count);
|
||||||
if (reqbuf.count < n_buffers) {
|
if (reqbuf.count < n_buffers) {
|
||||||
spa_log_error(this->log, "v4l2: can't allocate enough buffers");
|
spa_log_error(this->log, "v4l2: '%s' can't allocate enough buffers %d < %d",
|
||||||
|
this->props.device, reqbuf.count, n_buffers);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1374,7 +1380,7 @@ mmap_init(struct impl *this,
|
||||||
reqbuf.count = n_buffers;
|
reqbuf.count = n_buffers;
|
||||||
|
|
||||||
if (xioctl(dev->fd, VIDIOC_REQBUFS, &reqbuf) < 0) {
|
if (xioctl(dev->fd, VIDIOC_REQBUFS, &reqbuf) < 0) {
|
||||||
spa_log_error(this->log, "VIDIOC_REQBUFS: %m");
|
spa_log_error(this->log, "v4l2: '%s' VIDIOC_REQBUFS: %m", this->props.device);
|
||||||
return -errno;
|
return -errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1382,7 +1388,8 @@ mmap_init(struct impl *this,
|
||||||
n_buffers = reqbuf.count;
|
n_buffers = reqbuf.count;
|
||||||
|
|
||||||
if (reqbuf.count < 2) {
|
if (reqbuf.count < 2) {
|
||||||
spa_log_error(this->log, "v4l2: can't allocate enough buffers");
|
spa_log_error(this->log, "v4l2: '%s' can't allocate enough buffers (%d)",
|
||||||
|
this->props.device, reqbuf.count);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
if (port->export_buf)
|
if (port->export_buf)
|
||||||
|
|
@ -1409,7 +1416,7 @@ mmap_init(struct impl *this,
|
||||||
b->v4l2_buffer.index = i;
|
b->v4l2_buffer.index = i;
|
||||||
|
|
||||||
if (xioctl(dev->fd, VIDIOC_QUERYBUF, &b->v4l2_buffer) < 0) {
|
if (xioctl(dev->fd, VIDIOC_QUERYBUF, &b->v4l2_buffer) < 0) {
|
||||||
spa_log_error(this->log, "VIDIOC_QUERYBUF: %m");
|
spa_log_error(this->log, "v4l2: '%s' VIDIOC_QUERYBUF: %m", this->props.device);
|
||||||
return -errno;
|
return -errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1429,7 +1436,7 @@ mmap_init(struct impl *this,
|
||||||
expbuf.index = i;
|
expbuf.index = i;
|
||||||
expbuf.flags = O_CLOEXEC | O_RDONLY;
|
expbuf.flags = O_CLOEXEC | O_RDONLY;
|
||||||
if (xioctl(dev->fd, VIDIOC_EXPBUF, &expbuf) < 0) {
|
if (xioctl(dev->fd, VIDIOC_EXPBUF, &expbuf) < 0) {
|
||||||
spa_log_error(this->log, "VIDIOC_EXPBUF: %m");
|
spa_log_error(this->log, "v4l2: '%s' VIDIOC_EXPBUF: %m", this->props.device);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
d[0].type = SPA_DATA_DmaBuf;
|
d[0].type = SPA_DATA_DmaBuf;
|
||||||
|
|
@ -1448,7 +1455,7 @@ mmap_init(struct impl *this,
|
||||||
dev->fd,
|
dev->fd,
|
||||||
b->v4l2_buffer.m.offset);
|
b->v4l2_buffer.m.offset);
|
||||||
if (d[0].data == MAP_FAILED) {
|
if (d[0].data == MAP_FAILED) {
|
||||||
spa_log_error(this->log, "mmap: %m");
|
spa_log_error(this->log, "v4l2: '%s' mmap: %m", this->props.device);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
b->ptr = d[0].data;
|
b->ptr = d[0].data;
|
||||||
|
|
@ -1516,7 +1523,7 @@ static int spa_v4l2_stream_on(struct impl *this)
|
||||||
|
|
||||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||||
if (xioctl(dev->fd, VIDIOC_STREAMON, &type) < 0) {
|
if (xioctl(dev->fd, VIDIOC_STREAMON, &type) < 0) {
|
||||||
spa_log_error(this->log, "VIDIOC_STREAMON: %m");
|
spa_log_error(this->log, "v4l2: '%s' VIDIOC_STREAMON: %m", this->props.device);
|
||||||
return -errno;
|
return -errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1564,7 +1571,7 @@ static int spa_v4l2_stream_off(struct impl *this)
|
||||||
|
|
||||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||||
if (xioctl(dev->fd, VIDIOC_STREAMOFF, &type) < 0) {
|
if (xioctl(dev->fd, VIDIOC_STREAMOFF, &type) < 0) {
|
||||||
spa_log_error(this->log, "VIDIOC_STREAMOFF: %m");
|
spa_log_error(this->log, "v4l2: '%s' VIDIOC_STREAMOFF: %m", this->props.device);
|
||||||
return -errno;
|
return -errno;
|
||||||
}
|
}
|
||||||
for (i = 0; i < port->n_buffers; i++) {
|
for (i = 0; i < port->n_buffers; i++) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue