* Use a default buffer frame count that is adapted to the sample rate
of the audio group. This is supposed to keep the latency about the same regardless of sample rate and lessen the requirements on the system performance when using higher sample rates. Currently the multi-audio addon uses the highest available rate. * Added TODO about the highest sample rate seemingly being forgotten in one place. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29421 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
db90fa7022
commit
0bd93b7def
@ -43,8 +43,6 @@
|
||||
#define MAX_ASSOCIATIONS 16
|
||||
#define MAX_ASSOCIATION_PINS 16
|
||||
|
||||
#define DEFAULT_FRAMES_PER_BUFFER 2048
|
||||
|
||||
#define STREAM_MAX_BUFFERS 10
|
||||
#define STREAM_MIN_BUFFERS 2
|
||||
|
||||
|
@ -45,6 +45,8 @@ static const struct {
|
||||
{B_SR_96000, MAKE_RATE(48000, 2, 1), 96000},
|
||||
{B_SR_176400, MAKE_RATE(44100, 4, 1), 176400},
|
||||
{B_SR_192000, MAKE_RATE(48000, 4, 1), 192000},
|
||||
// TODO: What about this one?
|
||||
// {B_SR_384000, MAKE_RATE(44100, ??, ??), 384000},
|
||||
};
|
||||
|
||||
|
||||
|
@ -672,6 +672,40 @@ set_mix(hda_audio_group* audioGroup, multi_mix_value_info * mmvi)
|
||||
}
|
||||
|
||||
|
||||
static uint32
|
||||
default_buffer_length_for_rate(uint32 rate)
|
||||
{
|
||||
// keep the latency about the same as 2048 frames per buffer at 44100 kHz
|
||||
switch (rate) {
|
||||
case B_SR_8000:
|
||||
return 512;
|
||||
case B_SR_11025:
|
||||
return 512;
|
||||
case B_SR_16000:
|
||||
return 1024;
|
||||
case B_SR_22050:
|
||||
return 1024;
|
||||
case B_SR_32000:
|
||||
return 2048;
|
||||
case B_SR_44100:
|
||||
return 2048;
|
||||
case B_SR_48000:
|
||||
return 2048;
|
||||
case B_SR_88200:
|
||||
return 4096;
|
||||
case B_SR_96000:
|
||||
return 6144;
|
||||
case B_SR_176400:
|
||||
return 8192;
|
||||
case B_SR_192000:
|
||||
return 10240;
|
||||
case B_SR_384000:
|
||||
return 16384;
|
||||
}
|
||||
return 2048;
|
||||
};
|
||||
|
||||
|
||||
static status_t
|
||||
get_buffers(hda_audio_group* audioGroup, multi_buffer_list* data)
|
||||
{
|
||||
@ -702,11 +736,15 @@ get_buffers(hda_audio_group* audioGroup, multi_buffer_list* data)
|
||||
|| data->return_record_buffers < STREAM_MIN_BUFFERS)
|
||||
data->return_record_buffers = STREAM_MIN_BUFFERS;
|
||||
|
||||
if (data->return_playback_buffer_size == 0)
|
||||
data->return_playback_buffer_size = DEFAULT_FRAMES_PER_BUFFER;
|
||||
if (data->return_playback_buffer_size == 0) {
|
||||
data->return_playback_buffer_size = default_buffer_length_for_rate(
|
||||
audioGroup->playback_stream->sample_rate);
|
||||
}
|
||||
|
||||
if (data->return_record_buffer_size == 0)
|
||||
data->return_record_buffer_size = DEFAULT_FRAMES_PER_BUFFER;
|
||||
if (data->return_record_buffer_size == 0) {
|
||||
data->return_record_buffer_size = default_buffer_length_for_rate(
|
||||
audioGroup->record_stream->sample_rate);
|
||||
}
|
||||
|
||||
/* ... from here on, we can assume again that a reasonable request is
|
||||
being made */
|
||||
|
Loading…
x
Reference in New Issue
Block a user