source: roaraudio/roard/roard.c @ 5910:cb47378a0e0b

roaraudio init
Last change on this file since 5910:cb47378a0e0b was 0:2a41d2f42394, checked in by phi, 16 years ago

Initial revision

File size: 4.4 KB
Line 
1//roard.c:
2
3#include "roard.h"
4
5void usage (void) {
6 printf("Usage: roard [OPTIONS]...\n\n");
7
8 printf("Audio Options:\n\n");
9 printf(
10        " -R  --rate   RATE     - Set server rate\n"
11        " -B  --bits   BITS     - Set server bits\n"
12        " -C  --chans  CHANNELS - Set server channels\n"
13       );
14
15 printf("\nDriver Options:\n\n");
16 printf(" -d  --driver DRV      - Set the driver, use '-d list' to get a list (default: %s)\n", ROAR_DRIVER_DEFAULT);
17 printf(" -D  --device DEV      - Set the device\n");
18 printf(" -dO OPTS              - Set output options\n");
19
20 printf("\nSource Options:\n\n");
21 printf(" -s  --source DRV      - Use DRV as input driver\n"
22        " -S           DEV      - Use DEV as input device\n"
23        " -sO          OPTS     - Use OPTS as input options\n"
24        " -sP                   - Make souce as primary\n"
25       );
26
27
28 printf("\nServer Options:\n\n");
29 printf(" -t  --tcp             - Use TCP listen socket\n"
30        " -u  --unix            - Use UNIX Domain listen socket (default)\n"
31        " -p  --port            - TCP Port to bind to\n"
32        " -b  --bind            - IP/Hostname to bind to\n"
33        " -s  --sock            - Filename for UNIX Domain Socket\n"
34       );
35// printf("\n Options:\n\n");
36 printf("\n");
37}
38
39int main (int argc, char * argv[]) {
40 int i;
41 char * k;
42 struct roar_audio_info sa;
43 char * driver = NULL;
44 char * device = NULL;
45 char * opts   = NULL;
46 char * server = ROAR_DEFAULT_HOST;
47 int      port = ROAR_DEFAULT_PORT;
48 int               drvid;
49 char * s_dev  = NULL;
50 char * s_con  = NULL;
51 char * s_opt  = NULL;
52 int    s_prim = 0;
53 DRIVER_USERDATA_T drvinst;
54
55 g_listen_socket = -1;
56 g_standby       =  0;
57
58 sa.bits     = ROAR_BITS_DEFAULT;
59 sa.channels = ROAR_CHANNELS_DEFAULT;
60 sa.rate     = ROAR_RATE_DEFAULT;
61 sa.codec    = ROAR_CODEC_DEFAULT;
62
63 g_sa = &sa;
64
65 if ( sources_init() == -1 ) {
66  ROAR_ERR("Can not init sources!");
67  return 1;
68 }
69
70 for (i = 1; i < argc; i++) {
71  k = argv[i];
72
73  if ( strcmp(k, "-h") == 0 || strcmp(k, "--help") == 0 ) {
74   usage();
75   return 0;
76
77  } else if ( strcmp(k, "-R") == 0 || strcmp(k, "--rate") == 0 ) {
78   sa.rate = atoi(argv[++i]);
79  } else if ( strcmp(k, "-B") == 0 || strcmp(k, "--bits") == 0 ) {
80   sa.bits = atoi(argv[++i]);
81  } else if ( strcmp(k, "-C") == 0 || strcmp(k, "--chans") == 0 ) {
82   sa.channels = atoi(argv[++i]);
83
84  } else if ( strcmp(k, "-d") == 0 || strcmp(k, "--driver") == 0 ) {
85   driver = argv[++i];
86   if ( strcmp(driver, "list") == 0 ) {
87    print_driverlist();
88   }
89  } else if ( strcmp(k, "-D") == 0 || strcmp(k, "--device") == 0 ) {
90   device = argv[++i];
91  } else if ( strcmp(k, "-dO") == 0 ) {
92   opts = argv[++i];
93
94  } else if ( strcmp(k, "-s") == 0 || strcmp(k, "--source") == 0 ) {
95   k = argv[++i];
96   if ( sources_add(k, s_dev, s_con, s_opt, s_prim) == -1 ) {
97    ROAR_ERR("main(*): adding source '%s' via '%s' failed!", s_dev, k);
98   }
99   s_opt = s_dev = s_con = NULL;
100   s_prim = 0;
101  } else if ( strcmp(k, "-S") == 0 ) {
102   s_dev = argv[++i];
103  } else if ( strcmp(k, "-sO") == 0 ) {
104   s_opt = argv[++i];
105  } else if ( strcmp(k, "-sC") == 0 ) {
106   s_con = argv[++i];
107  } else if ( strcmp(k, "-sP") == 0 ) {
108   s_prim = 1;
109
110  } else if ( strcmp(k, "-p") == 0 || strcmp(k, "--port") == 0 ) {
111   port = atoi(argv[++i]);
112  } else if ( strcmp(k, "-b") == 0 || strcmp(k, "--bind") == 0 ) {
113   server = argv[++i];
114
115  } else {
116   usage();
117   return 1;
118  }
119
120 }
121
122 ROAR_DBG("Server config: rate=%i, bits=%i, chans=%i", sa.rate, sa.bits, sa.channels);
123
124 if ( (g_listen_socket = roar_socket_listen(ROAR_SOCKET_TYPE_UNKNOWN, server, port)) == -1 ) {
125  ROAR_ERR("Can not open listen socket!");
126  return 1;
127 }
128
129 if ( output_buffer_init(&sa) == -1 ) {
130  ROAR_ERR("Can not init output buffer!");
131  return 1;
132 }
133
134 if ( driver_open(&drvinst, &drvid, driver, device, &sa) == -1 ) {
135  ROAR_ERR("Can not open output driver!");
136  return 1;
137 }
138
139 if ( clients_init() == -1 ) {
140  ROAR_ERR("Can not init clients!");
141  return 1;
142 }
143
144 if ( streams_init() == -1 ) {
145  ROAR_ERR("Can not nit streams!");
146  return 1;
147 }
148
149 signal(SIGINT,  on_sig_int);
150 signal(SIGPIPE, SIG_IGN);  // ignore broken pipes
151
152
153 // start main loop...
154 main_loop(drvid, drvinst, &sa);
155
156 // clean up.
157 clean_quit_prep();
158 driver_close(drvinst, drvid);
159 output_buffer_free();
160
161 return 0;
162}
163
164void clean_quit_prep (void) {
165 close(g_listen_socket);
166 sources_free();
167 streams_free();
168 clients_free();
169}
170
171void clean_quit (void) {
172 clean_quit_prep();
173// driver_close(drvinst, drvid);
174// output_buffer_free();
175 exit(0);
176}
177
178//ll
Note: See TracBrowser for help on using the repository browser.