aboutsummaryrefslogtreecommitdiff
path: root/src/output_internal.h
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-09-24 07:20:55 +0200
committerMax Kellermann <max@duempel.org>2008-09-24 07:20:55 +0200
commitacc4a0ba2dd0be3f28c4ca009e08d1cc1bbc534a (patch)
tree7d4ea0359c85f67d0366fb58ae80c8aa35f3a473 /src/output_internal.h
parent63fb1efb5cd6665b73ced155ba89a5c7f094d9ab (diff)
output: make "struct audio_output" opaque for output plugins
We have eliminated direct accesses to the audio_output struct from the all output plugins. Make it opaque for them, and move its real declaration to output_internal.h, similar to decoder_internal.h. Pass the opaque structure to plugin.init() only, which will return the plugin's data pointer on success, and NULL on failure. This data pointer will be passed to all other methods instead of the audio_output struct.
Diffstat (limited to 'src/output_internal.h')
-rw-r--r--src/output_internal.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/output_internal.h b/src/output_internal.h
new file mode 100644
index 00000000..25094f6f
--- /dev/null
+++ b/src/output_internal.h
@@ -0,0 +1,58 @@
+/* the Music Player Daemon (MPD)
+ * Copyright (C) 2003-2007 by Warren Dukes (warren.dukes@gmail.com)
+ * Copyright (C) 2008 Max Kellermann <max@duempel.org>
+ * This project's homepage is: http://www.musicpd.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef OUTPUT_INTERNAL_H
+#define OUTPUT_INTERNAL_H
+
+#include "pcm_utils.h"
+#include "notify.h"
+
+struct audio_output {
+ int open;
+ const char *name;
+
+ const struct audio_output_plugin *plugin;
+
+ int convertAudioFormat;
+ struct audio_format inAudioFormat;
+ struct audio_format outAudioFormat;
+ struct audio_format reqAudioFormat;
+ ConvState convState;
+ char *convBuffer;
+ size_t convBufferLen;
+
+ pthread_t thread;
+ struct notify notify;
+ enum audio_output_command command;
+ union {
+ struct {
+ const char *data;
+ size_t size;
+ } play;
+
+ const struct tag *tag;
+ } args;
+ int result;
+
+ void *data;
+};
+
+extern struct notify audio_output_client_notify;
+
+#endif