Changeset 454:39d9d6923952 in roaraudio


Ignore:
Timestamp:
08/12/08 03:50:41 (16 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

done basic work to support playback

File:
1 edited

Legend:

Unmodified
Added
Removed
  • plugins/xmms/roar.c

    r453 r454  
    3636 
    3737 
    38 OutputPlugin esd_op = 
    39 { 
     38OutputPlugin roar_op = { 
    4039        NULL, 
    4140        NULL, 
    4241        "RoarAudio XMMS Plugin", /* Description */ 
    4342        roar_init, 
    44         roar_about, 
    45         roar_configure, 
    46         roar_get_volume, 
    47         roar_set_volume, 
     43        NULL, //roar_about, 
     44        NULL, //roar_configure, 
     45        NULL, //roar_get_volume, 
     46        NULL, //roar_set_volume, 
    4847        roar_open, 
    4948        roar_write, 
    5049        roar_close, 
    51         roar_flush, 
    52         roar_pause, 
     50        NULL, //roar_flush, 
     51        NULL, //roar_pause, 
    5352        roar_free, 
    5453        roar_playing, 
    55         roar_get_output_time, 
    56         roar_get_written_time, 
     54        NULL, //roar_get_output_time, 
     55        NULL, //roar_get_written_time, 
    5756}; 
    5857 
     58#define STATE_CONNECTED 1 
     59#define STATE_PLAYING   2 
     60 
     61struct xmms_roar_out { 
     62 int state; 
     63 char * server; 
     64 struct roar_connection con; 
     65 struct roar_stream     stream; 
     66 int data_fh; 
     67} g_inst; 
     68 
     69OutputPlugin *get_oplugin_info(void) { 
     70 return &roar_op; 
     71} 
     72 
     73void roar_init(void) { 
     74 g_inst.state = 0; 
     75 g_inst.server = NULL; 
     76 ROAR_WARN("roar_init(*) = (void)"); 
     77} 
     78 
     79int roar_playing(void) { 
     80 return g_inst.state & STATE_PLAYING ? TRUE : FALSE; 
     81} 
     82 
     83void roar_write(void *ptr, int length) { 
     84 write(g_inst.data_fh, ptr, length); 
     85} 
     86 
     87int roar_open(AFormat fmt, int rate, int nch) { 
     88 int codec = ROAR_CODEC_DEFAULT; 
     89 int bits; 
     90 
     91 if ( !(g_inst.state & STATE_CONNECTED) ) { 
     92  if ( roar_simple_connect(&(g_inst.con), g_inst.server, "XMMS") == -1 ) { 
     93   return FALSE; 
     94  } 
     95  g_inst.state |= STATE_CONNECTED; 
     96 } 
     97 
     98  bits = 16; 
     99  switch (fmt) { 
     100   case FMT_S8: 
     101     bits = 8; 
     102     codec = ROAR_CODEC_DEFAULT; 
     103    break; 
     104   case FMT_U8: 
     105     bits = 8; 
     106     codec = ROAR_CODEC_PCM_S_LE; // _LE, _BE, _PDP,... all the same for 8 bit output 
     107    break; 
     108   case FMT_U16_LE: 
     109     codec = ROAR_CODEC_PCM_U_LE; 
     110    break; 
     111   case FMT_U16_BE: 
     112     codec = ROAR_CODEC_PCM_U_BE; 
     113    break; 
     114   case FMT_U16_NE: 
     115#if BYTE_ORDER == BIG_ENDIAN 
     116     codec = ROAR_CODEC_PCM_U_BE; 
     117#elif BYTE_ORDER == LITTLE_ENDIAN 
     118     codec = ROAR_CODEC_PCM_U_LE; 
     119#else 
     120     codec = ROAR_CODEC_PCM_U_PDP; 
     121#endif 
     122    break; 
     123   case FMT_S16_LE: 
     124     codec = ROAR_CODEC_PCM_S_LE; 
     125    break; 
     126   case FMT_S16_BE: 
     127     codec = ROAR_CODEC_PCM_S_BE; 
     128    break; 
     129   case FMT_S16_NE: 
     130     codec = ROAR_CODEC_DEFAULT; 
     131    break; 
     132 } 
     133 
     134 if ( (g_inst.data_fh = roar_simple_new_stream_obj(&(g_inst.con), &(g_inst.stream), 
     135                              rate, nch, bits, codec, ROAR_DIR_PLAY)) == -1) { 
     136  return FALSE; 
     137 } 
     138 g_inst.state |= STATE_PLAYING; 
     139 
     140 return TRUE; 
     141} 
     142 
     143void roar_close(void) { 
     144 close(g_inst.data_fh); 
     145 g_inst.state |= STATE_PLAYING; 
     146 g_inst.state -= STATE_PLAYING; 
     147} 
     148 
     149void roar_pause(short p); 
     150int roar_get_output_time(void); 
     151int roar_get_written_time(void); 
     152 
     153int roar_free(void) { 
     154 return 1000000; // ??? 
     155} 
     156 
    59157//ll 
Note: See TracChangeset for help on using the changeset viewer.