Changeset 456:829f43b09ea3 in roaraudio


Ignore:
Timestamp:
08/12/08 04:57:10 (16 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

got roar_write() work better and basic meta data update working

Location:
plugins/xmms
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • plugins/xmms/Makefile

    r453 r456  
    1010INSTALL_DIR=`xmms-config --output-plugin-dir` 
    1111 
     12DEFINES=-DDEBUG 
    1213CFLAGS  = -g -Wall -O2 $(DEFINES) $(INCLUDE) -fPIC $(GTK_CFLAFS) $(XMMS_CFLAGS) 
    1314LDFLAGS = -g -shared -lroar $(GTK_LIBS) $(XMMS_LIBS) 
  • plugins/xmms/roar.c

    r455 r456  
    1313#include "xmms/configfile.h" 
    1414#include "xmms/util.h" 
     15 
     16#define _(x) (x) 
     17 
     18gint ctrlsocket_get_session_id(void); 
    1519 
    1620void roar_init(void); 
     
    3337int roar_get_output_time(void); 
    3438int roar_get_written_time(void); 
    35 void roar_set_audio_params(void); 
    36  
     39 
     40int roar_update_metadata(void); 
     41int roar_chk_metadata(void); 
    3742 
    3843OutputPlugin roar_op = { 
     
    4146        "RoarAudio XMMS Plugin", /* Description */ 
    4247        roar_init, 
    43         NULL, //roar_about, 
     48        roar_about, 
    4449        NULL, //roar_configure, 
    4550        NULL, //roar_get_volume, 
     
    6570 struct roar_stream     stream; 
    6671 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; 
    6976} g_inst; 
    7077 
     
    7683 g_inst.state = 0; 
    7784 g_inst.server = NULL; 
    78  ROAR_WARN("roar_init(*) = (void)"); 
     85 g_inst.session = ctrlsocket_get_session_id(); 
     86 ROAR_DBG("roar_init(*) = (void)"); 
    7987} 
    8088 
     
    8593void roar_write(void *ptr, int length) { 
    8694 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 } 
    89112} 
    90113 
     
    136159 } 
    137160 
    138  g_inst.bps = nch * rate * bits / 8; 
     161 g_inst.bps       = nch * rate * bits / 8; 
     162 g_inst.next_test = g_inst.bps; 
    139163 
    140164 if ( (g_inst.data_fh = roar_simple_new_stream_obj(&(g_inst.con), &(g_inst.stream), 
     
    145169 
    146170 g_inst.written = 0; 
     171 
     172 roar_update_metadata(); 
    147173 
    148174 return TRUE; 
     
    165191 return roar_get_written_time(); 
    166192} 
     193 
    167194int 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 
     213void 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 
     232int 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 = &empty; 
     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 
     274int 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; 
    169303} 
    170304 
Note: See TracChangeset for help on using the changeset viewer.