source: roaraudio/plugins/xmms/roar.c @ 454:39d9d6923952

Last change on this file since 454:39d9d6923952 was 454:39d9d6923952, checked in by phi, 16 years ago

done basic work to support playback

File size: 3.3 KB
Line 
1//roar.c:
2
3#include <roaraudio.h>
4
5//#include "xmms/i18n.h"
6#include <gtk/gtk.h>
7#include <stdio.h>
8#include <string.h>
9
10#include "xmms/plugin.h"
11#include "xmms/xmmsctrl.h"
12#include "xmms/dirbrowser.h"
13#include "xmms/configfile.h"
14#include "xmms/util.h"
15
16void roar_init(void);
17void roar_about(void);
18void roar_configure(void);
19
20void roar_get_volume(int *l, int *r);
21void roar_fetch_volume(int *l, int *r);
22void roar_set_volume(int l, int r);
23void roar_mixer_init(void);
24void roar_mixer_init_vol(int l, int r);
25
26int roar_playing(void);
27int roar_free(void);
28void roar_write(void *ptr, int length);
29void roar_close(void);
30void roar_flush(int time);
31void roar_pause(short p);
32int roar_open(AFormat fmt, int rate, int nch);
33int roar_get_output_time(void);
34int roar_get_written_time(void);
35void roar_set_audio_params(void);
36
37
38OutputPlugin roar_op = {
39        NULL,
40        NULL,
41        "RoarAudio XMMS Plugin", /* Description */
42        roar_init,
43        NULL, //roar_about,
44        NULL, //roar_configure,
45        NULL, //roar_get_volume,
46        NULL, //roar_set_volume,
47        roar_open,
48        roar_write,
49        roar_close,
50        NULL, //roar_flush,
51        NULL, //roar_pause,
52        roar_free,
53        roar_playing,
54        NULL, //roar_get_output_time,
55        NULL, //roar_get_written_time,
56};
57
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
157//ll
Note: See TracBrowser for help on using the repository browser.