oss: fix fragment setting

Previous patch introduced subtle regression, in cases when
OSS_GETVERSION fails the code wasn't falling back to
SNDCTL_DSP_SETFRAGMENT.

Signed-off-by: malc <av1474@comtv.ru>
This commit is contained in:
malc 2010-01-09 18:06:54 +03:00
parent 6d246526ce
commit 3d709fe73a
1 changed files with 16 additions and 13 deletions

View File

@ -247,6 +247,7 @@ static int oss_open (int in, struct oss_params *req,
int oflags = conf.exclusive ? O_EXCL : 0; int oflags = conf.exclusive ? O_EXCL : 0;
audio_buf_info abinfo; audio_buf_info abinfo;
int fmt, freq, nchannels; int fmt, freq, nchannels;
int setfragment = 1;
const char *dspname = in ? conf.devpath_in : conf.devpath_out; const char *dspname = in ? conf.devpath_in : conf.devpath_out;
const char *typ = in ? "ADC" : "DAC"; const char *typ = in ? "ADC" : "DAC";
@ -290,25 +291,27 @@ static int oss_open (int in, struct oss_params *req,
if (ioctl (fd, OSS_GETVERSION, &version)) { if (ioctl (fd, OSS_GETVERSION, &version)) {
oss_logerr2 (errno, typ, "Failed to get OSS version\n"); oss_logerr2 (errno, typ, "Failed to get OSS version\n");
version = 0;
} }
else {
if (conf.debug) {
dolog ("OSS version = %#x\n", version);
}
if (conf.debug) { if (version >= 0x040000) {
dolog ("OSS version = %#x\n", version); int policy = conf.policy;
} if (ioctl (fd, SNDCTL_DSP_POLICY, &policy)) {
oss_logerr2 (errno, typ,
if (version >= 0x040000) { "Failed to set timing policy to %d\n",
int policy = conf.policy; conf.policy);
if (ioctl (fd, SNDCTL_DSP_POLICY, &policy)) { goto err;
oss_logerr2 (errno, typ, "Failed to set timing policy to %d\n", }
conf.policy); setfragment = 0;
goto err;
} }
} }
} }
else
#endif #endif
{
if (setfragment) {
int mmmmssss = (req->nfrags << 16) | ctz32 (req->fragsize); int mmmmssss = (req->nfrags << 16) | ctz32 (req->fragsize);
if (ioctl (fd, SNDCTL_DSP_SETFRAGMENT, &mmmmssss)) { if (ioctl (fd, SNDCTL_DSP_SETFRAGMENT, &mmmmssss)) {
oss_logerr2 (errno, typ, "Failed to set buffer length (%d, %d)\n", oss_logerr2 (errno, typ, "Failed to set buffer length (%d, %d)\n",