Hi David,
Hi Mike,
Last try (for now): http://smedley.id.au/tmp/uniaud32-linux-3.2.102-MikeK3.zip
I noticed David just released a version of the Uniaudio drivers. Does your attempts included his fixes? I noticed KO had a Uniaudio driver on his home page with some kind of patch. Maybe we need to get all these patches into a unified driver.
My builds are based on a set of diffs I ran against the Netlabs SVN code a couple of weeks ago. You'll notice two recent checkins at Netlabs, one referencing Paul (me) and another referencing Andy.
My changes (to add some PCI IDs to the realtek driver) were included, I mistakenly assumed that Andy's changes were already included in the newer ALSA code from the kernel. The 'Mike3' build above should include the relevant changes from Andy to the realtek driver.
I didn't know KO had built uniaud32, happy to incorporate the changes if they're still relevant.
Cheers,
Paul
I believe KO's patches are for small buffers, such as VPC/Odin uses for its audio.
If you look in sound.c, search for:
/* Change from Andy. If statement added around 5 statements.
* Andy says: TODO: determine why small buffers are a problem for this code
* 20100107: DAZ: This change is questionable.
* 20180109: DAZ: This changes causes problems for many systems including intermittent
* sound and unexpected hangs. Reverted by commenting out the if statement.
*/
The if was my attempt to fix the small buffers issue. I have locally changed the if to:
if (periodsize > 416)
rather than the orginal:
if (periodsize > 6 * minperiodsize)
It seems to be better but that may again be on limited hardware. Basically, the if is blocking out code that, when it was added, caused the VPC sound issues when the periodsize is small.
I thought David had applied the below patch to backout an earlier change, you probably should as it seems it breaks more than it fixed:
Index: soundmixer.c
===================================================================
--- soundmixer.c (revision 606)
+++ soundmixer.c (working copy)
@@ -408,13 +408,6 @@
idx = pHandle->controls[OSS_MIXER_FRONT].idxVolume;
idxMute = pHandle->controls[OSS_MIXER_FRONT].idxMute;
}
- /* HDA codecs workaround from Andy */
- if (idx == -1)
- {
- idx = pHandle->controls[OSS_MIXER_SPEAKER].idxVolume;
- idxMute = pHandle->controls[OSS_MIXER_SPEAKER].idxMute;
- }
- /* HDA codecs workaround from Andy */
break;
case OSS32_MIX_VOLUME_MIDI:
idx = pHandle->controls[OSS_MIXER_SYNTH].idxVolume;
I don't recall the exact volume issue it creates on some systems.