aboutsummaryrefslogtreecommitdiffstats
path: root/src/output/ao_plugin.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/output/ao_plugin.c89
1 files changed, 41 insertions, 48 deletions
diff --git a/src/output/ao_plugin.c b/src/output/ao_plugin.c
index d7298fc02..565384b7b 100644
--- a/src/output/ao_plugin.c
+++ b/src/output/ao_plugin.c
@@ -24,24 +24,17 @@
#undef G_LOG_DOMAIN
#define G_LOG_DOMAIN "ao"
-static int driverInitCount;
+static unsigned ao_output_ref;
-typedef struct _AoData {
- size_t writeSize;
- int driverId;
+struct ao_data {
+ size_t write_size;
+ int driver;
ao_option *options;
ao_device *device;
} AoData;
-static AoData *newAoData(void)
-{
- AoData *ret = g_malloc(sizeof(AoData));
- ret->options = NULL;
-
- return ret;
-}
-
-static void audioOutputAo_error(const char *msg)
+static void
+ao_output_error(const char *msg)
{
const char *error;
@@ -74,28 +67,30 @@ static void audioOutputAo_error(const char *msg)
}
static void *
-audioOutputAo_initDriver(G_GNUC_UNUSED const struct audio_format *audio_format,
- const struct config_param *param)
+ao_output_init(G_GNUC_UNUSED const struct audio_format *audio_format,
+ const struct config_param *param)
{
+ struct ao_data *ad = g_new(struct ao_data, 1);
ao_info *ai;
- AoData *ad = newAoData();
const char *value;
- ad->writeSize = config_get_block_unsigned(param, "write_size", 1024);
+ ad->options = NULL;
+
+ ad->write_size = config_get_block_unsigned(param, "write_size", 1024);
- if (driverInitCount == 0) {
+ if (ao_output_ref == 0) {
ao_initialize();
}
- driverInitCount++;
+ ao_output_ref++;
value = config_get_block_string(param, "driver", "default");
if (0 == strcmp(value, "default")) {
- ad->driverId = ao_default_driver_id();
- } else if ((ad->driverId = ao_driver_id(value)) < 0)
+ ad->driver = ao_default_driver_id();
+ } else if ((ad->driver = ao_driver_id(value)) < 0)
g_error("\"%s\" is not a valid ao driver at line %i\n",
value, param->line);
- if ((ai = ao_driver_info(ad->driverId)) == NULL) {
+ if ((ai = ao_driver_info(ad->driver)) == NULL) {
g_error("problems getting driver info for device defined at line %i\n"
"you may not have permission to the audio device\n", param->line);
}
@@ -126,35 +121,33 @@ audioOutputAo_initDriver(G_GNUC_UNUSED const struct audio_format *audio_format,
return ad;
}
-static void freeAoData(AoData * ad)
+static void
+ao_output_finish(void *data)
{
+ struct ao_data *ad = (struct ao_data *)data;
+
ao_free_options(ad->options);
g_free(ad);
-}
-
-static void audioOutputAo_finishDriver(void *data)
-{
- AoData *ad = (AoData *)data;
- freeAoData(ad);
- driverInitCount--;
+ ao_output_ref--;
- if (driverInitCount == 0)
+ if (ao_output_ref == 0)
ao_shutdown();
}
-static void audioOutputAo_closeDevice(void *data)
+static void
+ao_output_close(void *data)
{
- AoData *ad = (AoData *)data;
+ struct ao_data *ad = (struct ao_data *)data;
ao_close(ad->device);
}
static bool
-audioOutputAo_openDevice(void *data, struct audio_format *audio_format)
+ao_output_open(void *data, struct audio_format *audio_format)
{
ao_sample_format format;
- AoData *ad = (AoData *)data;
+ struct ao_data *ad = (struct ao_data *)data;
/* support for 24 bit samples in libao is currently dubious,
and until we have sorted that out, resample everything to
@@ -167,10 +160,10 @@ audioOutputAo_openDevice(void *data, struct audio_format *audio_format)
format.byte_format = AO_FMT_NATIVE;
format.channels = audio_format->channels;
- ad->device = ao_open_live(ad->driverId, &format, ad->options);
+ ad->device = ao_open_live(ad->driver, &format, ad->options);
if (ad->device == NULL) {
- audioOutputAo_error("Failed to open libao");
+ ao_output_error("Failed to open libao");
return false;
}
@@ -195,26 +188,26 @@ static int ao_play_deconst(ao_device *device, const void *output_samples,
}
static size_t
-audioOutputAo_play(void *data, const void *chunk, size_t size)
+ao_output_play(void *data, const void *chunk, size_t size)
{
- AoData *ad = (AoData *)data;
+ struct ao_data *ad = (struct ao_data *)data;
- if (size > ad->writeSize)
- size = ad->writeSize;
+ if (size > ad->write_size)
+ size = ad->write_size;
if (ao_play_deconst(ad->device, chunk, size) == 0) {
- audioOutputAo_error("Closing libao device due to play error");
+ ao_output_error("Closing libao device due to play error");
return 0;
}
return size;
}
-const struct audio_output_plugin aoPlugin = {
+const struct audio_output_plugin ao_output_plugin = {
.name = "ao",
- .init = audioOutputAo_initDriver,
- .finish = audioOutputAo_finishDriver,
- .open = audioOutputAo_openDevice,
- .play = audioOutputAo_play,
- .close = audioOutputAo_closeDevice,
+ .init = ao_output_init,
+ .finish = ao_output_finish,
+ .open = ao_output_open,
+ .close = ao_output_close,
+ .play = ao_output_play,
};