v4l2: use 32 buffers max

We don't yet probe the number of available buffers and so we might claim
to support 64 buffers but then fail to allocate that many buffers in
_use_buffers().
This commit is contained in:
Wim Taymans 2019-05-27 15:35:20 +02:00
parent 5b3336ce3e
commit c44d655516
3 changed files with 9 additions and 3 deletions

View file

@ -58,7 +58,7 @@ static void reset_props(struct props *props)
strncpy(props->device, default_device, 64);
}
#define MAX_BUFFERS 64
#define MAX_BUFFERS 32
#define BUFFER_FLAG_OUTSTANDING (1<<0)
#define BUFFER_FLAG_ALLOCATED (1<<1)
@ -567,6 +567,7 @@ static int port_set_format(void *object,
spa_v4l2_stream_off(this);
spa_v4l2_clear_buffers(this);
port->have_format = false;
port->dev.have_format = false;
spa_v4l2_close(&port->dev);
goto done;
} else {

View file

@ -110,7 +110,7 @@ int spa_v4l2_close(struct spa_v4l2_device *dev)
if (dev->fd == -1)
return 0;
if (dev->active)
if (dev->active || dev->have_format)
return 0;
spa_log_info(dev->log, "v4l2: close");
@ -916,6 +916,7 @@ static int spa_v4l2_set_format(struct impl *this, struct spa_video_info *format,
if (try_only)
return 0;
dev->have_format = true;
size->width = fmt.fmt.pix.width;
size->height = fmt.fmt.pix.height;
port->rate.denom = framerate->num = streamparm.parm.capture.timeperframe.denominator;
@ -1474,6 +1475,9 @@ static int spa_v4l2_stream_on(struct impl *this)
if (dev->fd == -1)
return -EIO;
if (!dev->have_format)
return -EIO;
if (dev->active)
return 0;

View file

@ -28,7 +28,8 @@ struct spa_v4l2_device {
struct spa_log *log;
int fd;
struct v4l2_capability cap;
bool active;
unsigned int active:1;
unsigned int have_format:1;
};
int spa_v4l2_open(struct spa_v4l2_device *dev, const char *path);