Ne ez az, ha meg van kergülve, nekem is ezt csinálja. Másodpercenként vagy egy tucatszor eldobja az audio kapcsolatot, s újra kell azt építeni. Az snd_pcm_writei() negatív értékkel tér vissza.
snd_pcm_sframes_t audio_write(struct audio_data *ad, int16_t *buffer, snd_pcm_uframes_t buffersize, int silent)
{
if ((ad->frames = snd_pcm_writei(ad->pcm_handle, buffer, buffersize)) < 0) {
if (*ad->verbose || !silent) {
snprintf(msgbuf, MBS, "Cannot write to pcm (%s)", snd_strerror((int)ad->frames));
msgbook_enqueue(&mb0, MB_TYPE_ERROR, MODULE, msgbuf);
}
}
return ad->frames;
}
Illetve még ez érdekes:
if (mix_audio(pctx)) {
/* playback decoded data */
ret_frames = audio_write(&pctx->ad_playback, pctx->pcm, pctx->pcmlen, 1);
if (ret_frames < 0) {
int ret;
/* underrun, let's handle it and try again */
pctx->underruns++;
ret = audio_recover(&pctx->ad_playback, (int)ret_frames, 1);
if (ret == 0) {
ret_frames = audio_write(&pctx->ad_playback, pctx->pcm, pctx->pcmlen, 0);
if (ret_frames < 0)
die("audio_write() failed", 1);
} else {
die("audio_recover() on playback failed", 1);
}
}
}
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE