Changeset 3538:a5ca10905545 in roaraudio for libroardsp
- Timestamp:
- 02/20/10 00:15:36 (14 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroardsp/channels.c
r3517 r3538 100 100 } 101 101 102 int roardsp_chanlist_init(char * list, int channels, int map) { 103 if ( channels == 0 ) 104 return 0; 105 106 if ( list == NULL ) 107 return -1; 108 109 if ( channels > ROAR_MAX_CHANNELS ) 110 return -1; 111 112 // test for common maps: 113 if ( channels == 1 ) { 114 list[0] = ROARDSP_CHAN_MONO; 115 return 0; 116 } 117 118 if ( channels == 2 ) { 119 list[0] = ROARDSP_CHAN_LEFT; 120 list[1] = ROARDSP_CHAN_RIGHT; 121 return 0; 122 } 123 124 // test for specific maps: 125 switch (map) { 126 case ROARDSP_CHANLIST_MAP_ROARAUDIO: 127 case ROARDSP_CHANLIST_MAP_FLAC: 128 if ( map == ROARDSP_CHANLIST_MAP_FLAC && channels > 6 ) { 129 // FLAC only has a fixed mapping for up to 6 channels. 130 return -1; 131 } 132 133 switch (channels) { 134 // FLAC or RoarAudio: 135 case 3: 136 list[0] = ROARDSP_CHAN_LEFT; 137 list[1] = ROARDSP_CHAN_RIGHT; 138 list[2] = ROARDSP_CHAN_CENTER; 139 break; 140 case 4: 141 list[0] = ROARDSP_CHAN_FRONT_LEFT; 142 list[1] = ROARDSP_CHAN_FRONT_RIGHT; 143 list[2] = ROARDSP_CHAN_BACK_LEFT; 144 list[3] = ROARDSP_CHAN_BACK_RIGHT; 145 break; 146 case 5: 147 list[0] = ROARDSP_CHAN_FRONT_LEFT; 148 list[1] = ROARDSP_CHAN_FRONT_RIGHT; 149 list[2] = ROARDSP_CHAN_CENTER; 150 list[3] = ROARDSP_CHAN_BACK_LEFT; 151 list[4] = ROARDSP_CHAN_BACK_RIGHT; 152 break; 153 case 6: 154 list[0] = ROARDSP_CHAN_FRONT_LEFT; 155 list[1] = ROARDSP_CHAN_FRONT_RIGHT; 156 list[2] = ROARDSP_CHAN_CENTER; 157 list[3] = ROARDSP_CHAN_LFE; 158 list[4] = ROARDSP_CHAN_BACK_LEFT; 159 list[5] = ROARDSP_CHAN_BACK_RIGHT; 160 break; 161 // RoarAudio: 162 case 7: 163 list[0] = ROARDSP_CHAN_FRONT_LEFT; 164 list[1] = ROARDSP_CHAN_FRONT_RIGHT; 165 list[2] = ROARDSP_CHAN_CENTER; 166 list[3] = ROARDSP_CHAN_LFE; 167 list[4] = ROARDSP_CHAN_SIDE_LEFT; 168 list[5] = ROARDSP_CHAN_SIDE_RIGHT; 169 list[6] = ROARDSP_CHAN_BACK_CENTER; 170 break; 171 case 8: 172 list[0] = ROARDSP_CHAN_FRONT_LEFT; 173 list[1] = ROARDSP_CHAN_FRONT_RIGHT; 174 list[2] = ROARDSP_CHAN_CENTER; 175 list[3] = ROARDSP_CHAN_LFE; 176 list[4] = ROARDSP_CHAN_SIDE_LEFT; 177 list[5] = ROARDSP_CHAN_SIDE_RIGHT; 178 list[6] = ROARDSP_CHAN_BACK_LEFT; 179 list[7] = ROARDSP_CHAN_BACK_RIGHT; 180 break; 181 default: 182 return -1; 183 break; 184 } 185 break; 186 case ROARDSP_CHANLIST_MAP_VORBIS: 187 switch (channels) { 188 case 3: 189 list[0] = ROARDSP_CHAN_LEFT; 190 list[1] = ROARDSP_CHAN_CENTER; 191 list[2] = ROARDSP_CHAN_RIGHT; 192 break; 193 case 4: 194 list[0] = ROARDSP_CHAN_FRONT_LEFT; 195 list[1] = ROARDSP_CHAN_FRONT_RIGHT; 196 list[2] = ROARDSP_CHAN_BACK_LEFT; 197 list[3] = ROARDSP_CHAN_BACK_RIGHT; 198 break; 199 case 5: 200 list[0] = ROARDSP_CHAN_FRONT_LEFT; 201 list[1] = ROARDSP_CHAN_CENTER; 202 list[2] = ROARDSP_CHAN_FRONT_RIGHT; 203 list[3] = ROARDSP_CHAN_BACK_LEFT; 204 list[4] = ROARDSP_CHAN_BACK_RIGHT; 205 break; 206 case 6: 207 list[0] = ROARDSP_CHAN_FRONT_LEFT; 208 list[1] = ROARDSP_CHAN_CENTER; 209 list[2] = ROARDSP_CHAN_FRONT_RIGHT; 210 list[3] = ROARDSP_CHAN_BACK_LEFT; 211 list[4] = ROARDSP_CHAN_BACK_RIGHT; 212 list[5] = ROARDSP_CHAN_LFE; 213 break; 214 case 7: 215 list[0] = ROARDSP_CHAN_FRONT_LEFT; 216 list[1] = ROARDSP_CHAN_CENTER; 217 list[2] = ROARDSP_CHAN_FRONT_RIGHT; 218 list[3] = ROARDSP_CHAN_SIDE_LEFT; 219 list[4] = ROARDSP_CHAN_SIDE_RIGHT; 220 list[5] = ROARDSP_CHAN_BACK_CENTER; 221 list[6] = ROARDSP_CHAN_LFE; 222 break; 223 case 8: 224 list[0] = ROARDSP_CHAN_FRONT_LEFT; 225 list[1] = ROARDSP_CHAN_CENTER; 226 list[2] = ROARDSP_CHAN_FRONT_RIGHT; 227 list[3] = ROARDSP_CHAN_SIDE_LEFT; 228 list[4] = ROARDSP_CHAN_SIDE_RIGHT; 229 list[5] = ROARDSP_CHAN_BACK_LEFT; 230 list[6] = ROARDSP_CHAN_BACK_RIGHT; 231 list[7] = ROARDSP_CHAN_LFE; 232 break; 233 default: 234 return -1; 235 break; 236 } 237 break; 238 case ROARDSP_CHANLIST_MAP_OSS: 239 switch (channels) { 240 case 8: 241 list[7] = ROARDSP_CHAN_BACK_RIGHT; 242 case 7: 243 list[6] = ROARDSP_CHAN_BACK_LEFT; 244 case 6: 245 list[5] = ROARDSP_CHAN_SIDE_RIGHT; 246 case 5: 247 list[4] = ROARDSP_CHAN_SIDE_LEFT; 248 case 4: 249 list[3] = ROARDSP_CHAN_LFE; 250 case 3: 251 list[2] = ROARDSP_CHAN_CENTER; 252 list[1] = ROARDSP_CHAN_RIGHT; 253 list[0] = ROARDSP_CHAN_LEFT; 254 break; 255 default: 256 return -1; 257 break; 258 } 259 break; 260 case ROARDSP_CHANLIST_MAP_ALSA: 261 // we guess: L,R,BL,BR,C,LFE,SL,SR (really, just guessing, see ALSA plugin of libao) 262 switch (channels) { 263 case 8: 264 list[7] = ROARDSP_CHAN_BACK_RIGHT; 265 case 7: 266 list[6] = ROARDSP_CHAN_BACK_LEFT; 267 case 6: 268 list[5] = ROARDSP_CHAN_LFE; 269 case 5: 270 list[4] = ROARDSP_CHAN_CENTER; 271 case 4: 272 list[3] = ROARDSP_CHAN_BACK_RIGHT; 273 case 3: 274 list[2] = ROARDSP_CHAN_BACK_LEFT; 275 list[1] = ROARDSP_CHAN_RIGHT; 276 list[0] = ROARDSP_CHAN_LEFT; 277 break; 278 default: 279 return -1; 280 break; 281 } 282 break; 283 case ROARDSP_CHANLIST_MAP_RIFF_WAVE: 284 // here we are again, guessing: L,R,C,LFE,BL,BR,CL,CR,BC,SL,SR 285 // strange, C, LFE on 4 channel file? 286 // return -1 to be sure.... 287 switch (channels) { 288 default: 289 return -1; 290 break; 291 } 292 break; 293 default: 294 return -1; 295 break; 296 } 297 298 return 0; 299 } 300 102 301 int roardsp_chanmap_calc(struct roardsp_chanmap * map, int what, int err_on_none) { 103 302 int a, b;
Note: See TracChangeset
for help on using the changeset viewer.