bluez5: add port latency reporting

This commit is contained in:
Huang-Huang Bao 2021-05-28 19:02:06 +08:00
parent d8435cd5fd
commit 38bcec9022
No known key found for this signature in database
GPG key ID: 33C3271387A13D1B
6 changed files with 120 additions and 5 deletions

View file

@ -45,6 +45,7 @@
#include <spa/node/io.h>
#include <spa/node/keys.h>
#include <spa/param/param.h>
#include <spa/param/latency-utils.h>
#include <spa/param/audio/format.h>
#include <spa/param/audio/format-utils.h>
#include <spa/pod/filter.h>
@ -77,12 +78,14 @@ struct port {
struct spa_port_info info;
struct spa_io_buffers *io;
struct spa_io_rate_match *rate_match;
struct spa_latency_info latency;
#define IDX_EnumFormat 0
#define IDX_Meta 1
#define IDX_IO 2
#define IDX_Format 3
#define IDX_Buffers 4
#define N_PORT_PARAMS 5
#define IDX_Latency 5
#define N_PORT_PARAMS 6
struct spa_param_info params[N_PORT_PARAMS];
struct buffer buffers[MAX_BUFFERS];
@ -929,6 +932,16 @@ impl_node_port_enum_params(void *object, int seq,
}
break;
case SPA_PARAM_Latency:
switch (result.index) {
case 0:
param = spa_latency_build(&b, id, &port->latency);
break;
default:
return 0;
}
break;
default:
return -ENOENT;
}
@ -992,6 +1005,7 @@ static int port_set_format(struct impl *this, struct port *port,
port->info.rate = SPA_FRACTION(1, port->current_format.info.raw.rate);
port->params[IDX_Format] = SPA_PARAM_INFO(SPA_PARAM_Format, SPA_PARAM_INFO_READWRITE);
port->params[IDX_Buffers] = SPA_PARAM_INFO(SPA_PARAM_Buffers, SPA_PARAM_INFO_READ);
port->params[IDX_Latency].flags ^= SPA_PARAM_INFO_SERIAL;
} else {
port->params[IDX_Format] = SPA_PARAM_INFO(SPA_PARAM_Format, SPA_PARAM_INFO_WRITE);
port->params[IDX_Buffers] = SPA_PARAM_INFO(SPA_PARAM_Buffers, 0);
@ -1299,9 +1313,14 @@ impl_init(const struct spa_handle_factory *factory,
port->params[IDX_IO] = SPA_PARAM_INFO(SPA_PARAM_IO, SPA_PARAM_INFO_READ);
port->params[IDX_Format] = SPA_PARAM_INFO(SPA_PARAM_Format, SPA_PARAM_INFO_WRITE);
port->params[IDX_Buffers] = SPA_PARAM_INFO(SPA_PARAM_Buffers, 0);
port->params[IDX_Latency] = SPA_PARAM_INFO(SPA_PARAM_Latency, SPA_PARAM_INFO_READWRITE);
port->info.params = port->params;
port->info.n_params = N_PORT_PARAMS;
port->latency = SPA_LATENCY_INFO(SPA_DIRECTION_OUTPUT);
port->latency.min_quantum = 1.0f;
port->latency.max_quantum = 1.0f;
/* Init the buffer lists */
spa_list_init(&port->ready);
spa_list_init(&port->free);