From cd841ad7b5b63a95d6de63597db32332ff1409fd Mon Sep 17 00:00:00 2001 From: ejurgensen Date: Sun, 24 Jan 2016 22:19:15 +0100 Subject: [PATCH] [outputs] Reorganise new generic output interface --- src/outputs.c | 38 +++++++++++++++++++++++++------------- src/outputs.h | 30 +++++++++++++++++------------- 2 files changed, 42 insertions(+), 26 deletions(-) diff --git a/src/outputs.c b/src/outputs.c index 05f8caef..7b316296 100644 --- a/src/outputs.c +++ b/src/outputs.c @@ -31,31 +31,37 @@ #include "logger.h" #include "outputs.h" -/*#ifdef ALSA -extern audio_output output_alsa; -#endif -#ifdef OSS4 -extern audio_output output_oss4; -#endif -extern struct output_definition output_dummy;*/ extern struct output_definition output_raop; #ifdef CHROMECAST extern struct output_definition output_cast; #endif +/* TODO +extern struct output_definition output_streaming; +#ifdef ALSA +extern struct output_definition output_alsa; +#endif +#ifdef OSS4 +extern struct output_definition output_oss4; +#endif +extern struct output_definition output_dummy; +*/ // Must be in sync with enum output_types static struct output_definition *outputs[] = { -/*#ifdef ALSA + &output_raop, +#ifdef CHROMECAST + &output_cast, +#endif +/* TODO + &output_streaming, +#ifdef ALSA &output_alsa, #endif #ifdef OSS4 &output_oss4, #endif - &output_dummy,*/ - &output_raop, -#ifdef CHROMECAST - &output_cast, -#endif + &output_dummy, +*/ NULL }; @@ -327,6 +333,12 @@ outputs_init(void) no_output = 1; for (i = 0; outputs[i]; i++) { + if (outputs[i]->type != i) + { + DPRINTF(E_FATAL, L_PLAYER, "BUG! Output definitions are misaligned with output enum\n"); + return -1; + } + ret = outputs[i]->init(); if (ret < 0) outputs[i]->disabled = 1; diff --git a/src/outputs.h b/src/outputs.h index 5a93b7ae..0afbfdc0 100644 --- a/src/outputs.h +++ b/src/outputs.h @@ -16,46 +16,50 @@ * */ +// Must be in sync with outputs[] in outputs.c enum output_types { -/* OUTPUT_TYPE_ALSA, - OUTPUT_TYPE_OSS, - OUTPUT_TYPE_DUMMY,*/ OUTPUT_TYPE_RAOP, #ifdef CHROMECAST OUTPUT_TYPE_CAST, #endif +/* TODO + OUTPUT_TYPE_STREAMING, + OUTPUT_TYPE_ALSA, + OUTPUT_TYPE_OSS, + OUTPUT_TYPE_DUMMY, +*/ }; /* Output session state */ -/* Session is starting up */ +// Session is starting up #define OUTPUT_STATE_F_STARTUP (1 << 15) -/* Streaming is up (connection established) */ +// Streaming is up (connection established) #define OUTPUT_STATE_F_CONNECTED (1 << 16) enum output_device_state { OUTPUT_STATE_STOPPED = 0, - /* Session startup */ + // Session startup + // TODO Make this less RAOP-specific OUTPUT_STATE_OPTIONS = OUTPUT_STATE_F_STARTUP | 0x01, OUTPUT_STATE_ANNOUNCE = OUTPUT_STATE_F_STARTUP | 0x02, OUTPUT_STATE_SETUP = OUTPUT_STATE_F_STARTUP | 0x03, OUTPUT_STATE_RECORD = OUTPUT_STATE_F_STARTUP | 0x04, - /* Session established - * - streaming ready (RECORD sent and acked, connection established) - * - commands (SET_PARAMETER) are possible - */ + // Session established + // - streaming ready (RECORD sent and acked, connection established) + // - commands (SET_PARAMETER) are possible OUTPUT_STATE_CONNECTED = OUTPUT_STATE_F_CONNECTED, - /* Audio data is being sent */ + // Audio data is being sent OUTPUT_STATE_STREAMING = OUTPUT_STATE_F_CONNECTED | 0x01, - /* Session is failed, couldn't startup or error occurred */ + // Session is failed, couldn't startup or error occurred OUTPUT_STATE_FAILED = -1, - /* Password issue: unknown password or bad password */ + // Password issue: unknown password or bad password OUTPUT_STATE_PASSWORD = -2, };