mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-02 09:01:50 -05:00
stream: for format conversion
This commit is contained in:
parent
ba518c0d9b
commit
b171361204
6 changed files with 1087 additions and 331 deletions
|
|
@ -298,13 +298,46 @@ static int negotiate_formats(struct data *data)
|
|||
format)) < 0)
|
||||
return res;
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int negotiate_buffers(struct data *data)
|
||||
{
|
||||
int res;
|
||||
uint32_t state;
|
||||
struct spa_pod *param;
|
||||
struct spa_pod_builder b = { 0 };
|
||||
uint8_t buffer[4096];
|
||||
|
||||
spa_pod_builder_init(&b, buffer, sizeof(buffer));
|
||||
state = 0;
|
||||
if ((res = spa_node_port_enum_params(data->conv,
|
||||
SPA_DIRECTION_INPUT, 0,
|
||||
data->type.param.idBuffers, &state,
|
||||
NULL, ¶m, &b)) <= 0)
|
||||
return -EBADF;
|
||||
|
||||
spa_debug_pod(param, 0);
|
||||
|
||||
init_buffer(data, data->in_buffers, data->in_buffer, 1, BUFFER_SIZE, 1);
|
||||
if ((res =
|
||||
spa_node_port_use_buffers(data->conv, SPA_DIRECTION_INPUT, 0, data->in_buffers,
|
||||
1)) < 0)
|
||||
return res;
|
||||
|
||||
init_buffer(data, data->out_buffers, data->out_buffer, 1, BUFFER_SIZE / 2, 2);
|
||||
|
||||
spa_pod_builder_init(&b, buffer, sizeof(buffer));
|
||||
state = 0;
|
||||
if ((res = spa_node_port_enum_params(data->conv,
|
||||
SPA_DIRECTION_OUTPUT, 0,
|
||||
data->type.param.idBuffers, &state,
|
||||
NULL, ¶m, &b)) <= 0)
|
||||
return -EBADF;
|
||||
|
||||
spa_debug_pod(param, 0);
|
||||
|
||||
init_buffer(data, data->out_buffers, data->out_buffer, 1, BUFFER_SIZE, 2);
|
||||
if ((res =
|
||||
spa_node_port_use_buffers(data->conv, SPA_DIRECTION_OUTPUT, 0, data->out_buffers,
|
||||
1)) < 0)
|
||||
|
|
@ -346,8 +379,8 @@ static void run_convert(struct data *data)
|
|||
res = spa_node_process(data->conv);
|
||||
printf("called process %d\n", res);
|
||||
|
||||
spa_debug_dump_mem(data->out_buffers[0]->datas[0].data, BUFFER_SIZE / 2);
|
||||
spa_debug_dump_mem(data->out_buffers[0]->datas[1].data, BUFFER_SIZE / 2);
|
||||
spa_debug_dump_mem(data->out_buffers[0]->datas[0].data, BUFFER_SIZE);
|
||||
spa_debug_dump_mem(data->out_buffers[0]->datas[1].data, BUFFER_SIZE);
|
||||
|
||||
{
|
||||
struct spa_command cmd = SPA_COMMAND_INIT(data->type.command_node.Pause);
|
||||
|
|
@ -385,6 +418,10 @@ int main(int argc, char *argv[])
|
|||
printf("can't negotiate nodes: %d\n", res);
|
||||
return -1;
|
||||
}
|
||||
if ((res = negotiate_buffers(&data)) < 0) {
|
||||
printf("can't negotiate buffers: %d\n", res);
|
||||
return -1;
|
||||
}
|
||||
|
||||
run_convert(&data);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue