buffers: make alignment optional

Make the alignment parameter optional when negotiating buffers.
Default to a 16 bytes alignment and adjust for the max cpu
alignment.
Remove the useless align buffer parameter in plugins, we always
set it to 16 anyway.
This commit is contained in:
Wim Taymans 2022-01-03 12:32:26 +01:00
parent 30982775d9
commit 35cbe4e939
48 changed files with 54 additions and 91 deletions

View file

@ -556,8 +556,7 @@ impl_node_port_enum_params(void *object, int seq,
this->props.max_latency * this->frame_size,
this->props.min_latency * this->frame_size,
INT32_MAX),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(this->frame_size),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(this->frame_size));
break;
case SPA_PARAM_Meta:

View file

@ -503,8 +503,7 @@ impl_node_port_enum_params(void *object, int seq,
this->props.max_latency * this->frame_size,
this->props.min_latency * this->frame_size,
INT32_MAX),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(this->frame_size),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(this->frame_size));
break;
case SPA_PARAM_Meta:

View file

@ -559,8 +559,7 @@ impl_node_port_enum_params(void *object, int seq,
SPA_PARAM_BUFFERS_blocks, SPA_POD_Int(1),
SPA_PARAM_BUFFERS_size, SPA_POD_CHOICE_RANGE_Int(
4096, 4096, INT32_MAX),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(1),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(1));
break;
case SPA_PARAM_Meta:

View file

@ -46,6 +46,8 @@
#define SPA_LOG_TOPIC_DEFAULT log_topic
static struct spa_log_topic *log_topic = &SPA_LOG_TOPIC(0, "spa.audioadapter");
#define DEFAULT_ALIGN 16
#define MAX_PORTS SPA_AUDIO_MAX_CHANNELS
/** \cond */
@ -367,13 +369,15 @@ static int negotiate_buffers(struct impl *this)
follower_alloc = false;
}
align = DEFAULT_ALIGN;
if ((res = spa_pod_parse_object(param,
SPA_TYPE_OBJECT_ParamBuffers, NULL,
SPA_PARAM_BUFFERS_buffers, SPA_POD_Int(&buffers),
SPA_PARAM_BUFFERS_blocks, SPA_POD_Int(&blocks),
SPA_PARAM_BUFFERS_size, SPA_POD_Int(&size),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(&stride),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(&align))) < 0)
SPA_PARAM_BUFFERS_align, SPA_POD_OPT_Int(&align))) < 0)
return res;
spa_log_debug(this->log, "%p: buffers:%d, blocks:%d, size:%d, stride:%d align:%d %d:%d",

View file

@ -47,6 +47,8 @@
#define SPA_LOG_TOPIC_DEFAULT log_topic
static struct spa_log_topic *log_topic = &SPA_LOG_TOPIC(0, "spa.audioconvert");
#define DEFAULT_ALIGN 16
#define MAX_PORTS SPA_AUDIO_MAX_CHANNELS
struct buffer {
@ -361,12 +363,14 @@ static int negotiate_link_buffers(struct impl *this, struct link *link)
in_alloc = false;
}
align = DEFAULT_ALIGN;
if (spa_pod_parse_object(param,
SPA_TYPE_OBJECT_ParamBuffers, NULL,
SPA_PARAM_BUFFERS_buffers, SPA_POD_Int(&buffers),
SPA_PARAM_BUFFERS_blocks, SPA_POD_Int(&blocks),
SPA_PARAM_BUFFERS_size, SPA_POD_Int(&size),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(&align)) < 0)
SPA_PARAM_BUFFERS_align, SPA_POD_OPT_Int(&align)) < 0)
return -EINVAL;
spa_log_debug(this->log, "%p: buffers %d, blocks %d, size %d, align %d %d:%d",

View file

@ -971,8 +971,7 @@ impl_node_port_enum_params(void *object, int seq,
DEFAULT_CONTROL_BUFFER_SIZE,
1024,
INT32_MAX),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(1),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(1));
} else {
if (other->n_buffers > 0) {
buffers = other->n_buffers;
@ -990,8 +989,7 @@ impl_node_port_enum_params(void *object, int seq,
size * port->stride,
16 * port->stride,
INT32_MAX),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->stride),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->stride));
}
break;
}

View file

@ -533,8 +533,7 @@ impl_node_port_enum_params(void *object, int seq,
SPA_PARAM_BUFFERS_buffers, SPA_POD_CHOICE_RANGE_Int(2, 1, MAX_BUFFERS),
SPA_PARAM_BUFFERS_blocks, SPA_POD_Int(port->blocks),
SPA_PARAM_BUFFERS_size, SPA_POD_Int(other->size / other->stride * port->stride),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->stride),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->stride));
} else {
@ -546,8 +545,7 @@ impl_node_port_enum_params(void *object, int seq,
MAX_SAMPLES * 2 * port->stride,
16 * port->stride,
INT32_MAX),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->stride),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->stride));
}
break;
}

View file

@ -872,8 +872,7 @@ impl_node_port_enum_params(void *object, int seq,
MAX_SAMPLES * port->stride,
16 * port->stride,
INT32_MAX),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->stride),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->stride));
break;
case SPA_PARAM_Meta:
switch (result.index) {

View file

@ -509,8 +509,7 @@ impl_node_port_enum_params(void *object, int seq,
size * port->stride,
16 * port->stride,
INT32_MAX),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->stride),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->stride));
break;
}
case SPA_PARAM_Meta:

View file

@ -553,8 +553,7 @@ impl_node_port_enum_params(void *object, int seq,
MAX_SAMPLES * port->stride,
16 * port->stride,
MAX_SAMPLES * port->stride),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->stride),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->stride));
break;
case SPA_PARAM_Meta:

View file

@ -461,8 +461,7 @@ impl_node_port_enum_params(void *object, int seq,
MAX_SAMPLES * port->stride,
16 * port->stride,
INT32_MAX),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->stride),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->stride));
break;
}
case SPA_PARAM_Meta:

View file

@ -424,8 +424,7 @@ impl_node_port_enum_params(void *object, int seq,
MAX_SAMPLES * this->stride,
16 * this->stride,
INT32_MAX),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(this->stride),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(this->stride));
break;
case SPA_PARAM_Meta:
switch (result.index) {

View file

@ -403,8 +403,7 @@ next:
MAX_SAMPLES * this->stride,
16 * this->stride,
INT32_MAX),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(this->stride),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(this->stride));
break;
case SPA_PARAM_Meta:

View file

@ -649,8 +649,7 @@ impl_node_port_enum_params(void *object, int seq,
MAX_SAMPLES * port->bpf,
16 * port->bpf,
INT32_MAX),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->bpf),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->bpf));
break;
case SPA_PARAM_Meta:
switch (result.index) {

View file

@ -1085,8 +1085,7 @@ impl_node_port_enum_params(void *object, int seq,
this->props.min_latency * port->frame_size,
this->props.min_latency * port->frame_size,
INT32_MAX),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->frame_size),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->frame_size));
break;
case SPA_PARAM_Meta:

View file

@ -995,8 +995,7 @@ impl_node_port_enum_params(void *object, int seq,
this->props.max_latency * port->frame_size,
this->props.min_latency * port->frame_size,
INT32_MAX),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->frame_size),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->frame_size));
break;
case SPA_PARAM_Meta:

View file

@ -906,8 +906,7 @@ impl_node_port_enum_params(void *object, int seq,
this->props.max_latency * port->frame_size,
this->props.min_latency * port->frame_size,
INT32_MAX),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->frame_size),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->frame_size));
break;
case SPA_PARAM_Meta:

View file

@ -908,8 +908,7 @@ impl_node_port_enum_params(void *object, int seq,
this->props.max_latency * port->frame_size,
this->props.min_latency * port->frame_size,
INT32_MAX),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->frame_size),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->frame_size));
break;
case SPA_PARAM_Meta:

View file

@ -351,8 +351,7 @@ next:
SPA_PARAM_BUFFERS_buffers, SPA_POD_CHOICE_RANGE_Int(2, 1, MAX_BUFFERS),
SPA_PARAM_BUFFERS_blocks, SPA_POD_Int(1),
SPA_PARAM_BUFFERS_size, SPA_POD_CHOICE_RANGE_Int(4096, 512, INT32_MAX),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(1),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(1));
break;
case SPA_PARAM_IO:

View file

@ -568,8 +568,7 @@ impl_node_port_enum_params(void *object, int seq,
MAX_SAMPLES * port->stride,
16 * port->stride,
MAX_SAMPLES * port->stride),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->stride),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->stride));
break;
}
case SPA_PARAM_IO:

View file

@ -567,8 +567,7 @@ impl_node_port_enum_params(void *object, int seq,
MAX_SAMPLES * port->stride,
16 * port->stride,
MAX_SAMPLES * port->stride),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->stride),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->stride));
break;
}
case SPA_PARAM_IO:

View file

@ -530,8 +530,7 @@ next:
SPA_PARAM_BUFFERS_buffers, SPA_POD_CHOICE_RANGE_Int(n_buffers, n_buffers, n_buffers),
SPA_PARAM_BUFFERS_blocks, SPA_POD_Int(1),
SPA_PARAM_BUFFERS_size, SPA_POD_Int(port->streamConfig.frameSize),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->streamConfig.stride),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->streamConfig.stride));
break;
}
case SPA_PARAM_Meta:

View file

@ -541,8 +541,7 @@ impl_node_port_enum_params(void *object, int seq,
MAX_SAMPLES * port->bpf,
16 * port->bpf,
INT32_MAX),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->bpf),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->bpf));
break;
case SPA_PARAM_IO:
switch (result.index) {

View file

@ -482,8 +482,7 @@ impl_node_port_enum_params(void *object, int seq,
SPA_PARAM_BUFFERS_buffers, SPA_POD_CHOICE_RANGE_Int(2, 1, 32),
SPA_PARAM_BUFFERS_blocks, SPA_POD_Int(1),
SPA_PARAM_BUFFERS_size, SPA_POD_Int(128),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(1),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(1));
break;
case SPA_PARAM_Meta:
switch (result.index) {

View file

@ -494,8 +494,7 @@ impl_node_port_enum_params(void *object, int seq,
SPA_PARAM_BUFFERS_buffers, SPA_POD_CHOICE_RANGE_Int(32, 2, 32),
SPA_PARAM_BUFFERS_blocks, SPA_POD_Int(1),
SPA_PARAM_BUFFERS_size, SPA_POD_Int(128),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(1),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(1));
break;
default:
return 0;

View file

@ -544,8 +544,7 @@ static int impl_node_port_enum_params(void *object, int seq,
SPA_PARAM_BUFFERS_buffers, SPA_POD_CHOICE_RANGE_Int(MAX_BUFFERS, 2, MAX_BUFFERS),
SPA_PARAM_BUFFERS_blocks, SPA_POD_Int(1),
SPA_PARAM_BUFFERS_size, SPA_POD_Int(port->fmt.fmt.pix.sizeimage),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->fmt.fmt.pix.bytesperline),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->fmt.fmt.pix.bytesperline));
break;
case SPA_PARAM_Meta:

View file

@ -38,6 +38,8 @@
#include <spa/debug/format.h>
#include <spa/debug/pod.h>
#define DEFAULT_ALIGN 16
#define NAME "videoadapter"
/** \cond */
@ -620,12 +622,14 @@ static int negotiate_buffers(struct impl *this)
follower_alloc = false;
}
align = DEFAULT_ALIGN;
if ((res = spa_pod_parse_object(param,
SPA_TYPE_OBJECT_ParamBuffers, NULL,
SPA_PARAM_BUFFERS_buffers, SPA_POD_Int(&buffers),
SPA_PARAM_BUFFERS_blocks, SPA_POD_Int(&blocks),
SPA_PARAM_BUFFERS_size, SPA_POD_Int(&size),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(&align))) < 0)
SPA_PARAM_BUFFERS_align, SPA_POD_OPT_Int(&align))) < 0)
return res;
spa_log_debug(this->log, "%p: buffers %d, blocks %d, size %d, align %d %d:%d",

View file

@ -558,8 +558,7 @@ impl_node_port_enum_params(void *object, int seq,
SPA_PARAM_BUFFERS_buffers, SPA_POD_CHOICE_RANGE_Int(2, 1, MAX_BUFFERS),
SPA_PARAM_BUFFERS_blocks, SPA_POD_Int(1),
SPA_PARAM_BUFFERS_size, SPA_POD_Int(port->stride * raw_info->size.height),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->stride),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(port->stride));
break;
}
case SPA_PARAM_Meta:

View file

@ -389,8 +389,7 @@ impl_node_port_enum_params(void *object, int seq,
MAX_SAMPLES * this->bpf,
16 * this->bpf,
INT32_MAX),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(0),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(this->bpf));
break;
case SPA_PARAM_Meta:
switch (result.index) {

View file

@ -600,8 +600,7 @@ impl_node_port_enum_params(void *object, int seq,
SPA_PARAM_BUFFERS_blocks, SPA_POD_Int(1),
SPA_PARAM_BUFFERS_size, SPA_POD_Int(this->position->video.stride *
this->position->video.size.height),
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(this->position->video.stride),
SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
SPA_PARAM_BUFFERS_stride, SPA_POD_Int(this->position->video.stride));
break;
}
case SPA_PARAM_Meta: