// will change dynamically, so keep watching it. Implemented in ALSA only.
// returns a negative error code if there's a problem
int (*delay)(long *the_delay); // snd_pcm_sframes_t is a signed long
- int (*rate_info)(uint64_t *measurement_time, uint64_t *delay,
+ int (*stats)(uint64_t *measurement_time, uint64_t *delay,
uint64_t *frames_sent_to_dac); // use this to get the true rate of the DAC
// may be NULL, in which case soft volume is applied
static void stop(void);
static void flush(void);
int delay(long *the_delay);
-int play_stats(uint64_t *the_time, uint64_t *the_delay, uint64_t *frames_sent_to_dac);
+int stats(uint64_t *the_time, uint64_t *the_delay, uint64_t *frames_sent_to_dac);
// int get_rate_information(uint64_t *elapsed_time, uint64_t *frames_played);
void *alsa_buffer_monitor_thread_code(void *arg);
.flush = &flush,
.delay = &delay,
.play = &play,
- .rate_info = &play_stats, // will also include frames of silence sent to stop
+ .stats = &stats, // will also include frames of silence sent to stop
// standby mode
// .rate_info = NULL,
.mute = NULL, // a function will be provided if it can, and is allowed to,
return ret;
}
-int play_stats(uint64_t *the_time, uint64_t *the_delay, uint64_t *frames_sent_to_dac) {
+int stats(uint64_t *the_time, uint64_t *the_delay, uint64_t *frames_sent_to_dac) {
// returns 0 if the device is in a valid state -- SND_PCM_STATE_RUNNING or
// SND_PCM_STATE_PREPARED
// or SND_PCM_STATE_DRAINING
.is_running = NULL,
.flush = NULL,
.delay = NULL,
+ .stats = NULL,
.play = &play,
.volume = NULL,
.parameters = NULL,
.is_running = NULL,
.flush = NULL,
.delay = NULL,
+ .stats = NULL,
.play = &play,
.volume = NULL,
.parameters = NULL,
.is_running = NULL,
.flush = &jack_flush,
.delay = &jack_delay,
+ .stats = NULL,
.play = &play,
.volume = NULL,
.parameters = NULL,
.is_running = NULL,
.flush = &flush,
.delay = &pa_delay,
+ .stats = NULL,
.play = &play,
.volume = NULL,
.parameters = NULL,
.is_running = NULL,
.flush = NULL,
.delay = NULL,
+ .stats = NULL,
.play = &play,
.volume = NULL,
.parameters = NULL,
.is_running = NULL,
.flush = &flush,
.delay = NULL,
+ .stats = NULL,
.play = &play,
.volume = NULL,
.parameters = NULL,
.is_running = NULL,
.flush = &flush,
.delay = &delay,
+ .stats = NULL,
.play = &play,
.volume = NULL,
.parameters = NULL,
.is_running = NULL,
.flush = &flush,
.delay = NULL,
+ .stats = NULL,
.play = &play,
.volume = NULL,
.parameters = ¶meters,
.is_running = NULL,
.flush = NULL,
.delay = NULL,
+ .stats = NULL,
.play = &play,
.volume = NULL,
.parameters = NULL,
}
} else {
#endif
- if (config.output->delay) {
+ if (config.output->stats) {
if (config.no_sync == 0)
statistics_print_profile = ap1_synced_statistics_print_profile;
else
}
int stats_status = -1;
- if ((config.output->delay) && (config.no_sync == 0) && (config.output->rate_info)) {
+ if ((config.output->delay) && (config.no_sync == 0) && (config.output->stats)) {
uint64_t frames_sent_for_play;
uint64_t measurement_time;
uint64_t actual_delay;
- stats_status = config.output->rate_info(&measurement_time, &actual_delay, &frames_sent_for_play);
+ stats_status = config.output->stats(&measurement_time, &actual_delay, &frames_sent_for_play);
// debug(1,"actual_delay: %" PRIu64 ", frames_sent_for_play: %" PRIu64 ", frames_played: %" PRIu64 ".", actual_delay, frames_sent_for_play, frames_sent_for_play - actual_delay);
uint64_t frames_played = frames_sent_for_play - actual_delay;
// If the status is zero, it means that there were no output problems since the
- // last time the rate_info call was made. Thus, the frame rate should be valid.
+ // last time the stats call was made. Thus, the frame rate should be valid.
if ((stats_status == 0) && (previous_frames_played_valid)) {
uint64_t frames_played_in_this_interval = frames_played - previous_frames_played;
uint64_t interval = measurement_time - previous_frames_played_time;