Changeset 454:39d9d6923952 in roaraudio
- Timestamp:
- 08/12/08 03:50:41 (16 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
plugins/xmms/roar.c
r453 r454 36 36 37 37 38 OutputPlugin esd_op = 39 { 38 OutputPlugin roar_op = { 40 39 NULL, 41 40 NULL, 42 41 "RoarAudio XMMS Plugin", /* Description */ 43 42 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, 48 47 roar_open, 49 48 roar_write, 50 49 roar_close, 51 roar_flush,52 roar_pause,50 NULL, //roar_flush, 51 NULL, //roar_pause, 53 52 roar_free, 54 53 roar_playing, 55 roar_get_output_time,56 roar_get_written_time,54 NULL, //roar_get_output_time, 55 NULL, //roar_get_written_time, 57 56 }; 58 57 58 #define STATE_CONNECTED 1 59 #define STATE_PLAYING 2 60 61 struct 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 69 OutputPlugin *get_oplugin_info(void) { 70 return &roar_op; 71 } 72 73 void roar_init(void) { 74 g_inst.state = 0; 75 g_inst.server = NULL; 76 ROAR_WARN("roar_init(*) = (void)"); 77 } 78 79 int roar_playing(void) { 80 return g_inst.state & STATE_PLAYING ? TRUE : FALSE; 81 } 82 83 void roar_write(void *ptr, int length) { 84 write(g_inst.data_fh, ptr, length); 85 } 86 87 int 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 143 void roar_close(void) { 144 close(g_inst.data_fh); 145 g_inst.state |= STATE_PLAYING; 146 g_inst.state -= STATE_PLAYING; 147 } 148 149 void roar_pause(short p); 150 int roar_get_output_time(void); 151 int roar_get_written_time(void); 152 153 int roar_free(void) { 154 return 1000000; // ??? 155 } 156 59 157 //ll
Note: See TracChangeset
for help on using the changeset viewer.