Changeset 1499:e5cd1b5eb592 in roaraudio
- Timestamp:
- 03/31/09 20:51:09 (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
roard/sources.c
r1186 r1499 44 44 45 45 int sources_add (char * driver, char * device, char * container, char * options, int primary) { 46 if ( strcmp(driver, "raw") == 0 ) { 46 if (0) { 47 #ifdef ROAR_HAVE_IO_POSIX 48 } else if ( strcmp(driver, "raw") == 0 ) { 47 49 return sources_add_raw(driver, device, container, options, primary); 48 50 } else if ( strcmp(driver, "wav") == 0 ) { 49 51 return sources_add_wav(driver, device, container, options, primary); 52 #endif 50 53 } else if ( strcmp(driver, "cf") == 0 ) { 51 54 return sources_add_cf(driver, device, container, options, primary); … … 57 60 } 58 61 62 #ifdef ROAR_HAVE_IO_POSIX 59 63 int sources_add_raw (char * driver, char * device, char * container, char * options, int primary) { 60 64 int stream; … … 87 91 return 0; 88 92 } 89 93 #endif 94 95 #ifdef ROAR_HAVE_IO_POSIX 90 96 int sources_add_wav (char * driver, char * device, char * container, char * options, int primary) { 91 97 int stream; … … 114 120 memcpy(&(s->info), g_sa, sizeof(struct roar_audio_info)); 115 121 116 117 118 122 memcpy(&(s->info.rate ), buf+24, 4); 123 memcpy(&(s->info.channels), buf+22, 2); 124 memcpy(&(s->info.bits ), buf+34, 2); 119 125 120 126 s->dir = ROAR_DIR_PLAY; … … 128 134 return 0; 129 135 } 136 #endif 137 138 #define _ret(x) roar_vio_close(vio); streams_delete(stream); return (x) 130 139 131 140 int sources_add_cf (char * driver, char * device, char * container, char * options, int primary) { 132 141 int stream; 133 int fh;134 142 int codec; 135 143 int len; 136 144 char buf[64]; 137 struct roar_stream * s; 138 145 struct roar_stream * s; 146 struct roar_vio_calls * vio; 147 148 if ( (stream = streams_new()) == -1 ) { 149 return -1; 150 } 151 152 streams_get(stream, (struct roar_stream_server **)&s); 153 154 memcpy(&(s->info), g_sa, sizeof(struct roar_audio_info)); 155 156 s->dir = ROAR_DIR_PLAY; 157 s->pos_rel_id = -1; 158 159 /* 139 160 if ( (fh = open(device, O_RDONLY, 0644)) == -1 ) { 140 161 return -1; 162 } 163 */ 164 165 vio = &(ROAR_STREAM_SERVER(s)->vio); 166 167 if ( roar_vio_open_file(vio, device, O_RDONLY, 0644) == -1 ) { 168 _ret(-1); 141 169 } 142 170 143 171 // TODO: finy out a better way of doing auto detetion without need for seek! 144 172 if ( options == NULL ) { 145 if ( (len = read(fh, buf, 64)) < 1 ) { 146 close(fh); 147 return -1; 148 } 149 150 if ( lseek(fh, -len, SEEK_CUR) == (off_t)-1 ) { 151 close(fh); 152 return -1; 173 if ( (len = roar_vio_read(vio, buf, 64)) < 1 ) { 174 _ret(-1); 175 } 176 177 if ( roar_vio_lseek(vio, -len, SEEK_CUR) == (off_t)-1 ) { 178 _ret(-1); 153 179 } 154 180 155 181 if ( (codec = roar_file_codecdetect(buf, len)) == -1 ) { 156 close(fh); 157 return -1; 182 _ret(-1); 158 183 } 159 184 } else { … … 162 187 163 188 if ( (codec = roar_str2codec(options)) == -1 ) { 164 close(fh); 165 return -1; 166 } 167 } 168 169 if ( (stream = streams_new()) == -1 ) { 170 close(fh); 171 return -1; 172 } 173 174 streams_get(stream, (struct roar_stream_server **)&s); 175 176 memcpy(&(s->info), g_sa, sizeof(struct roar_audio_info)); 177 178 s->dir = ROAR_DIR_PLAY; 179 s->pos_rel_id = -1; 189 _ret(-1); 190 } 191 } 192 180 193 s->info.codec = codec; 181 194 182 195 ROAR_STREAM_SERVER(s)->codec_orgi = codec; 183 196 184 streams_set_fh(stream, fh);197 streams_set_fh(stream, -1); 185 198 streams_set_socktype(stream, ROAR_SOCKET_TYPE_FILE); 186 199 … … 193 206 return 0; 194 207 } 208 209 #undef _ret 210 195 211 196 212 int sources_add_roar (char * driver, char * device, char * container, char * options, int primary) {
Note: See TracChangeset
for help on using the changeset viewer.