mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-04 13:30:12 -05:00
jack: implement more transport info
This commit is contained in:
parent
796c91440e
commit
5b05b21865
1 changed files with 42 additions and 9 deletions
|
|
@ -251,6 +251,10 @@ struct client {
|
||||||
void *connect_arg;
|
void *connect_arg;
|
||||||
JackGraphOrderCallback graph_callback;
|
JackGraphOrderCallback graph_callback;
|
||||||
void *graph_arg;
|
void *graph_arg;
|
||||||
|
JackSyncCallback sync_callback;
|
||||||
|
void *sync_arg;
|
||||||
|
JackTimebaseCallback timebase_callback;
|
||||||
|
void *timebase_arg;
|
||||||
|
|
||||||
struct pw_client_node_position *position;
|
struct pw_client_node_position *position;
|
||||||
uint32_t sample_rate;
|
uint32_t sample_rate;
|
||||||
|
|
@ -270,6 +274,8 @@ struct client {
|
||||||
|
|
||||||
bool started;
|
bool started;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
|
jack_position_t jack_position;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void init_port_pool(struct client *c, enum spa_direction direction)
|
static void init_port_pool(struct client *c, enum spa_direction direction)
|
||||||
|
|
@ -667,10 +673,27 @@ on_rtsocket_condition(void *data, int fd, enum spa_io mask)
|
||||||
c->srate_callback(c->sample_rate, c->srate_arg);
|
c->srate_callback(c->sample_rate, c->srate_arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
c->jack_position.usecs = c->position->nsec/1000;
|
||||||
|
c->jack_position.frame_rate = c->sample_rate;
|
||||||
|
c->jack_position.frame = c->position->position / sizeof(float);
|
||||||
|
|
||||||
|
if (c->sync_callback) {
|
||||||
|
c->sync_callback(JackTransportRolling,
|
||||||
|
&c->jack_position, c->sync_arg);
|
||||||
|
}
|
||||||
|
|
||||||
pw_log_trace("do process %d %d", c->buffer_size, c->sample_rate);
|
pw_log_trace("do process %d %d", c->buffer_size, c->sample_rate);
|
||||||
if (c->process_callback)
|
if (c->process_callback)
|
||||||
c->process_callback(c->buffer_size, c->process_arg);
|
c->process_callback(c->buffer_size, c->process_arg);
|
||||||
|
|
||||||
|
if (c->timebase_callback) {
|
||||||
|
c->timebase_callback(JackTransportRolling,
|
||||||
|
buffer_size,
|
||||||
|
&c->jack_position,
|
||||||
|
false,
|
||||||
|
c->timebase_arg);
|
||||||
|
}
|
||||||
|
|
||||||
cmd = 1;
|
cmd = 1;
|
||||||
write(c->writefd, &cmd, 8);
|
write(c->writefd, &cmd, 8);
|
||||||
}
|
}
|
||||||
|
|
@ -1817,12 +1840,16 @@ int jack_set_buffer_size (jack_client_t *client, jack_nframes_t nframes)
|
||||||
jack_nframes_t jack_get_sample_rate (jack_client_t *client)
|
jack_nframes_t jack_get_sample_rate (jack_client_t *client)
|
||||||
{
|
{
|
||||||
struct client *c = (struct client *) client;
|
struct client *c = (struct client *) client;
|
||||||
|
if (c->sample_rate == -1)
|
||||||
|
return DEFAULT_SAMPLE_RATE;
|
||||||
return c->sample_rate;
|
return c->sample_rate;
|
||||||
}
|
}
|
||||||
|
|
||||||
jack_nframes_t jack_get_buffer_size (jack_client_t *client)
|
jack_nframes_t jack_get_buffer_size (jack_client_t *client)
|
||||||
{
|
{
|
||||||
struct client *c = (struct client *) client;
|
struct client *c = (struct client *) client;
|
||||||
|
if (c->buffer_size == -1)
|
||||||
|
return DEFAULT_BUFFER_SIZE;
|
||||||
return c->buffer_size;
|
return c->buffer_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2514,14 +2541,14 @@ jack_nframes_t jack_frames_since_cycle_start (const jack_client_t *client)
|
||||||
|
|
||||||
jack_nframes_t jack_frame_time (const jack_client_t *client)
|
jack_nframes_t jack_frame_time (const jack_client_t *client)
|
||||||
{
|
{
|
||||||
pw_log_warn("not implemented");
|
struct client *c = (struct client *) client;
|
||||||
return 0;
|
return c->jack_position.frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
jack_nframes_t jack_last_frame_time (const jack_client_t *client)
|
jack_nframes_t jack_last_frame_time (const jack_client_t *client)
|
||||||
{
|
{
|
||||||
pw_log_warn("not implemented");
|
struct client *c = (struct client *) client;
|
||||||
return 0;
|
return c->jack_position.frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
int jack_get_cycle_times(const jack_client_t *client,
|
int jack_get_cycle_times(const jack_client_t *client,
|
||||||
|
|
@ -2577,8 +2604,10 @@ int jack_set_sync_callback (jack_client_t *client,
|
||||||
JackSyncCallback sync_callback,
|
JackSyncCallback sync_callback,
|
||||||
void *arg)
|
void *arg)
|
||||||
{
|
{
|
||||||
pw_log_warn("not implemented");
|
struct client *c = (struct client *) client;
|
||||||
return -ENOTSUP;
|
c->sync_callback = sync_callback;
|
||||||
|
c->sync_arg = arg;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int jack_set_sync_timeout (jack_client_t *client,
|
int jack_set_sync_timeout (jack_client_t *client,
|
||||||
|
|
@ -2593,8 +2622,10 @@ int jack_set_timebase_callback (jack_client_t *client,
|
||||||
JackTimebaseCallback timebase_callback,
|
JackTimebaseCallback timebase_callback,
|
||||||
void *arg)
|
void *arg)
|
||||||
{
|
{
|
||||||
pw_log_warn("not implemented");
|
struct client *c = (struct client *) client;
|
||||||
return -ENOTSUP;
|
c->timebase_callback = timebase_callback;
|
||||||
|
c->timebase_arg = arg;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int jack_transport_locate (jack_client_t *client,
|
int jack_transport_locate (jack_client_t *client,
|
||||||
|
|
@ -2607,7 +2638,9 @@ int jack_transport_locate (jack_client_t *client,
|
||||||
jack_transport_state_t jack_transport_query (const jack_client_t *client,
|
jack_transport_state_t jack_transport_query (const jack_client_t *client,
|
||||||
jack_position_t *pos)
|
jack_position_t *pos)
|
||||||
{
|
{
|
||||||
pw_log_warn("not implemented");
|
struct client *c = (struct client *) client;
|
||||||
|
if (pos != NULL)
|
||||||
|
memcpy(pos, &c->jack_position, sizeof(jack_position_t));
|
||||||
return JackTransportRolling;
|
return JackTransportRolling;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue