Fixed the problem of not being able to work from Haiku. The main problem was that although the multi_audio API on BeOS hands the driver the settings as made in the Media prefs, the Haiku one just gives maximum values and assumes the driver will scale the values down. I didn't do that.

If you run Haiku on HDA hardware, you should have sound now too! :)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21161 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ithamar R. Adema 2007-05-17 11:16:05 +00:00
parent abc3549242
commit fa48b9d885
2 changed files with 20 additions and 4 deletions

View File

@ -30,6 +30,9 @@
#define MAX_CODEC_RESPONSES 10
#define MAXINPUTS 32
/* FIXME: Find out why we need so much! */
#define DEFAULT_FRAMESPERBUF 4096
typedef struct hda_controller_s hda_controller;
typedef struct hda_codec_s hda_codec;
typedef struct hda_afg_s hda_afg;

View File

@ -153,12 +153,25 @@ get_buffers(hda_afg* afg, multi_buffer_list* data)
dprintf("%s: record: %ld buffers, %ld channels, %ld samples\n", __func__,
data->request_record_buffers, data->request_record_channels, data->request_record_buffer_size);
/* Workaround for Haiku multi_audio API, since it prefers to let the driver pick
values, while the BeOS multi_audio actually gives the user's defaults. */
if (data->request_playback_buffers > STRMAXBUF ||
data->request_playback_buffers < STRMINBUF ||
data->request_record_buffers > STRMAXBUF ||
data->request_record_buffers < STRMINBUF) {
return B_BAD_VALUE;
data->request_playback_buffers < STRMINBUF) {
data->request_playback_buffers = STRMINBUF;
}
if (data->request_record_buffers > STRMAXBUF ||
data->request_record_buffers < STRMINBUF) {
data->request_record_buffers = STRMINBUF;
}
if (data->request_playback_buffer_size == 0)
data->request_playback_buffer_size = DEFAULT_FRAMESPERBUF;
if (data->request_record_buffer_size == 0)
data->request_record_buffer_size = DEFAULT_FRAMESPERBUF;
/* ... from here on, we can assume again that a reasonable request is being made */
data->flags = 0;