Changeset 456:829f43b09ea3 in roaraudio
- Timestamp:
- 08/12/08 04:57:10 (16 years ago)
- Branch:
- default
- Phase:
- public
- Location:
- plugins/xmms
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
plugins/xmms/Makefile
r453 r456 10 10 INSTALL_DIR=`xmms-config --output-plugin-dir` 11 11 12 DEFINES=-DDEBUG 12 13 CFLAGS = -g -Wall -O2 $(DEFINES) $(INCLUDE) -fPIC $(GTK_CFLAFS) $(XMMS_CFLAGS) 13 14 LDFLAGS = -g -shared -lroar $(GTK_LIBS) $(XMMS_LIBS) -
plugins/xmms/roar.c
r455 r456 13 13 #include "xmms/configfile.h" 14 14 #include "xmms/util.h" 15 16 #define _(x) (x) 17 18 gint ctrlsocket_get_session_id(void); 15 19 16 20 void roar_init(void); … … 33 37 int roar_get_output_time(void); 34 38 int roar_get_written_time(void); 35 void roar_set_audio_params(void); 36 39 40 int roar_update_metadata(void); 41 int roar_chk_metadata(void); 37 42 38 43 OutputPlugin roar_op = { … … 41 46 "RoarAudio XMMS Plugin", /* Description */ 42 47 roar_init, 43 NULL, //roar_about,48 roar_about, 44 49 NULL, //roar_configure, 45 50 NULL, //roar_get_volume, … … 65 70 struct roar_stream stream; 66 71 int data_fh; 67 long int written; 68 int bps; 72 long unsigned int written; 73 long unsigned int bps; 74 int session; 75 int next_test; 69 76 } g_inst; 70 77 … … 76 83 g_inst.state = 0; 77 84 g_inst.server = NULL; 78 ROAR_WARN("roar_init(*) = (void)"); 85 g_inst.session = ctrlsocket_get_session_id(); 86 ROAR_DBG("roar_init(*) = (void)"); 79 87 } 80 88 … … 85 93 void roar_write(void *ptr, int length) { 86 94 int r; 87 if ( (r = write(g_inst.data_fh, ptr, length)) != -1 ) 88 g_inst.written += r; 95 96 while (length) { 97 if ( (r = write(g_inst.data_fh, ptr, length >= 1764 ? 1764 : length)) != -1 ) { 98 g_inst.written += r; 99 ptr += r; 100 length -= r; 101 g_inst.next_test -= r; 102 } else { 103 return; 104 } 105 } 106 107 108 if ( g_inst.next_test < 1 ) { 109 roar_chk_metadata(); 110 g_inst.next_test = g_inst.bps; 111 } 89 112 } 90 113 … … 136 159 } 137 160 138 g_inst.bps = nch * rate * bits / 8; 161 g_inst.bps = nch * rate * bits / 8; 162 g_inst.next_test = g_inst.bps; 139 163 140 164 if ( (g_inst.data_fh = roar_simple_new_stream_obj(&(g_inst.con), &(g_inst.stream), … … 145 169 146 170 g_inst.written = 0; 171 172 roar_update_metadata(); 147 173 148 174 return TRUE; … … 165 191 return roar_get_written_time(); 166 192 } 193 167 194 int roar_get_written_time(void) { 168 return (g_inst.written * 1000) / g_inst.bps; 195 gint64 r; 196 197 if ( !g_inst.bps ) { 198 ROAR_DBG("roar_get_written_time(void) = 0"); 199 return 0; 200 } 201 202 r = g_inst.written; 203 r *= 1000; // sec -> msec 204 r /= g_inst.bps; 205 ROAR_DBG("roar_get_written_time(void) = %lu", r); 206 207 return r; 208 } 209 210 211 // ABOUT: 212 213 void roar_about(void) { 214 static GtkWidget *dialog; 215 216 if (dialog != NULL) 217 return; 218 219 dialog = xmms_show_message( 220 _("About RoarAudio Plugin"), 221 _("RoarAudio XMMS Plugin..." 222 ), _("OK"), FALSE, NULL, NULL); 223 gtk_signal_connect(GTK_OBJECT(dialog), "destroy", 224 GTK_SIGNAL_FUNC(gtk_widget_destroyed), 225 &dialog); 226 } 227 228 // CONFIG: 229 230 // META DATA: 231 232 int roar_update_metadata(void) { 233 struct roar_meta meta; 234 char empty = 0; 235 char * info; 236 int pos; 237 238 pos = xmms_remote_get_playlist_pos(g_inst.session); 239 240 meta.value = ∅ 241 meta.key[0] = 0; 242 meta.type = ROAR_META_TYPE_NONE; 243 244 roar_stream_meta_set(&(g_inst.con), &(g_inst.stream), ROAR_META_MODE_CLEAR, &meta); 245 246 info = xmms_remote_get_playlist_file(g_inst.session, pos); 247 248 if ( info ) { 249 if ( strncmp(info, "http:", 5) == 0 ) 250 meta.type = ROAR_META_TYPE_FILEURL; 251 else 252 meta.type = ROAR_META_TYPE_FILENAME; 253 254 meta.value = info; 255 roar_stream_meta_set(&(g_inst.con), &(g_inst.stream), ROAR_META_MODE_SET, &meta); 256 257 free(info); 258 } 259 260 info = xmms_remote_get_playlist_title(g_inst.session, pos); 261 262 if ( info ) { 263 meta.type = ROAR_META_TYPE_TITLE; 264 265 meta.value = info; 266 roar_stream_meta_set(&(g_inst.con), &(g_inst.stream), ROAR_META_MODE_SET, &meta); 267 268 free(info); 269 } 270 271 return 0; 272 } 273 274 int roar_chk_metadata(void) { 275 static int old_pos = -1; 276 static char * old_title = "NEW TITLE"; 277 int pos; 278 char * title; 279 int need_update = 0; 280 281 pos = xmms_remote_get_playlist_pos(g_inst.session); 282 283 if ( pos != old_pos ) { 284 old_pos = pos; 285 need_update = 1; 286 } else { 287 title = xmms_remote_get_playlist_title(g_inst.session, pos); 288 289 if ( strcmp(title, old_title) ) { 290 free(old_title); 291 old_title = title; 292 need_update = 1; 293 } else { 294 free(title); 295 } 296 } 297 298 if ( need_update ) { 299 roar_update_metadata(); 300 } 301 302 return 0; 169 303 } 170 304
Note: See TracChangeset
for help on using the changeset viewer.