fix use_buffers checks

We can set 0 buffers even if there is no format.
Return -ENOSPC when too many buffers are set.
This commit is contained in:
Wim Taymans 2023-01-10 12:30:25 +01:00
parent 9f3237b74e
commit 97aafe2234
31 changed files with 146 additions and 88 deletions

View file

@ -46,6 +46,7 @@
#define M_PI_M2 ( M_PI + M_PI )
#define BUFFER_SAMPLES 128
#define MAX_BUFFERS 32
struct buffer {
uint32_t id;
@ -79,7 +80,7 @@ struct data {
struct spa_audio_info_raw format;
struct buffer buffers[32];
struct buffer buffers[MAX_BUFFERS];
uint32_t n_buffers;
struct spa_list empty;
@ -325,6 +326,9 @@ static int impl_port_use_buffers(void *object,
struct data *d = object;
uint32_t i;
if (n_buffers > MAX_BUFFERS)
return -ENOSPC;
for (i = 0; i < n_buffers; i++) {
struct buffer *b = &d->buffers[i];
struct spa_data *datas = buffers[i]->datas;

View file

@ -34,6 +34,7 @@
#define WIDTH 640
#define HEIGHT 480
#define BPP 3
#define MAX_BUFFERS 32
#include "sdl.h"
@ -68,7 +69,7 @@ struct data {
struct spa_video_info_raw format;
int32_t stride;
struct spa_buffer *buffers[32];
struct spa_buffer *buffers[MAX_BUFFERS];
int n_buffers;
struct pw_proxy *out, *in, *link;
@ -264,6 +265,9 @@ static int impl_port_use_buffers(void *object,
struct data *d = object;
uint32_t i;
if (n_buffers > MAX_BUFFERS)
return -ENOSPC;
for (i = 0; i < n_buffers; i++)
d->buffers[i] = buffers[i];
d->n_buffers = n_buffers;