MPD 0.17~git
|
00001 /* 00002 * Copyright (C) 2003-2011 The Music Player Daemon Project 00003 * http://www.musicpd.org 00004 * 00005 * This program is free software; you can redistribute it and/or modify 00006 * it under the terms of the GNU General Public License as published by 00007 * the Free Software Foundation; either version 2 of the License, or 00008 * (at your option) any later version. 00009 * 00010 * This program is distributed in the hope that it will be useful, 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 * GNU General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU General Public License along 00016 * with this program; if not, write to the Free Software Foundation, Inc., 00017 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 00018 */ 00019 00020 #ifndef MPD_OUTPUT_PLUGIN_H 00021 #define MPD_OUTPUT_PLUGIN_H 00022 00023 #include <glib.h> 00024 00025 #include <stdbool.h> 00026 #include <stddef.h> 00027 00028 struct config_param; 00029 struct audio_format; 00030 struct tag; 00031 00035 struct audio_output_plugin { 00039 const char *name; 00040 00045 bool (*test_default_device)(void); 00046 00058 struct audio_output *(*init)(const struct config_param *param, 00059 GError **error); 00060 00064 void (*finish)(struct audio_output *data); 00065 00076 bool (*enable)(struct audio_output *data, GError **error_r); 00077 00082 void (*disable)(struct audio_output *data); 00083 00092 bool (*open)(struct audio_output *data, struct audio_format *audio_format, 00093 GError **error); 00094 00098 void (*close)(struct audio_output *data); 00099 00108 unsigned (*delay)(struct audio_output *data); 00109 00114 void (*send_tag)(struct audio_output *data, const struct tag *tag); 00115 00123 size_t (*play)(struct audio_output *data, 00124 const void *chunk, size_t size, 00125 GError **error); 00126 00130 void (*drain)(struct audio_output *data); 00131 00136 void (*cancel)(struct audio_output *data); 00137 00149 bool (*pause)(struct audio_output *data); 00150 00157 const struct mixer_plugin *mixer_plugin; 00158 }; 00159 00160 static inline bool 00161 ao_plugin_test_default_device(const struct audio_output_plugin *plugin) 00162 { 00163 return plugin->test_default_device != NULL 00164 ? plugin->test_default_device() 00165 : false; 00166 } 00167 00168 G_GNUC_MALLOC 00169 struct audio_output * 00170 ao_plugin_init(const struct audio_output_plugin *plugin, 00171 const struct config_param *param, 00172 GError **error); 00173 00174 void 00175 ao_plugin_finish(struct audio_output *ao); 00176 00177 bool 00178 ao_plugin_enable(struct audio_output *ao, GError **error_r); 00179 00180 void 00181 ao_plugin_disable(struct audio_output *ao); 00182 00183 bool 00184 ao_plugin_open(struct audio_output *ao, struct audio_format *audio_format, 00185 GError **error); 00186 00187 void 00188 ao_plugin_close(struct audio_output *ao); 00189 00190 G_GNUC_PURE 00191 unsigned 00192 ao_plugin_delay(struct audio_output *ao); 00193 00194 void 00195 ao_plugin_send_tag(struct audio_output *ao, const struct tag *tag); 00196 00197 size_t 00198 ao_plugin_play(struct audio_output *ao, const void *chunk, size_t size, 00199 GError **error); 00200 00201 void 00202 ao_plugin_drain(struct audio_output *ao); 00203 00204 void 00205 ao_plugin_cancel(struct audio_output *ao); 00206 00207 bool 00208 ao_plugin_pause(struct audio_output *ao); 00209 00210 #endif