Mercurial > audlegacy-plugins
comparison src/icecast/icecast.c @ 2801:d3c4dd274890
some cleanup
author | Andrew O. Shadoura <bugzilla@tut.by> |
---|---|
date | Sat, 12 Jul 2008 02:55:33 +0300 |
parents | 48550fe6723c |
children | 2a1f58c9bf84 |
comparison
equal
deleted
inserted
replaced
2800:ea4e97a98914 | 2801:d3c4dd274890 |
---|---|
1 /* Icecast-Plugin | 1 /* Icecast-Plugin |
2 * (C) copyright 2008 based of FileWriter-plugin | 2 * (C) copyright 2008 Andrew O. Shadoura |
3 * Based on FileWriter-plugin | |
4 * (C) copyright 2007 merging of Disk Writer and Out-Lame by Michael Färber | |
3 * | 5 * |
4 * Original Out-Lame-Plugin: | 6 * Original Out-Lame-Plugin: |
5 * (C) copyright 2002 Lars Siebold <khandha5@gmx.net> | 7 * (C) copyright 2002 Lars Siebold <khandha5@gmx.net> |
6 * (C) copyright 2006-2007 porting to audacious by Yoshiki Yazawa <yaz@cc.rim.or.jp> | 8 * (C) copyright 2006-2007 porting to audacious by Yoshiki Yazawa <yaz@cc.rim.or.jp> |
7 * | 9 * |
76 VFSFile *output_file = NULL; | 78 VFSFile *output_file = NULL; |
77 guint64 written = 0; | 79 guint64 written = 0; |
78 guint64 offset = 0; | 80 guint64 offset = 0; |
79 Tuple *tuple = NULL; | 81 Tuple *tuple = NULL; |
80 static shout_t *shout = NULL; | 82 static shout_t *shout = NULL; |
81 gboolean paused = FALSE; | 83 static gboolean paused = FALSE; |
82 | 84 |
83 static void ice_init(void); | 85 static void ice_init(void); |
84 static void ice_cleanup(void); | 86 static void ice_cleanup(void); |
85 static void ice_about(void); | 87 static void ice_about(void); |
86 static gint ice_open(AFormat fmt, gint rate, gint nch); | 88 static gint ice_open(AFormat fmt, gint rate, gint nch); |
144 } | 146 } |
145 | 147 |
146 static void ice_init(void) | 148 static void ice_init(void) |
147 { | 149 { |
148 ConfigDb *db; | 150 ConfigDb *db; |
149 puts("ICE_INIT"); | 151 g_debug("ICE_INIT\n"); |
150 shout_init(); | 152 shout_init(); |
151 printf("Using libshout %s\n", shout_version(NULL, NULL, NULL)); | 153 g_message("Using libshout %s\n", shout_version(NULL, NULL, NULL)); |
152 | 154 |
153 db = aud_cfg_db_open(); | 155 db = aud_cfg_db_open(); |
154 aud_cfg_db_get_int(db, "icecast", "streamformat", &streamformat); | 156 aud_cfg_db_get_int(db, ICECAST_CFGID, "streamformat", &streamformat); |
155 aud_cfg_db_get_string(db, "icecast", "server_address", &server_address); | 157 aud_cfg_db_get_string(db, ICECAST_CFGID, "server_address", &server_address); |
156 aud_cfg_db_get_int(db, "icecast", "server_port", &server_port); | 158 aud_cfg_db_get_int(db, ICECAST_CFGID, "server_port", &server_port); |
157 if (!server_port) server_port=8000; | 159 if (!server_port) server_port=8000; |
158 aud_cfg_db_get_int(db, "icecast", "timeout", &ice_close_timeout); | 160 aud_cfg_db_get_int(db, ICECAST_CFGID, "timeout", &ice_close_timeout); |
159 if (!ice_close_timeout) ice_close_timeout=5; | 161 if (!ice_close_timeout) ice_close_timeout=5; |
160 aud_cfg_db_get_int(db, "icecast", "buffersize", &buffersize); | 162 aud_cfg_db_get_int(db, ICECAST_CFGID, "buffersize", &buffersize); |
161 if (!buffersize) buffersize=8192; | 163 if (!buffersize) buffersize=8192; |
162 buffersize_new=buffersize; | 164 buffersize_new=buffersize; |
163 aud_cfg_db_get_double(db, "icecast", "bufferflush", &bufferflushperc); | 165 aud_cfg_db_get_double(db, ICECAST_CFGID, "bufferflush", &bufferflushperc); |
164 if (!bufferflushperc) bufferflushperc=80.0; | 166 if (!bufferflushperc) bufferflushperc=80.0; |
165 bufferflush=(gint)(buffersize*bufferflushperc); | 167 bufferflush=(gint)(buffersize*bufferflushperc); |
166 bufferflush_new=bufferflush; | 168 bufferflush_new=bufferflush; |
167 aud_cfg_db_get_string(db, "icecast", "server_user", &server_user); | 169 aud_cfg_db_get_string(db, ICECAST_CFGID, "server_user", &server_user); |
168 aud_cfg_db_get_string(db, "icecast", "server_password", &server_password); | 170 aud_cfg_db_get_string(db, ICECAST_CFGID, "server_password", &server_password); |
169 aud_cfg_db_close(db); | 171 aud_cfg_db_close(db); |
170 | 172 |
171 outputbuffer=g_try_malloc(buffersize); | 173 outputbuffer=g_try_malloc(buffersize); |
172 | 174 |
173 set_plugin(); | 175 set_plugin(); |
255 if (!(shout = shout_new())) | 257 if (!(shout = shout_new())) |
256 return 0; | 258 return 0; |
257 | 259 |
258 if (shout_set_host(shout, server_address) != SHOUTERR_SUCCESS) | 260 if (shout_set_host(shout, server_address) != SHOUTERR_SUCCESS) |
259 { | 261 { |
260 printf("Error setting hostname: %s\n", shout_get_error(shout)); | 262 g_warning("Error setting hostname: %s\n", shout_get_error(shout)); |
261 return 0; | 263 return 0; |
262 } | 264 } |
263 | 265 |
264 if (shout_set_protocol(shout, SHOUT_PROTOCOL_HTTP) != SHOUTERR_SUCCESS) | 266 if (shout_set_protocol(shout, SHOUT_PROTOCOL_HTTP) != SHOUTERR_SUCCESS) |
265 { | 267 { |
266 printf("Error setting protocol: %s\n", shout_get_error(shout)); | 268 g_warning("Error setting protocol: %s\n", shout_get_error(shout)); |
267 return 0; | 269 return 0; |
268 } | 270 } |
269 | 271 |
270 if (shout_set_port(shout, server_port) != SHOUTERR_SUCCESS) | 272 if (shout_set_port(shout, server_port) != SHOUTERR_SUCCESS) |
271 { | 273 { |
272 printf("Error setting port: %s\n", shout_get_error(shout)); | 274 g_warning("Error setting port: %s\n", shout_get_error(shout)); |
273 return 0; | 275 return 0; |
274 } | 276 } |
275 | 277 |
276 if (shout_set_password(shout, "password") != SHOUTERR_SUCCESS) | 278 if (shout_set_password(shout, "password") != SHOUTERR_SUCCESS) |
277 { | 279 { |
278 printf("Error setting password: %s\n", shout_get_error(shout)); | 280 g_warning("Error setting password: %s\n", shout_get_error(shout)); |
279 return 0; | 281 return 0; |
280 } | 282 } |
281 | 283 |
282 if (shout_set_mount(shout, "/test") != SHOUTERR_SUCCESS) | 284 if (shout_set_mount(shout, "/test") != SHOUTERR_SUCCESS) |
283 { | 285 { |
284 printf("Error setting mount: %s\n", shout_get_error(shout)); | 286 g_warning("Error setting mount: %s\n", shout_get_error(shout)); |
285 return 0; | 287 return 0; |
286 } | 288 } |
287 | 289 |
288 if (shout_set_user(shout, "source") != SHOUTERR_SUCCESS) | 290 if (shout_set_user(shout, "source") != SHOUTERR_SUCCESS) |
289 { | 291 { |
290 printf("Error setting user: %s\n", shout_get_error(shout)); | 292 g_warning("Error setting user: %s\n", shout_get_error(shout)); |
291 return 0; | 293 return 0; |
292 } | 294 } |
293 | 295 |
294 if (shout_set_format(shout, streamformat_shout[streamformat]) != SHOUTERR_SUCCESS) | 296 if (shout_set_format(shout, streamformat_shout[streamformat]) != SHOUTERR_SUCCESS) |
295 { | 297 { |
296 printf("Error setting user: %s\n", shout_get_error(shout)); | 298 g_warning("Error setting user: %s\n", shout_get_error(shout)); |
297 return 0; | 299 return 0; |
298 } | 300 } |
299 | 301 |
300 if (shout_open(shout) != SHOUTERR_SUCCESS) | 302 if (shout_open(shout) != SHOUTERR_SUCCESS) |
301 { | 303 { |
302 printf("Error connecting to server: %s\n", shout_get_error(shout)); | 304 g_warning("Error connecting to server: %s\n", shout_get_error(shout)); |
303 return 0; | 305 return 0; |
304 } | 306 } |
305 } | 307 } |
306 else | 308 else |
307 rv = 1; | 309 rv = 1; |
389 plugin.write(ptr, length); | 391 plugin.write(ptr, length); |
390 } | 392 } |
391 | 393 |
392 static gint ice_real_write(void* ptr, gint length) | 394 static gint ice_real_write(void* ptr, gint length) |
393 { | 395 { |
394 int ret; | 396 gint ret; |
395 if (!length) return length; | 397 if (!length) return length; |
396 ret = shout_send(shout, ptr, length); | 398 ret = shout_send(shout, ptr, length); |
397 shout_sync(shout); | 399 shout_sync(shout); |
398 printf("ice_write[%d:%d](", ret, length); | 400 g_debug("ice_write[%d:%d](", ret, length); |
399 { | 401 { |
400 int i; | 402 gint i; |
401 for (i=0;(i<length)&&(i<16);i++) printf("%c",g_ascii_isprint(((char*)ptr)[i])?(((char*)ptr)[i]):'.'); | 403 for (i=0;(i<length)&&(i<16);i++) g_debug("%c",g_ascii_isprint(((char*)ptr)[i])?(((char*)ptr)[i]):'.'); |
402 } | 404 } |
403 printf(")\n"); | 405 g_debug(")\n"); |
404 return 0; | 406 return 0; |
405 } | 407 } |
406 | 408 |
407 static gint ice_write_output(void *ptr, gint length) | 409 static gint ice_write_output(void *ptr, gint length) |
408 { | 410 { |
409 if ((!shout) || (!length)) return 0; | 411 if ((!shout) || (!length)) return 0; |
410 printf("outputlength=%d, length=%d...",outputlength, length); | 412 g_debug("outputlength=%d, length=%d...",outputlength, length); |
411 if ((outputlength>bufferflush)||((outputlength+length)>buffersize)) | 413 if ((outputlength>bufferflush)||((outputlength+length)>buffersize)) |
412 { | 414 { |
413 printf("flushing\n"); | 415 g_debug("flushing\n"); |
414 outputlength=ice_real_write(outputbuffer, outputlength); | 416 outputlength=ice_real_write(outputbuffer, outputlength); |
415 } | 417 } |
416 { | 418 { |
417 if (length>buffersize) | 419 if (length>buffersize) |
418 { | 420 { |
419 printf("data too long, flushing\n"); | 421 g_debug("data too long, flushing\n"); |
420 ice_real_write(ptr, length); | 422 ice_real_write(ptr, length); |
421 } | 423 } |
422 else | 424 else |
423 { | 425 { |
424 printf("adding\n"); | 426 g_debug("adding\n"); |
425 memcpy(&(outputbuffer[outputlength]), ptr, length); | 427 memcpy(&(outputbuffer[outputlength]), ptr, length); |
426 outputlength+=length; | 428 outputlength+=length; |
427 } | 429 } |
428 } | 430 } |
429 return length; | 431 return length; |
438 written = 0; | 440 written = 0; |
439 shout_close(shout); | 441 shout_close(shout); |
440 } | 442 } |
441 shout = NULL; | 443 shout = NULL; |
442 ice_tid=0; | 444 ice_tid=0; |
443 puts("ICE_REAL_CLOSE"); | 445 g_debug("ICE_REAL_CLOSE\n"); |
444 return FALSE; | 446 return FALSE; |
445 } | 447 } |
446 | 448 |
447 | 449 |
448 static void ice_close(void) | 450 static void ice_close(void) |
449 { | 451 { |
450 if (ice_tid) g_source_remove(ice_tid); | 452 if (ice_tid) g_source_remove(ice_tid); |
451 ice_tid=g_timeout_add_seconds(3, ice_real_close, NULL); | 453 ice_tid=g_timeout_add_seconds(3, ice_real_close, NULL); |
452 puts("ICE_CLOSE: starting timer"); | 454 g_debug("ICE_CLOSE: starting timer\n"); |
453 } | 455 } |
454 | 456 |
455 static void ice_flush(gint time) | 457 static void ice_flush(gint time) |
456 { | 458 { |
457 if (time < 0) | 459 if (time < 0) |
511 | 513 |
512 bufferflushperc = gtk_spin_button_get_value(GTK_SPIN_BUTTON(bufferflush_spin)); | 514 bufferflushperc = gtk_spin_button_get_value(GTK_SPIN_BUTTON(bufferflush_spin)); |
513 bufferflush_new=(gint)(buffersize*bufferflushperc); | 515 bufferflush_new=(gint)(buffersize*bufferflushperc); |
514 | 516 |
515 db = aud_cfg_db_open(); | 517 db = aud_cfg_db_open(); |
516 aud_cfg_db_set_int(db, "icecast", "streamformat", streamformat); | 518 aud_cfg_db_set_int(db, ICECAST_CFGID, "streamformat", streamformat); |
517 aud_cfg_db_set_string(db, "icecast", "server_address", server_address); | 519 aud_cfg_db_set_string(db, ICECAST_CFGID, "server_address", server_address); |
518 aud_cfg_db_set_string(db, "icecast", "server_user", server_user); | 520 aud_cfg_db_set_string(db, ICECAST_CFGID, "server_user", server_user); |
519 aud_cfg_db_set_string(db, "icecast", "server_password", server_password); | 521 aud_cfg_db_set_string(db, ICECAST_CFGID, "server_password", server_password); |
520 aud_cfg_db_set_int(db, "icecast", "server_port", server_port); | 522 aud_cfg_db_set_int(db, ICECAST_CFGID, "server_port", server_port); |
521 aud_cfg_db_set_int(db, "icecast", "timeout", ice_close_timeout); | 523 aud_cfg_db_set_int(db, ICECAST_CFGID, "timeout", ice_close_timeout); |
522 aud_cfg_db_set_int(db, "icecast", "buffersize", buffersize_new); | 524 aud_cfg_db_set_int(db, ICECAST_CFGID, "buffersize", buffersize_new); |
523 aud_cfg_db_set_double(db, "icecast", "bufferflush", bufferflushperc); | 525 aud_cfg_db_set_double(db, ICECAST_CFGID, "bufferflush", bufferflushperc); |
524 | 526 |
525 aud_cfg_db_close(db); | 527 aud_cfg_db_close(db); |
526 | 528 |
527 gtk_widget_destroy(configure_win); | 529 gtk_widget_destroy(configure_win); |
528 } | 530 } |