Make audio buffering independant of output buffer
This will allow to extract the "audio regulator" part from the audio player.
This commit is contained in:
parent
10f60054ac
commit
62776fb261
@ -220,14 +220,14 @@ sc_audio_player_frame_sink_push(struct sc_frame_sink *sink,
|
|||||||
underflow = atomic_exchange_explicit(&ap->underflow, 0,
|
underflow = atomic_exchange_explicit(&ap->underflow, 0,
|
||||||
memory_order_relaxed);
|
memory_order_relaxed);
|
||||||
|
|
||||||
max_buffered_samples = ap->target_buffering
|
max_buffered_samples = ap->target_buffering * 11 / 10
|
||||||
+ 12 * ap->output_buffer
|
+ 60 * ap->sample_rate / 1000 /* 60 ms */;
|
||||||
+ ap->target_buffering / 10;
|
|
||||||
} else {
|
} else {
|
||||||
// SDL playback not started yet, do not accumulate more than
|
// SDL playback not started yet, do not accumulate more than
|
||||||
// max_initial_buffering samples, this would cause unnecessary delay
|
// max_initial_buffering samples, this would cause unnecessary delay
|
||||||
// (and glitches to compensate) on start.
|
// (and glitches to compensate) on start.
|
||||||
max_buffered_samples = ap->target_buffering + 2 * ap->output_buffer;
|
max_buffered_samples = ap->target_buffering
|
||||||
|
+ 10 * ap->sample_rate / 1000 /* 10 ms */;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t can_read = sc_audiobuf_can_read(&ap->buf);
|
uint32_t can_read = sc_audiobuf_can_read(&ap->buf);
|
||||||
@ -363,7 +363,6 @@ sc_audio_player_frame_sink_open(struct sc_frame_sink *sink,
|
|||||||
uint64_t aout_samples = ap->output_buffer_duration * ap->sample_rate
|
uint64_t aout_samples = ap->output_buffer_duration * ap->sample_rate
|
||||||
/ SC_TICK_FREQ;
|
/ SC_TICK_FREQ;
|
||||||
assert(aout_samples <= 0xFFFF);
|
assert(aout_samples <= 0xFFFF);
|
||||||
ap->output_buffer = (uint16_t) aout_samples;
|
|
||||||
|
|
||||||
SDL_AudioSpec desired = {
|
SDL_AudioSpec desired = {
|
||||||
.freq = ctx->sample_rate,
|
.freq = ctx->sample_rate,
|
||||||
|
@ -32,7 +32,6 @@ struct sc_audio_player {
|
|||||||
|
|
||||||
// SDL audio output buffer size.
|
// SDL audio output buffer size.
|
||||||
sc_tick output_buffer_duration;
|
sc_tick output_buffer_duration;
|
||||||
uint16_t output_buffer;
|
|
||||||
|
|
||||||
// Audio buffer to communicate between the receiver and the SDL audio
|
// Audio buffer to communicate between the receiver and the SDL audio
|
||||||
// callback
|
// callback
|
||||||
|
Loading…
x
Reference in New Issue
Block a user