Skip to content

Commit

Permalink
correctly set player name in audio client metadata
Browse files Browse the repository at this point in the history
PulseAudio and PipeWire (and SDL when using one of those two as
backends) provide a metadata field in the audio client connection for
the application name.

Don't just hardcode `gbsplay` as the application name but distinguish
between gbsplay and xgbsplay.
  • Loading branch information
mmitch committed Feb 3, 2024
1 parent e54ac59 commit 33f5edd
Show file tree
Hide file tree
Showing 14 changed files with 38 additions and 28 deletions.
4 changes: 2 additions & 2 deletions midifile.c
Original file line number Diff line number Diff line change
Expand Up @@ -163,12 +163,12 @@ void midi_pan(cycles_t cycles, int channel, int pan)
midi_write_event(cycles, event, sizeof(event));
}

long midi_open(enum plugout_endian *endian, long rate, long *buffer_bytes, const char *const filename)
long midi_open(enum plugout_endian *endian, long rate, long *buffer_bytes, const struct plugout_metadata metadata)
{
UNUSED(endian);
UNUSED(rate);
UNUSED(buffer_bytes);
UNUSED(filename);
UNUSED(metadata);

return 0;
}
Expand Down
2 changes: 1 addition & 1 deletion midifile.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ extern void midi_note_on(cycles_t cycles, int channel, int new_note, int velocit
extern void midi_note_off(cycles_t cycles, int channel);
extern void midi_pan(cycles_t cycles, int channel, int pan);

extern long midi_open(enum plugout_endian *endian, long rate, long *buffer_bytes, const char *const filename);
extern long midi_open(enum plugout_endian *endian, long rate, long *buffer_bytes, const struct plugout_metadata metadata);
extern int midi_skip(int subsong);
extern void midi_close(void);

Expand Down
6 changes: 5 additions & 1 deletion player.c
Original file line number Diff line number Diff line change
Expand Up @@ -555,6 +555,7 @@ struct gbs *common_init(int argc, char **argv)
struct gbs *gbs;
uint8_t songs;
uint8_t initial_subsong;
struct plugout_metadata metadata;

i18n_init();

Expand All @@ -581,7 +582,10 @@ struct gbs *common_init(int argc, char **argv)
} else {
actual_endian = requested_endian;
}
if (sound_open(&actual_endian, rate, &buf.bytes, filename) != 0) {

metadata.player_name = myname;
metadata.filename = filename;
if (sound_open(&actual_endian, rate, &buf.bytes, metadata) != 0) {
fprintf(stderr, _("Could not open output plugin \"%s\"\n"),
sound_name);
exit(1);
Expand Down
7 changes: 6 additions & 1 deletion plugout.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,13 @@ enum plugout_endian {
#define PLUGOUT_ENDIAN_NATIVE PLUGOUT_ENDIAN_BIG
#endif

struct plugout_metadata {
const char * player_name;
const char * filename;
};

/* Initial open of plugout. */
typedef long (*plugout_open_fn )(enum plugout_endian *endian, long rate, long *buffer_bytes, const char *const filename);
typedef long (*plugout_open_fn )(enum plugout_endian *endian, long rate, long *buffer_bytes, const struct plugout_metadata metadata);
/* Notification when next subsong is about to start. */
typedef int (*plugout_skip_fn )(int subsong);
/* Notification the the player is paused/resumed. */
Expand Down
4 changes: 2 additions & 2 deletions plugout_alsa.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ snd_pcm_t *pcm_handle;
#define SND_PCM_FORMAT_S16_NE SND_PCM_FORMAT_S16_BE
#endif

static long alsa_open(enum plugout_endian *endian, long rate, long *buffer_bytes, const char *const filename)
static long alsa_open(enum plugout_endian *endian, long rate, long *buffer_bytes, const struct plugout_metadata metadata)
{
const char *pcm_name = "default";
int fmt, err;
Expand All @@ -37,7 +37,7 @@ static long alsa_open(enum plugout_endian *endian, long rate, long *buffer_bytes
snd_pcm_uframes_t buffer_frames = *buffer_bytes / 4;
snd_pcm_uframes_t period_frames;

UNUSED(filename);
UNUSED(metadata);

switch (*endian) {
case PLUGOUT_ENDIAN_BIG: fmt = SND_PCM_FORMAT_S16_BE; break;
Expand Down
4 changes: 2 additions & 2 deletions plugout_devdsp.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,12 @@

static int fd;

static long devdsp_open(enum plugout_endian *endian, long rate, long *buffer_bytes, const char *const filename)
static long devdsp_open(enum plugout_endian *endian, long rate, long *buffer_bytes, const struct plugout_metadata metadata)
{
int c;
int flags;

UNUSED(filename);
UNUSED(metadata);

if ((fd = open("/dev/dsp", O_WRONLY|O_NONBLOCK)) == -1) {
fprintf(stderr, _("Could not open /dev/dsp: %s\n"), strerror(errno));
Expand Down
4 changes: 2 additions & 2 deletions plugout_iodumper.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@
static FILE *file;
static cycles_t cycles_prev = 0;

static long iodumper_open(enum plugout_endian *endian, long rate, long *buffer_bytes, const char *const filename)
static long iodumper_open(enum plugout_endian *endian, long rate, long *buffer_bytes, const struct plugout_metadata metadata)
{
int fd;

UNUSED(endian);
UNUSED(rate);
UNUSED(buffer_bytes);
UNUSED(filename);
UNUSED(metadata);

/*
* clone and close STDOUT_FILENO
Expand Down
8 changes: 4 additions & 4 deletions plugout_nas.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ static AuServer *nas_server;
static AuFlowID nas_flow;

/* forward function declarations */
static long nas_open(enum plugout_endian *endian, long rate, long *buffer_bytes, const char *const filename);
static long nas_open(enum plugout_endian *endian, long rate, long *buffer_bytes, const struct plugout_metadata metadata);
static ssize_t nas_write(const void *buf, size_t count);
static void nas_close();

Expand Down Expand Up @@ -94,10 +94,10 @@ static AuDeviceID nas_find_device(AuServer *aud)
* @param rate requested samplerate
* @param buffer_bytes pointer to requested buffer_size,
* value update to actual buffer_size.
* @param filename filename currently playing (basename only)
* @param metadata player name and currently playing filename (basename only)
* @return 0 on success
*/
static long nas_open(enum plugout_endian *endian, long rate, long *buffer_bytes, const char *const filename)
static long nas_open(enum plugout_endian *endian, long rate, long *buffer_bytes, const struct plugout_metadata metadata)
{
char *text = "";
unsigned char nas_format;
Expand All @@ -106,7 +106,7 @@ static long nas_open(enum plugout_endian *endian, long rate, long *buffer_bytes,
AuDeviceID nas_device;

UNUSED(buffer_bytes);
UNUSED(filename);
UNUSED(metadata);

switch (*endian) {
case PLUGOUT_ENDIAN_BIG:
Expand Down
6 changes: 3 additions & 3 deletions plugout_pipewire.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ static const struct pw_stream_events pipewire_stream_events = {
PW_VERSION_STREAM_EVENTS,
};

static long pipewire_open(enum plugout_endian *endian, long rate, long *buffer_bytes, const char *const filename)
static long pipewire_open(enum plugout_endian *endian, long rate, long *buffer_bytes, const struct plugout_metadata metadata)
{
const struct spa_pod *params[1];
uint8_t buffer[1024];
Expand Down Expand Up @@ -64,7 +64,7 @@ static long pipewire_open(enum plugout_endian *endian, long rate, long *buffer_b
pw_init(0, NULL);

// set main loop
pipewire_data.loop = pw_thread_loop_new("gbsplay", NULL);
pipewire_data.loop = pw_thread_loop_new(metadata.player_name, NULL);

// set stream metadata
props = pw_properties_new(PW_KEY_MEDIA_TYPE, "Audio",
Expand All @@ -84,7 +84,7 @@ static long pipewire_open(enum plugout_endian *endian, long rate, long *buffer_b

// create stream
pipewire_data.stream = pw_stream_new_simple(pw_thread_loop_get_loop(pipewire_data.loop),
filename,
metadata.filename,
props,
&pipewire_stream_events,
&pipewire_data);
Expand Down
4 changes: 2 additions & 2 deletions plugout_pulse.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
static pa_simple *pulse_handle;
static pa_sample_spec pulse_spec;

static long pulse_open(enum plugout_endian *endian, long rate, long *buffer_bytes, const char *const filename)
static long pulse_open(enum plugout_endian *endian, long rate, long *buffer_bytes, const struct plugout_metadata metadata)
{
int err;

Expand All @@ -36,7 +36,7 @@ static long pulse_open(enum plugout_endian *endian, long rate, long *buffer_byte
pulse_spec.rate = rate;
pulse_spec.channels = 2;

pulse_handle = pa_simple_new(NULL, "gbsplay", PA_STREAM_PLAYBACK, NULL, filename, &pulse_spec, NULL, NULL, &err);
pulse_handle = pa_simple_new(NULL, metadata.player_name, PA_STREAM_PLAYBACK, NULL, metadata.filename, &pulse_spec, NULL, NULL, &err);
if (!pulse_handle) {
fprintf(stderr, "pulse: %s\n", pa_strerror(err));
return -1;
Expand Down
5 changes: 3 additions & 2 deletions plugout_sdl.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
int device;
SDL_AudioSpec obtained;

static long sdl_open(enum plugout_endian *endian, long rate, long *buffer_bytes, const char *const filename)
static long sdl_open(enum plugout_endian *endian, long rate, long *buffer_bytes, const struct plugout_metadata metadata)
{
SDL_AudioSpec desired;

Expand All @@ -36,7 +36,8 @@ static long sdl_open(enum plugout_endian *endian, long rate, long *buffer_bytes,
return -1;
}

SDL_SetHint(SDL_HINT_AUDIO_DEVICE_STREAM_NAME, filename);
SDL_SetHint(SDL_HINT_APP_NAME, metadata.player_name);
SDL_SetHint(SDL_HINT_AUDIO_DEVICE_STREAM_NAME, metadata.filename);

SDL_zero(desired);
desired.freq = rate;
Expand Down
4 changes: 2 additions & 2 deletions plugout_stdout.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,12 @@ static int set_fd_to_binmode()

static long stdout_open(enum plugout_endian *endian,
long rate, long *buffer_bytes,
const char *const filename)
const struct plugout_metadata metadata)
{
UNUSED(endian);
UNUSED(rate);
UNUSED(buffer_bytes);
UNUSED(filename);
UNUSED(metadata);

/*
* clone and close STDOUT_FILENO
Expand Down
4 changes: 2 additions & 2 deletions plugout_vgm.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,12 @@ static void vgm_finalize(void) {
fpackat(vgmfile, VGM_OFS_NUMSAMPLES, "<d", (uint32_t)samples_total);
}

static long vgm_open(enum plugout_endian *endian, long rate, long *buffer_bytes, const char *const filename)
static long vgm_open(enum plugout_endian *endian, long rate, long *buffer_bytes, const struct plugout_metadata metadata)
{
UNUSED(endian);
UNUSED(rate);
UNUSED(buffer_bytes);
UNUSED(filename);
UNUSED(metadata);
return 0;
}

Expand Down
4 changes: 2 additions & 2 deletions plugout_wav.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,10 @@ static int wav_close_file() {

static long wav_open(enum plugout_endian *endian,
const long rate, long *buffer_bytes,
const char *const filename)
const struct plugout_metadata metadata)
{
UNUSED(buffer_bytes);
UNUSED(filename);
UNUSED(metadata);

sample_rate = rate;

Expand Down

0 comments on commit 33f5edd

Please sign in to comment.