mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-02 09:01:50 -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;
|
||||
JackGraphOrderCallback graph_callback;
|
||||
void *graph_arg;
|
||||
JackSyncCallback sync_callback;
|
||||
void *sync_arg;
|
||||
JackTimebaseCallback timebase_callback;
|
||||
void *timebase_arg;
|
||||
|
||||
struct pw_client_node_position *position;
|
||||
uint32_t sample_rate;
|
||||
|
|
@ -270,6 +274,8 @@ struct client {
|
|||
|
||||
bool started;
|
||||
int status;
|
||||
|
||||
jack_position_t jack_position;
|
||||
};
|
||||
|
||||
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->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);
|
||||
if (c->process_callback)
|
||||
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;
|
||||
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)
|
||||
{
|
||||
struct client *c = (struct client *) client;
|
||||
if (c->sample_rate == -1)
|
||||
return DEFAULT_SAMPLE_RATE;
|
||||
return c->sample_rate;
|
||||
}
|
||||
|
||||
jack_nframes_t jack_get_buffer_size (jack_client_t *client)
|
||||
{
|
||||
struct client *c = (struct client *) client;
|
||||
if (c->buffer_size == -1)
|
||||
return DEFAULT_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)
|
||||
{
|
||||
pw_log_warn("not implemented");
|
||||
return 0;
|
||||
struct client *c = (struct client *) client;
|
||||
return c->jack_position.frame;
|
||||
}
|
||||
|
||||
jack_nframes_t jack_last_frame_time (const jack_client_t *client)
|
||||
{
|
||||
pw_log_warn("not implemented");
|
||||
return 0;
|
||||
struct client *c = (struct client *) client;
|
||||
return c->jack_position.frame;
|
||||
}
|
||||
|
||||
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,
|
||||
void *arg)
|
||||
{
|
||||
pw_log_warn("not implemented");
|
||||
return -ENOTSUP;
|
||||
struct client *c = (struct client *) client;
|
||||
c->sync_callback = sync_callback;
|
||||
c->sync_arg = arg;
|
||||
return 0;
|
||||
}
|
||||
|
||||
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,
|
||||
void *arg)
|
||||
{
|
||||
pw_log_warn("not implemented");
|
||||
return -ENOTSUP;
|
||||
struct client *c = (struct client *) client;
|
||||
c->timebase_callback = timebase_callback;
|
||||
c->timebase_arg = arg;
|
||||
return 0;
|
||||
}
|
||||
|
||||
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_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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue