return sw ? sw->active : 0;
}
-void glue (AUD_init_time_stamp_, TYPE) (SW *sw, QEMUAudioTimeStamp *ts)
-{
- if (!sw) {
- return;
- }
-
- ts->old_ts = sw->hw->ts_helper;
-}
-
-uint64_t glue (AUD_get_elapsed_usec_, TYPE) (SW *sw, QEMUAudioTimeStamp *ts)
-{
- uint64_t delta, cur_ts, old_ts;
-
- if (!sw) {
- return 0;
- }
-
- cur_ts = sw->hw->ts_helper;
- old_ts = ts->old_ts;
- /* dolog ("cur %" PRId64 " old %" PRId64 "\n", cur_ts, old_ts); */
-
- if (cur_ts >= old_ts) {
- delta = cur_ts - old_ts;
- } else {
- delta = UINT64_MAX - old_ts + cur_ts;
- }
-
- if (!delta) {
- return 0;
- }
-
- return muldiv64 (delta, sw->hw->info.freq, 1000000);
-}
-
#undef TYPE
#undef HW
#undef SW
#define DEBUG 0
-#define ADLIB_KILL_TIMERS 1
-
#define ADLIB_DESC "Yamaha YM3812 (OPL2)"
#if DEBUG
uint64_t dexp[2];
SWVoiceOut *voice;
int left, pos, samples;
- QEMUAudioTimeStamp ats;
FM_OPL *opl;
PortioList port_list;
};
for (i = 0; i < 2; ++i) {
if (s->ticking[i]) {
- uint64_t delta;
-
- delta = AUD_get_elapsed_usec_out (s->voice, &s->ats);
- ldebug (
- "delta = %f dexp = %f expired => %d",
- delta / 1000000.0,
- s->dexp[i] / 1000000.0,
- delta >= s->dexp[i]
- );
- if (ADLIB_KILL_TIMERS || delta >= s->dexp[i]) {
- adlib_stop_opl_timer (s, i);
- AUD_init_time_stamp_out (s->voice, &s->ats);
- }
+ adlib_stop_opl_timer(s, i);
}
}
}
#endif
s->dexp[n] = interval_Sec * 1000000.0;
- AUD_init_time_stamp_out (s->voice, &s->ats);
}
static int write_audio (AdlibState *s, int samples)
typedef struct AudioBackend AudioBackend;
-typedef struct QEMUAudioTimeStamp {
- uint64_t old_ts;
-} QEMUAudioTimeStamp;
-
bool AUD_backend_check(AudioBackend **be, Error **errp);
SWVoiceOut *AUD_open_out (
void AUD_set_active_out(SWVoiceOut *sw, bool on);
bool AUD_is_active_out(SWVoiceOut *sw);
-void AUD_init_time_stamp_out (SWVoiceOut *sw, QEMUAudioTimeStamp *ts);
-uint64_t AUD_get_elapsed_usec_out (SWVoiceOut *sw, QEMUAudioTimeStamp *ts);
-
#define AUDIO_MAX_CHANNELS 16
typedef struct Volume {
bool mute;
void AUD_set_active_in(SWVoiceIn *sw, bool on);
bool AUD_is_active_in(SWVoiceIn *sw);
-void AUD_init_time_stamp_in (SWVoiceIn *sw, QEMUAudioTimeStamp *ts);
-uint64_t AUD_get_elapsed_usec_in (SWVoiceIn *sw, QEMUAudioTimeStamp *ts);
-
void audio_cleanup(void);
typedef struct st_sample st_sample;
uint64_t dexp[2];
SWVoiceOut *voice;
int left, pos, samples;
- QEMUAudioTimeStamp ats;
FM_OPL *opl;
PortioList port_list;
} AdlibState;