mirror of
https://github.com/gnif/LookingGlass.git
synced 2024-11-22 05:27:20 +00:00
[client] audio: refactor audio
to playback
and add record
funcs
This commit is contained in:
parent
34e5f7e968
commit
e6bd36ec7c
@ -264,9 +264,12 @@ struct LG_AudioDevOps LGAD_PipeWire =
|
|||||||
.name = "PipeWire",
|
.name = "PipeWire",
|
||||||
.init = pipewire_init,
|
.init = pipewire_init,
|
||||||
.free = pipewire_free,
|
.free = pipewire_free,
|
||||||
.start = pipewire_start,
|
.playback =
|
||||||
.play = pipewire_play,
|
{
|
||||||
.stop = pipewire_stop,
|
.start = pipewire_start,
|
||||||
.volume = pipewire_volume,
|
.play = pipewire_play,
|
||||||
.mute = pipewire_mute
|
.stop = pipewire_stop,
|
||||||
|
.volume = pipewire_volume,
|
||||||
|
.mute = pipewire_mute
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
@ -346,9 +346,12 @@ struct LG_AudioDevOps LGAD_PulseAudio =
|
|||||||
.name = "PulseAudio",
|
.name = "PulseAudio",
|
||||||
.init = pulseaudio_init,
|
.init = pulseaudio_init,
|
||||||
.free = pulseaudio_free,
|
.free = pulseaudio_free,
|
||||||
.start = pulseaudio_start,
|
.playback =
|
||||||
.play = pulseaudio_play,
|
{
|
||||||
.stop = pulseaudio_stop,
|
.start = pulseaudio_start,
|
||||||
.volume = pulseaudio_volume,
|
.play = pulseaudio_play,
|
||||||
.mute = pulseaudio_mute
|
.stop = pulseaudio_stop,
|
||||||
|
.volume = pulseaudio_volume,
|
||||||
|
.mute = pulseaudio_mute
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
@ -38,32 +38,47 @@ struct LG_AudioDevOps
|
|||||||
/* final free */
|
/* final free */
|
||||||
void (*free)(void);
|
void (*free)(void);
|
||||||
|
|
||||||
/* setup the playback audio stream
|
struct
|
||||||
* Note: currently SPICE only supports S16 samples so always assume so
|
{
|
||||||
*/
|
/* start the playback audio stream
|
||||||
void (*start)(int channels, int sampleRate);
|
* Note: currently SPICE only supports S16 samples so always assume so
|
||||||
|
*/
|
||||||
|
void (*start)(int channels, int sampleRate);
|
||||||
|
|
||||||
/* called for each packet of output audio to play
|
/* called for each packet of output audio to play
|
||||||
* Note: size is the size of data in bytes, not frames/samples
|
* Note: size is the size of data in bytes, not frames/samples
|
||||||
*/
|
*/
|
||||||
void (*play)(uint8_t * data, int size);
|
void (*play)(uint8_t * data, int size);
|
||||||
|
|
||||||
/* called when SPICE reports the audio stream has stopped */
|
/* called when SPICE reports the audio stream has stopped */
|
||||||
void (*stop)(void);
|
void (*stop)(void);
|
||||||
|
|
||||||
/* [optional] called to set the volume of the channels */
|
/* [optional] called to set the volume of the channels */
|
||||||
void (*volume)(int channels, const uint16_t volume[]);
|
void (*volume)(int channels, const uint16_t volume[]);
|
||||||
|
|
||||||
/* [optional] called to set muting of the output */
|
/* [optional] called to set muting of the output */
|
||||||
void (*mute)(bool mute);
|
void (*mute)(bool mute);
|
||||||
|
}
|
||||||
|
playback;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
/* start the record stream
|
||||||
|
* Note: currently SPICE only supports S16 samples so always assume so
|
||||||
|
*/
|
||||||
|
void (*start)(int channels, int sampleRate,
|
||||||
|
void (*dataFn)(uint8_t * data, int size));
|
||||||
|
|
||||||
|
/* called when SPICE reports the audio stream has stopped */
|
||||||
|
void (*stop)(void);
|
||||||
|
|
||||||
|
/* [optional] called to set the volume of the channels */
|
||||||
|
void (*volume)(int channels, const uint16_t volume[]);
|
||||||
|
|
||||||
|
/* [optional] called to set muting of the input */
|
||||||
|
void (*mute)(bool mute);
|
||||||
|
}
|
||||||
|
record;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define ASSERT_LG_AUDIODEV_VALID(x) \
|
|
||||||
DEBUG_ASSERT((x)->name ); \
|
|
||||||
DEBUG_ASSERT((x)->init ); \
|
|
||||||
DEBUG_ASSERT((x)->free ); \
|
|
||||||
DEBUG_ASSERT((x)->start ); \
|
|
||||||
DEBUG_ASSERT((x)->play ); \
|
|
||||||
DEBUG_ASSERT((x)->stop );
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -765,7 +765,7 @@ int main_frameThread(void * unused)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void audioStart(int channels, int sampleRate, PSAudioFormat format,
|
void playbackStart(int channels, int sampleRate, PSAudioFormat format,
|
||||||
uint32_t time)
|
uint32_t time)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -795,46 +795,46 @@ void audioStart(int channels, int sampleRate, PSAudioFormat format,
|
|||||||
static int lastChannels = 0;
|
static int lastChannels = 0;
|
||||||
static int lastSampleRate = 0;
|
static int lastSampleRate = 0;
|
||||||
|
|
||||||
if (g_state.audioStarted)
|
if (g_state.playbackStarted)
|
||||||
{
|
{
|
||||||
if (channels != lastChannels || sampleRate != lastSampleRate)
|
if (channels != lastChannels || sampleRate != lastSampleRate)
|
||||||
g_state.audioDev->stop();
|
g_state.audioDev->playback.stop();
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
lastChannels = channels;
|
lastChannels = channels;
|
||||||
lastSampleRate = sampleRate;
|
lastSampleRate = sampleRate;
|
||||||
g_state.audioStarted = true;
|
g_state.playbackStarted = true;
|
||||||
|
|
||||||
DEBUG_INFO("%d channels @ %dHz", channels, sampleRate);
|
DEBUG_INFO("%d channels @ %dHz", channels, sampleRate);
|
||||||
g_state.audioDev->start(channels, sampleRate);
|
g_state.audioDev->playback.start(channels, sampleRate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void audioStop(void)
|
static void playbackStop(void)
|
||||||
{
|
{
|
||||||
if (g_state.audioDev)
|
if (g_state.audioDev)
|
||||||
g_state.audioDev->stop();
|
g_state.audioDev->playback.stop();
|
||||||
g_state.audioStarted = false;
|
g_state.playbackStarted = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void audioVolume(int channels, const uint16_t volume[])
|
static void playbackVolume(int channels, const uint16_t volume[])
|
||||||
{
|
{
|
||||||
if (g_state.audioDev && g_state.audioDev->volume)
|
if (g_state.audioDev && g_state.audioDev->playback.volume)
|
||||||
g_state.audioDev->volume(channels, volume);
|
g_state.audioDev->playback.volume(channels, volume);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void audioMute(bool mute)
|
static void playbackMute(bool mute)
|
||||||
{
|
{
|
||||||
if (g_state.audioDev && g_state.audioDev->mute)
|
if (g_state.audioDev && g_state.audioDev->playback.mute)
|
||||||
g_state.audioDev->mute(mute);
|
g_state.audioDev->playback.mute(mute);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void audioData(uint8_t * data, size_t size)
|
static void playbackData(uint8_t * data, size_t size)
|
||||||
{
|
{
|
||||||
if (g_state.audioDev)
|
if (g_state.audioDev)
|
||||||
g_state.audioDev->play(data, size);
|
g_state.audioDev->playback.play(data, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void checkUUID(void)
|
static void checkUUID(void)
|
||||||
@ -900,11 +900,11 @@ int spiceThread(void * arg)
|
|||||||
.playback =
|
.playback =
|
||||||
{
|
{
|
||||||
.enable = g_params.useSpiceAudio,
|
.enable = g_params.useSpiceAudio,
|
||||||
.start = audioStart,
|
.start = playbackStart,
|
||||||
.volume = audioVolume,
|
.volume = playbackVolume,
|
||||||
.mute = audioMute,
|
.mute = playbackMute,
|
||||||
.stop = audioStop,
|
.stop = playbackStop,
|
||||||
.data = audioData
|
.data = playbackData
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -141,7 +141,7 @@ struct AppState
|
|||||||
bool autoIdleInhibitState;
|
bool autoIdleInhibitState;
|
||||||
|
|
||||||
struct LG_AudioDevOps * audioDev;
|
struct LG_AudioDevOps * audioDev;
|
||||||
bool audioStarted;
|
bool playbackStarted;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct AppParams
|
struct AppParams
|
||||||
|
Loading…
Reference in New Issue
Block a user