} oss_dsp_stream_t;
typedef struct {
+ int hwset;
unsigned int channels;
unsigned int rate;
unsigned int oss_format;
static int oss_dsp_params(oss_dsp_t *dsp)
{
int err;
+ dsp->hwset = 0;
err = oss_dsp_hw_params(dsp);
if (err < 0)
return err;
+ dsp->hwset = 1;
err = oss_dsp_sw_params(dsp);
if (err < 0)
return err;
dsp->channels, frames,
dsp->format);
err = snd_pcm_mmap_commit(pcm, ofs, frames);
- assert(err == (snd_pcm_sframes_t) frames);
if (err < 0)
break;
- size -= frames;
- str->alsa.appl_ptr += frames;
+ size -= err;
+ str->alsa.appl_ptr += err;
str->alsa.appl_ptr %= str->alsa.boundary;
}
break;
{
int k;
DEBUG("SNDCTL_DSP_RESET)\n");
+ if (!dsp->hwset) {
+ errno = -EIO;
+ return -1;
+ }
result = 0;
for (k = 0; k < 2; ++k) {
str = &dsp->streams[k];
{
int k;
DEBUG("SNDCTL_DSP_SYNC)\n");
+ if (!dsp->hwset) {
+ errno = -EIO;
+ return -1;
+ }
result = 0;
for (k = 0; k < 2; ++k) {
str = &dsp->streams[k];