mirror of
https://github.com/InvisibleUp/uvmac.git
synced 2024-12-21 01:29:38 +00:00
Remove obsolete sound backends
This commit is contained in:
parent
2afb2906da
commit
4aa7c288e4
File diff suppressed because it is too large
Load Diff
@ -1,228 +0,0 @@
|
||||
/*
|
||||
SGLUDDSP.h
|
||||
|
||||
Copyright (C) 2012 Paul C. Pratt
|
||||
|
||||
You can redistribute this file and/or modify it under the terms
|
||||
of version 2 of the GNU General Public License as published by
|
||||
the Free Software Foundation. You should have received a copy
|
||||
of the license along with this file; see the file COPYING.
|
||||
|
||||
This file is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
license for more details.
|
||||
*/
|
||||
|
||||
/*
|
||||
Sound GLUe for "/Dev/DSP"
|
||||
OSS and related, accessed through "/dev/dsp"
|
||||
*/
|
||||
|
||||
LOCALVAR int audio_fd = -1;
|
||||
LOCALVAR bool audio_started;
|
||||
|
||||
#if 4 == kLn2SoundSampSz
|
||||
LOCALPROC ConvertSoundBlockToNative(tpSoundSamp p)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = kOneBuffLen; --i >= 0; ) {
|
||||
*p++ -= 0x8000;
|
||||
}
|
||||
}
|
||||
#else
|
||||
#define ConvertSoundBlockToNative(p)
|
||||
#endif
|
||||
|
||||
LOCALPROC Sound_WriteOut(void)
|
||||
{
|
||||
int retry_count = 32;
|
||||
|
||||
label_retry:
|
||||
if (--retry_count > 0) {
|
||||
int err;
|
||||
struct audio_buf_info info;
|
||||
|
||||
if (ioctl(audio_fd, SNDCTL_DSP_GETOSPACE, &info) != 0) {
|
||||
fprintf(stderr, "SNDCTL_DSP_GETOSPACE fails\n");
|
||||
} else {
|
||||
tpSoundSamp NextPlayPtr;
|
||||
uint16_t PlayNowSize = 0;
|
||||
uint16_t MaskedFillOffset = ThePlayOffset & kOneBuffMask;
|
||||
uint16_t PrivateBuffUsed = TheFillOffset - ThePlayOffset;
|
||||
int used = (info.fragstotal * info.fragsize) - info.bytes;
|
||||
|
||||
if (audio_started) {
|
||||
uint16_t TotPendBuffs = used >> kLnOneBuffSz;
|
||||
|
||||
if (TotPendBuffs < MinFilledSoundBuffs) {
|
||||
MinFilledSoundBuffs = TotPendBuffs;
|
||||
}
|
||||
/* fprintf(stderr, "buffer used %d\n", (int)used); */
|
||||
} else {
|
||||
if (PrivateBuffUsed >= kAllBuffLen - kOneBuffLen) {
|
||||
audio_started = true;
|
||||
} else {
|
||||
info.bytes = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (MaskedFillOffset != 0) {
|
||||
/* take care of left overs */
|
||||
PlayNowSize = kOneBuffLen - MaskedFillOffset;
|
||||
NextPlayPtr =
|
||||
TheSoundBuffer + (ThePlayOffset & kAllBuffMask);
|
||||
} else if (0 !=
|
||||
((TheFillOffset - ThePlayOffset) >> kLnOneBuffLen))
|
||||
{
|
||||
PlayNowSize = kOneBuffLen;
|
||||
NextPlayPtr =
|
||||
TheSoundBuffer + (ThePlayOffset & kAllBuffMask);
|
||||
} else {
|
||||
/* nothing to play now */
|
||||
}
|
||||
|
||||
#if 4 == kLn2SoundSampSz
|
||||
PlayNowSize <<= 1;
|
||||
#endif
|
||||
|
||||
if (PlayNowSize > info.bytes) {
|
||||
PlayNowSize = info.bytes;
|
||||
}
|
||||
|
||||
if (0 != PlayNowSize) {
|
||||
err = write(
|
||||
audio_fd, NextPlayPtr, PlayNowSize);
|
||||
if (err < 0) {
|
||||
if (- EAGAIN == err) {
|
||||
/* buffer full, try again later */
|
||||
fprintf(stderr, "pcm write: EAGAIN\n");
|
||||
} else if (- EPIPE == err) {
|
||||
/* buffer seems to have emptied */
|
||||
fprintf(stderr, "pcm write emptied\n");
|
||||
goto label_retry;
|
||||
} else {
|
||||
fprintf(stderr, "audio_fd write error: %d\n",
|
||||
err);
|
||||
}
|
||||
} else {
|
||||
ThePlayOffset += err
|
||||
#if 4 == kLn2SoundSampSz
|
||||
>> 1
|
||||
#endif
|
||||
;
|
||||
goto label_retry;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LOCALPROC Sound_Start(void)
|
||||
{
|
||||
if (audio_fd >= 0) {
|
||||
Sound_Start0();
|
||||
audio_started = false;
|
||||
}
|
||||
}
|
||||
|
||||
LOCALPROC Sound_Stop(void)
|
||||
{
|
||||
if (audio_fd >= 0) {
|
||||
if (0 !=
|
||||
ioctl(audio_fd, SNDCTL_DSP_RESET /* SNDCTL_DSP_HALT */,
|
||||
NULL))
|
||||
{
|
||||
fprintf(stderr, "SNDCTL_DSP_RESET fails\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if 4 == kLn2SoundSampSz
|
||||
#define DesiredFormat AFMT_S16_NE
|
||||
#else
|
||||
#define DesiredFormat AFMT_U8
|
||||
#endif
|
||||
|
||||
LOCALFUNC bool Sound_Init(void)
|
||||
{
|
||||
bool IsOk = false;
|
||||
|
||||
audio_fd = open(AudioDevPath, O_WRONLY, 0);
|
||||
if (audio_fd < 0) {
|
||||
fprintf(stderr, "open /dev/dsp fails: %d\n", audio_fd);
|
||||
} else {
|
||||
int fragment_value = (16 /* 16 fragments */ << 16)
|
||||
#if 4 == kLn2SoundSampSz
|
||||
| 10 /* of 1024 bytes */
|
||||
#else
|
||||
| 9 /* of 512 bytes */
|
||||
#endif
|
||||
;
|
||||
int channels_value = 1;
|
||||
int fmt_value = DesiredFormat;
|
||||
int speed_value = SOUND_SAMPLERATE;
|
||||
|
||||
/* fprintf(stderr, "open /dev/dsp works\n"); */
|
||||
|
||||
if (0 !=
|
||||
ioctl(audio_fd, SNDCTL_DSP_SETFRAGMENT, &fragment_value))
|
||||
{
|
||||
fprintf(stderr, "SNDCTL_DSP_SETFRAGMENT fails\n");
|
||||
} else if ((0 !=
|
||||
ioctl(audio_fd, SNDCTL_DSP_CHANNELS, &channels_value))
|
||||
|| (channels_value != 1))
|
||||
{
|
||||
fprintf(stderr, "SNDCTL_DSP_CHANNELS fails\n");
|
||||
} else if ((0 !=
|
||||
ioctl(audio_fd, SNDCTL_DSP_SETFMT, &fmt_value))
|
||||
|| (fmt_value != DesiredFormat))
|
||||
{
|
||||
fprintf(stderr, "SNDCTL_DSP_SETFMT fails\n");
|
||||
} else if ((0 !=
|
||||
ioctl(audio_fd, SNDCTL_DSP_SPEED, &speed_value))
|
||||
|| (speed_value != SOUND_SAMPLERATE))
|
||||
{
|
||||
fprintf(stderr, "SNDCTL_DSP_SPEED fails\n");
|
||||
} else
|
||||
{
|
||||
IsOk = true;
|
||||
}
|
||||
|
||||
if (! IsOk) {
|
||||
(void) close(audio_fd);
|
||||
audio_fd = -1;
|
||||
}
|
||||
}
|
||||
|
||||
return true; /* keep going, even if no sound */
|
||||
}
|
||||
|
||||
LOCALPROC Sound_UnInit(void)
|
||||
{
|
||||
if (audio_fd >= 0) {
|
||||
if (close(audio_fd) != 0) {
|
||||
fprintf(stderr, "close /dev/dsp fails\n");
|
||||
}
|
||||
audio_fd = -1;
|
||||
}
|
||||
}
|
||||
|
||||
GLOBALOSGLUPROC Sound_EndWrite(uint16_t actL)
|
||||
{
|
||||
if (Sound_EndWrite0(actL)) {
|
||||
ConvertSoundBlockToNative(TheSoundBuffer
|
||||
+ ((TheFillOffset - kOneBuffLen) & kAllBuffMask));
|
||||
if (audio_fd >= 0) {
|
||||
Sound_WriteOut();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LOCALPROC Sound_SecondNotify(void)
|
||||
{
|
||||
if (audio_fd >= 0) {
|
||||
Sound_SecondNotify0();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user