mirror of
https://github.com/Shpoike/Quakespasm.git
synced 2025-02-19 02:22:01 +00:00
Refactoring of cd player code WIP
This commit is contained in:
parent
1273c59c1e
commit
0f8f8381d0
3 changed files with 134 additions and 270 deletions
166
Quake/cd_sdl.c
166
Quake/cd_sdl.c
|
@ -24,7 +24,6 @@
|
|||
Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#if 0
|
||||
#include "SDL.h"
|
||||
|
||||
#ifndef SDL_INIT_CDROM
|
||||
|
@ -41,9 +40,7 @@
|
|||
static qboolean cdValid = false;
|
||||
static qboolean playing = false;
|
||||
static qboolean wasPlaying = false;
|
||||
static qboolean enabled = true;
|
||||
static qboolean playLooping = false;
|
||||
static byte remap[100];
|
||||
static byte playTrack;
|
||||
static double endOfTrack = -1.0, pausetime = -1.0;
|
||||
static SDL_CD *cd_handle;
|
||||
|
@ -52,16 +49,16 @@ static float old_cdvolume;
|
|||
static qboolean hw_vol_works = true;
|
||||
|
||||
|
||||
static void CDAudio_Eject(void)
|
||||
void CDAudioBackend_Eject(void)
|
||||
{
|
||||
if (!cd_handle || !enabled)
|
||||
if (!cd_handle)
|
||||
return;
|
||||
|
||||
if (SDL_CDEject(cd_handle) == -1)
|
||||
Con_Printf ("Unable to eject CD-ROM: %s\n", SDL_GetError ());
|
||||
}
|
||||
|
||||
static int CDAudio_GetAudioDiskInfo(void)
|
||||
static int CDAudioBackend_GetAudioDiskInfo(void)
|
||||
{
|
||||
cdValid = false;
|
||||
|
||||
|
@ -76,7 +73,7 @@ static int CDAudio_GetAudioDiskInfo(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void CDAudio_Play(byte track, qboolean looping)
|
||||
void CDAudioBackend_Play(byte track, qboolean looping)
|
||||
{
|
||||
int len_m, len_s, len_f;
|
||||
|
||||
|
@ -85,7 +82,7 @@ void CDAudio_Play(byte track, qboolean looping)
|
|||
|
||||
if (!cdValid)
|
||||
{
|
||||
CDAudio_GetAudioDiskInfo();
|
||||
CDAudioBackend_GetAudioDiskInfo();
|
||||
if (!cdValid)
|
||||
return;
|
||||
}
|
||||
|
@ -108,7 +105,7 @@ void CDAudio_Play(byte track, qboolean looping)
|
|||
{
|
||||
if (playTrack == track)
|
||||
return;
|
||||
CDAudio_Stop ();
|
||||
CDAudioBackend_Stop ();
|
||||
}
|
||||
|
||||
if (SDL_CDPlay(cd_handle, cd_handle->track[track-1].offset, cd_handle->track[track-1].length) == -1)
|
||||
|
@ -141,7 +138,7 @@ void CDAudio_Play(byte track, qboolean looping)
|
|||
CDAudio_Pause ();
|
||||
}
|
||||
|
||||
void CDAudio_Stop(void)
|
||||
void CDAudioBackend_Stop(void)
|
||||
{
|
||||
if (!cd_handle || !enabled)
|
||||
return;
|
||||
|
@ -158,7 +155,7 @@ void CDAudio_Stop(void)
|
|||
endOfTrack = -1.0;
|
||||
}
|
||||
|
||||
static void CDAudio_Next(void)
|
||||
void CDAudioBackend_Next(void)
|
||||
{
|
||||
byte track;
|
||||
|
||||
|
@ -175,7 +172,7 @@ static void CDAudio_Next(void)
|
|||
CDAudio_Play (track, playLooping);
|
||||
}
|
||||
|
||||
static void CDAudio_Prev(void)
|
||||
void CDAudioBackend_Prev(void)
|
||||
{
|
||||
byte track;
|
||||
|
||||
|
@ -192,7 +189,7 @@ static void CDAudio_Prev(void)
|
|||
CDAudio_Play (track, playLooping);
|
||||
}
|
||||
|
||||
void CDAudio_Pause(void)
|
||||
void CDAudioBackend_Pause(void)
|
||||
{
|
||||
if (!cd_handle || !enabled)
|
||||
return;
|
||||
|
@ -208,7 +205,7 @@ void CDAudio_Pause(void)
|
|||
pausetime = realtime;
|
||||
}
|
||||
|
||||
void CDAudio_Resume(void)
|
||||
void CDAudioBackend_Resume(void)
|
||||
{
|
||||
if (!cd_handle || !enabled)
|
||||
return;
|
||||
|
@ -217,7 +214,7 @@ void CDAudio_Resume(void)
|
|||
return;
|
||||
|
||||
if (!wasPlaying)
|
||||
return;
|
||||
return;
|
||||
|
||||
if (SDL_CDResume(cd_handle) == -1)
|
||||
Con_Printf ("Unable to resume CD-ROM: %s\n", SDL_GetError());
|
||||
|
@ -226,133 +223,8 @@ void CDAudio_Resume(void)
|
|||
pausetime = -1.0;
|
||||
}
|
||||
|
||||
static void CD_f (void)
|
||||
void CDAudioBackend_Info()
|
||||
{
|
||||
const char *command,*arg2;
|
||||
int ret, n;
|
||||
|
||||
if (Cmd_Argc() < 2)
|
||||
{
|
||||
Con_Printf("commands:\n");
|
||||
Con_Printf(" on, off, reset, remap, \n");
|
||||
Con_Printf(" play, stop, next, prev, loop,\n");
|
||||
Con_Printf(" pause, resume, eject, info\n");
|
||||
return;
|
||||
}
|
||||
|
||||
command = Cmd_Argv (1);
|
||||
|
||||
if (Q_strcasecmp(command, "on") == 0)
|
||||
{
|
||||
enabled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (Q_strcasecmp(command, "off") == 0)
|
||||
{
|
||||
if (playing)
|
||||
CDAudio_Stop();
|
||||
enabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (Q_strcasecmp(command, "reset") == 0)
|
||||
{
|
||||
enabled = true;
|
||||
if (playing)
|
||||
CDAudio_Stop();
|
||||
for (n = 0; n < 100; n++)
|
||||
remap[n] = n;
|
||||
CDAudio_GetAudioDiskInfo();
|
||||
return;
|
||||
}
|
||||
|
||||
if (Q_strcasecmp(command, "remap") == 0)
|
||||
{
|
||||
ret = Cmd_Argc () - 2;
|
||||
if (ret <= 0)
|
||||
{
|
||||
for (n = 1; n < 100; n++)
|
||||
if (remap[n] != n)
|
||||
Con_Printf (" %u -> %u\n", n, remap[n]);
|
||||
return;
|
||||
}
|
||||
for (n = 1; n <= ret; n++)
|
||||
remap[n] = atoi(Cmd_Argv (n + 1));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!cdValid)
|
||||
{
|
||||
CDAudio_GetAudioDiskInfo ();
|
||||
if (!cdValid)
|
||||
{
|
||||
Con_Printf("No CD in player.\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (Q_strcasecmp(command, "play") == 0)
|
||||
{
|
||||
arg2 = Cmd_Argv (2);
|
||||
if (*arg2)
|
||||
CDAudio_Play((byte)atoi(Cmd_Argv (2)), false);
|
||||
else
|
||||
CDAudio_Play((byte)1, false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (Q_strcasecmp(command, "loop") == 0)
|
||||
{
|
||||
arg2 = Cmd_Argv (2);
|
||||
if (*arg2)
|
||||
CDAudio_Play((byte)atoi(Cmd_Argv (2)), true);
|
||||
else
|
||||
CDAudio_Play((byte)1, true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (Q_strcasecmp(command, "stop") == 0)
|
||||
{
|
||||
CDAudio_Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
if (Q_strcasecmp(command, "pause") == 0)
|
||||
{
|
||||
CDAudio_Pause();
|
||||
return;
|
||||
}
|
||||
|
||||
if (Q_strcasecmp(command, "resume") == 0)
|
||||
{
|
||||
CDAudio_Resume();
|
||||
return;
|
||||
}
|
||||
|
||||
if (Q_strcasecmp(command, "next") == 0)
|
||||
{
|
||||
CDAudio_Next();
|
||||
return;
|
||||
}
|
||||
|
||||
if (Q_strcasecmp(command, "prev") == 0)
|
||||
{
|
||||
CDAudio_Prev();
|
||||
return;
|
||||
}
|
||||
|
||||
if (Q_strcasecmp(command, "eject") == 0)
|
||||
{
|
||||
if (playing)
|
||||
CDAudio_Stop();
|
||||
CDAudio_Eject();
|
||||
cdValid = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (Q_strcasecmp(command, "info") == 0)
|
||||
{
|
||||
int current_min, current_sec, current_frame;
|
||||
int length_min, length_sec, length_frame;
|
||||
|
||||
|
@ -394,7 +266,7 @@ static qboolean CD_SetVolume (void *unused)
|
|||
return false;
|
||||
}
|
||||
|
||||
static qboolean CDAudio_SetVolume (cvar_t *var)
|
||||
static qboolean CDAudioBackend_SetVolume (cvar_t *var)
|
||||
{
|
||||
if (!cd_handle || !enabled)
|
||||
return false;
|
||||
|
@ -420,7 +292,7 @@ static qboolean CDAudio_SetVolume (cvar_t *var)
|
|||
}
|
||||
}
|
||||
|
||||
void CDAudio_Update(void)
|
||||
void CDAudioBackend_Update(void)
|
||||
{
|
||||
CDstatus curstat;
|
||||
|
||||
|
@ -508,7 +380,7 @@ static void export_cddev_arg (void)
|
|||
#endif
|
||||
}
|
||||
|
||||
int CDAudio_Init(void)
|
||||
int CDAudioBackend_Init(void)
|
||||
{
|
||||
int i, sdl_num_drives;
|
||||
|
||||
|
@ -587,11 +459,11 @@ int CDAudio_Init(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void CDAudio_Shutdown(void)
|
||||
void CDAudioBackend_Shutdown(void)
|
||||
{
|
||||
if (!cd_handle)
|
||||
return;
|
||||
CDAudio_Stop();
|
||||
CDAudioBackend_Stop();
|
||||
// cd hardware volume: no SDL support at present.
|
||||
// if (hw_vol_works)
|
||||
// CD_SetVolume (NULL);
|
||||
|
@ -602,5 +474,3 @@ void CDAudio_Shutdown(void)
|
|||
}
|
||||
|
||||
#endif /* SDL_INIT_CDROM */
|
||||
|
||||
#endif
|
||||
|
|
|
@ -22,25 +22,16 @@
|
|||
Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
|
||||
#include "quakedef.h"
|
||||
|
||||
static qboolean playing = false;
|
||||
static qboolean wasPlaying = false;
|
||||
static qboolean enabled = true;
|
||||
static qboolean playLooping = false;
|
||||
static qboolean enabled = false;
|
||||
static qboolean usingBackend = false;
|
||||
|
||||
static byte remap[100];
|
||||
static char playTrackName[MAX_QPATH];
|
||||
static double old_cdvolume;
|
||||
|
||||
static void CDAudio_Next(void);
|
||||
|
||||
static void CDAudio_Eject(void)
|
||||
{
|
||||
// FIXME: call backend
|
||||
;
|
||||
}
|
||||
|
||||
static qboolean CDAudio_IsNumberedTrack(const char *trackName)
|
||||
{
|
||||
int len = strlen(trackName);
|
||||
|
@ -57,11 +48,21 @@ static qboolean CDAudio_IsNumberedTrack(const char *trackName)
|
|||
|
||||
static void CDAudio_FinishedCallback(void *userdata)
|
||||
{
|
||||
// Hack to go to next track
|
||||
Con_Printf("Advancing because we hit the end of a track...\n");
|
||||
CDAudio_Next();
|
||||
}
|
||||
|
||||
static qboolean CDAudio_TryPlayNamed(const char *name, qboolean looping)
|
||||
{
|
||||
qboolean success = S_Base_StartBackgroundTrack(name, looping, CDAudio_FinishedCallback, NULL);
|
||||
if (success)
|
||||
{
|
||||
playLooping = looping;
|
||||
playing = true;
|
||||
sprintf(playTrackName, "%s", name);
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
void CDAudio_PlayNamed(const char *name, qboolean looping)
|
||||
{
|
||||
if (!enabled)
|
||||
|
@ -89,7 +90,7 @@ void CDAudio_PlayNamed(const char *name, qboolean looping)
|
|||
{
|
||||
return;
|
||||
}
|
||||
strcpy(playTrackName, name);
|
||||
sprintf(playTrackName, "%s", name);
|
||||
}
|
||||
|
||||
if (playing)
|
||||
|
@ -97,17 +98,17 @@ void CDAudio_PlayNamed(const char *name, qboolean looping)
|
|||
CDAudio_Stop();
|
||||
}
|
||||
|
||||
// FIXME: check for backend error
|
||||
|
||||
playLooping = looping;
|
||||
playing = true;
|
||||
|
||||
// FIXME: make backend play
|
||||
qboolean success = S_Base_StartBackgroundTrack(playTrackName, playLooping, CDAudio_FinishedCallback, NULL);
|
||||
char fullTrackName[MAX_QPATH];
|
||||
sprintf(fullTrackName, "music/%s", playTrackName);
|
||||
qboolean success = S_Base_StartBackgroundTrack(fullTrackName, playLooping, CDAudio_FinishedCallback, NULL);
|
||||
if (!success)
|
||||
{
|
||||
Con_Printf("WARNING: Couldn't open music file %s\n", playTrackName);
|
||||
Con_Printf("WARNING: Couldn't open music file %s\n", fullTrackName);
|
||||
}
|
||||
|
||||
CDAudio_TryPlayNamed
|
||||
}
|
||||
|
||||
void CDAudio_Play(byte track, qboolean looping)
|
||||
|
@ -122,14 +123,15 @@ void CDAudio_Stop(void)
|
|||
if (!enabled)
|
||||
return;
|
||||
|
||||
if (!playing)
|
||||
return;
|
||||
|
||||
// FIXME: stop backend
|
||||
S_Base_StopBackgroundTrack();
|
||||
|
||||
wasPlaying = false;
|
||||
playing = false;
|
||||
if (usingBackend)
|
||||
{
|
||||
CDAudioBackend_Stop();
|
||||
usingBackend = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
S_Base_StopBackgroundTrack();
|
||||
}
|
||||
}
|
||||
|
||||
static void CDAudio_Next(void)
|
||||
|
@ -138,19 +140,23 @@ static void CDAudio_Next(void)
|
|||
|
||||
if (!enabled)
|
||||
return;
|
||||
|
||||
if (!playing)
|
||||
return;
|
||||
|
||||
if (!CDAudio_IsNumberedTrack(playTrackName))
|
||||
|
||||
if (usingBackend)
|
||||
{
|
||||
playing = false;
|
||||
return;
|
||||
CDAudio_BackendNext();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!CDAudio_IsNumberedTrack(playTrackName))
|
||||
{
|
||||
CDAudio_Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
track = atoi(playTrackName) + 1;
|
||||
|
||||
CDAudio_Play (track, S_BackgroundTrackIsLooping());
|
||||
}
|
||||
|
||||
track = atoi(playTrackName) + 1;
|
||||
|
||||
CDAudio_Play (track, playLooping);
|
||||
}
|
||||
|
||||
static void CDAudio_Prev(void)
|
||||
|
@ -160,17 +166,24 @@ static void CDAudio_Prev(void)
|
|||
if (!enabled)
|
||||
return;
|
||||
|
||||
if (!playing)
|
||||
return;
|
||||
if (usingBackend)
|
||||
{
|
||||
CDAudio_BackendPrev();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!CDAudio_IsNumberedTrack(playTrackName))
|
||||
{
|
||||
CDAudio_Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!CDAudio_IsNumberedTrack(playTrackName))
|
||||
return;
|
||||
track = atoi(playTrackName) - 1;
|
||||
if (track < 1)
|
||||
track = 1;
|
||||
|
||||
track = atoi(playTrackName) - 1;
|
||||
if (track < 1)
|
||||
track = 1;
|
||||
|
||||
CDAudio_Play (track, playLooping);
|
||||
CDAudio_Play(track, S_BackgroundTrackIsLooping());
|
||||
}
|
||||
}
|
||||
|
||||
void CDAudio_Pause(void)
|
||||
|
@ -178,14 +191,14 @@ void CDAudio_Pause(void)
|
|||
if (!enabled)
|
||||
return;
|
||||
|
||||
if (!playing)
|
||||
return;
|
||||
|
||||
// FIXME: pause in backend
|
||||
S_PauseBackgroundTrack();
|
||||
|
||||
wasPlaying = playing;
|
||||
playing = false;
|
||||
if (usingBackend)
|
||||
{
|
||||
CDAudioBackend_Pause();
|
||||
}
|
||||
else
|
||||
{
|
||||
S_PauseBackgroundTrack();
|
||||
}
|
||||
}
|
||||
|
||||
void CDAudio_Resume(void)
|
||||
|
@ -193,13 +206,14 @@ void CDAudio_Resume(void)
|
|||
if (!enabled)
|
||||
return;
|
||||
|
||||
if (!wasPlaying)
|
||||
return;
|
||||
|
||||
// FIXME: resume in backend
|
||||
S_ResumeBackgroundTrack();
|
||||
|
||||
playing = true;
|
||||
if (usingBackend)
|
||||
{
|
||||
CDAudioBackend_Resume();
|
||||
}
|
||||
else
|
||||
{
|
||||
S_ResumeBackgroundTrack();
|
||||
}
|
||||
}
|
||||
|
||||
static void CD_f (void)
|
||||
|
@ -226,21 +240,19 @@ static void CD_f (void)
|
|||
|
||||
if (Q_strcasecmp(command, "off") == 0)
|
||||
{
|
||||
if (playing)
|
||||
CDAudio_Stop();
|
||||
CDAudio_Stop();
|
||||
enabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (Q_strcasecmp(command, "reset") == 0)
|
||||
{
|
||||
enabled = true;
|
||||
if (playing)
|
||||
CDAudio_Stop();
|
||||
CDAudio_Stop();
|
||||
|
||||
for (n = 0; n < 100; n++)
|
||||
remap[n] = n;
|
||||
|
||||
// FIXME: backend get disc info
|
||||
// FIXME: backend get disc info?
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -320,81 +332,49 @@ static void CD_f (void)
|
|||
|
||||
if (Q_strcasecmp(command, "eject") == 0)
|
||||
{
|
||||
if (playing)
|
||||
CDAudio_Stop();
|
||||
CDAudio_Eject();
|
||||
CDAudioBackend_Eject();
|
||||
return;
|
||||
}
|
||||
|
||||
if (Q_strcasecmp(command, "info") == 0)
|
||||
{
|
||||
if (playing)
|
||||
Con_Printf ("Currently %s track %s\n", playLooping ? "looping" : "playing", playTrackName);
|
||||
else if (wasPlaying)
|
||||
Con_Printf ("Paused %s track %s\n", playLooping ? "looping" : "playing", playTrackName);
|
||||
|
||||
Con_Printf ("Volume is %f\n", bgmvolume.value);
|
||||
|
||||
if (usingBackend)
|
||||
{
|
||||
CDAudioBackend_Info();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (S_BackgroundTrackIsPlaying())
|
||||
Con_Printf ("Currently %s track %s\n", S_BackgroundTrackIsLooping() ? "looping" : "playing", playTrackName);
|
||||
else if (S_BackgroundTrackIsPaused())
|
||||
Con_Printf ("Paused %s track %s\n", S_BackgroundTrackIsLooping() ? "looping" : "playing", playTrackName);
|
||||
|
||||
Con_Printf ("Volume is %f\n", bgmvolume.value);
|
||||
}
|
||||
return;
|
||||
}
|
||||
Con_Printf ("cd: no such command. Use \"cd\" for help.\n");
|
||||
}
|
||||
|
||||
static qboolean CD_GetVolume (void *unused)
|
||||
{
|
||||
/* FIXME: write proper code in here when SDL
|
||||
supports cdrom volume control some day. */
|
||||
return false;
|
||||
}
|
||||
|
||||
static qboolean CD_SetVolume (void *unused)
|
||||
{
|
||||
/* FIXME: write proper code in here when SDL
|
||||
supports cdrom volume control some day. */
|
||||
return false;
|
||||
}
|
||||
|
||||
static qboolean CDAudio_SetVolume (cvar_t *var)
|
||||
{
|
||||
if (!enabled)
|
||||
return false;
|
||||
|
||||
if (var->value < 0.0)
|
||||
Cvar_SetValue (var->name, 0.0);
|
||||
else if (var->value > 1.0)
|
||||
Cvar_SetValue (var->name, 1.0);
|
||||
old_cdvolume = var->value;
|
||||
|
||||
//FIXME:
|
||||
return true;
|
||||
}
|
||||
|
||||
void CDAudio_Update(void)
|
||||
{
|
||||
if (!enabled)
|
||||
return;
|
||||
|
||||
if (old_cdvolume != bgmvolume.value)
|
||||
CDAudio_SetVolume (&bgmvolume);
|
||||
|
||||
// FIXME: update backend
|
||||
|
||||
|
||||
CDAudioBackend_Update();
|
||||
}
|
||||
|
||||
|
||||
int CDAudio_Init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
// FIXME: try to init backend
|
||||
enabled = true;
|
||||
CDAudioBackend_Init();
|
||||
|
||||
for (i = 0; i < 100; i++)
|
||||
remap[i] = i;
|
||||
|
||||
enabled = true;
|
||||
|
||||
// FIXME: check if cd in drive
|
||||
|
||||
Cmd_AddCommand ("cd", CD_f);
|
||||
|
||||
return 0;
|
||||
|
@ -403,6 +383,6 @@ int CDAudio_Init(void)
|
|||
void CDAudio_Shutdown(void)
|
||||
{
|
||||
CDAudio_Stop();
|
||||
|
||||
// FIXME: shutdown backend
|
||||
|
||||
CDAudioBackend_Shutdown();
|
||||
}
|
||||
|
|
|
@ -31,5 +31,19 @@ void CDAudio_Resume(void);
|
|||
void CDAudio_Shutdown(void);
|
||||
void CDAudio_Update(void);
|
||||
|
||||
// Private
|
||||
|
||||
void CDAudioBackend_Eject(void);
|
||||
void CDAudioBackend_Play(byte track, qboolean looping);
|
||||
void CDAudioBackend_Stop(void);
|
||||
void CDAudioBackend_Next(void);
|
||||
void CDAudioBackend_Prev(void);
|
||||
void CDAudioBackend_Pause(void);
|
||||
void CDAudioBackend_Resume(void);
|
||||
void CDAudioBackend_Info(void);
|
||||
void CDAudioBackend_Update(void);
|
||||
int CDAudioBackend_Init(void);
|
||||
void CDAudioBackend_Shutdown(void);
|
||||
|
||||
#endif /* __CDAUDIO_H */
|
||||
|
||||
|
|
Loading…
Reference in a new issue