int mute(int do_mute); // returns true if it actually is allowed to use the mute
static double set_volume;
static int output_method_signalled = 0; // for reporting whether it's using mmap or not
+int delay_type_notified = -1; // for controlling the reporting of whether the output device can do precison delays (alsa->pulsaudio devices can't)
audio_output audio_alsa = {
.name = "alsa",
*using_update_timestamps = YNDK_YES;
}
-/*
+ if (update_timestamp_ns == 0)
+ debug(1,"update timestamp is zero!");
+
+// user information
if (update_timestamp_ns == 0) {
- if (delay_type_notifier != 1) {
- inform("Note: this output device does not provide timed delay updates via snd_pcm_status_get_*_htstamp(). Is it a virtual rather than a real device? Disable_standby is not available.");
- delay_type_notifier = 1;
+ if (delay_type_notified != 1) {
+ inform("Note: the alsa output device \"%s\" is not capable of precision delay timing. Could it be a virtual device?", snd_pcm_name(alsa_handle));
+ delay_type_notified = 1;
}
} else {
- if (delay_type_notifier != 0) {
- debug(1,"ALSA: using snd_pcm_status_get_delay() to calculate delay");
- delay_type_notifier = 0;
+// diagnostic
+ if (delay_type_notified != 0) {
+ debug(1,"alsa: delay_and_status using snd_pcm_status_get_delay() to calculate delay");
+ delay_type_notified = 0;
}
}
-*/
if (update_timestamp_ns == 0) {
ret = snd_pcm_delay (alsa_handle,delay);
// set accordingly
// do_mute(0); // complete unmute
}
+
alsa_backend_state = abm_connected; // only do this if it really opened it.
}
} else {
debug(2,"alsa: precision delay timing available.");
} else {
precision_delay_available_status = YNDK_NO;
- inform("Note: the alsa output device \"%s\" is not capable of precision delay timing. Could it be a virtual device?", snd_pcm_name(alsa_handle));
+ debug(2,"alsa: precision delay timing not available.");
if (config.disable_standby_mode != disable_standby_off)
inform("Note: disable_standby_mode has been turned off because the output device is not capable of precision delay timing.");
}
// to compensate for delays due to paging, etc.
// The suggestion is that it should be at least 100 ms less than the lead-in time.
- int64_t max_dac_delay = config.output_rate / 10; // so the lead-in time must be greater
+ int64_t max_dac_delay = config.output_rate / 5; // so the lead-in time must be greater
// than this, say 0.2 sec, to allow for
// dynamic adjustment
int64_t filler_size = max_dac_delay;