comparison src/icecast/icecast.c @ 2873:31d6c44ffef2

most of encoder backends require GINT16_NE; this is a temporary solution, it works for Icecast, but breaks FileWriter's WAV output on Big Endian systems; also, 8-bit data may be handled wrong; needs to be re-written with libSAD usage
author Andrew O. Shadoura <bugzilla@tut.by>
date Wed, 16 Jul 2008 23:09:38 +0300
parents b61d7e3837a5
children 9d06c6456f98
comparison
equal deleted inserted replaced
2835:f1b6f1b2cdb3 2873:31d6c44ffef2
339 { 339 {
340 guint8 *ptr1 = buffer; 340 guint8 *ptr1 = buffer;
341 gint8 *ptr2 = buffer; 341 gint8 *ptr2 = buffer;
342 342
343 for (i = 0; i < length; i++) 343 for (i = 0; i < length; i++)
344 *(ptr1++) = *(ptr2++) ^ 128; 344 *(ptr1++) = *(ptr2++) + 128;
345 } 345 }
346 if (input.format == FMT_S16_BE) 346 if (input.format == FMT_S16_BE)
347 { 347 {
348 gint16 *ptr = buffer; 348 gint16 *ptr = buffer;
349 349
350 for (i = 0; i < length >> 1; i++, ptr++) 350 for (i = 0; i < length >> 1; i++, ptr++)
351 *ptr = GUINT16_SWAP_LE_BE(*ptr); 351 *ptr = GINT16_FROM_BE(*ptr);
352 } 352 }
353 if (input.format == FMT_S16_NE) 353 if (input.format == FMT_S16_LE)
354 { 354 {
355 gint16 *ptr = buffer; 355 gint16 *ptr = buffer;
356 356
357 for (i = 0; i < length >> 1; i++, ptr++) 357 for (i = 0; i < length >> 1; i++, ptr++)
358 *ptr = GINT16_TO_LE(*ptr); 358 *ptr = GINT16_FROM_LE(*ptr);
359 } 359 }
360 if (input.format == FMT_U16_BE) 360 if (input.format == FMT_U16_BE)
361 { 361 {
362 gint16 *ptr1 = buffer; 362 gint16 *ptr1 = buffer;
363 guint16 *ptr2 = buffer; 363 guint16 *ptr2 = buffer;
364 364
365 for (i = 0; i < length >> 1; i++, ptr2++) 365 for (i = 0; i < length >> 1; i++, ptr2++)
366 *(ptr1++) = GINT16_TO_LE(GUINT16_FROM_BE(*ptr2) ^ 32768); 366 *(ptr1++) = GUINT16_FROM_BE(*ptr2) - 32768;
367 } 367 }
368 if (input.format == FMT_U16_LE) 368 if (input.format == FMT_U16_LE)
369 { 369 {
370 gint16 *ptr1 = buffer; 370 gint16 *ptr1 = buffer;
371 guint16 *ptr2 = buffer; 371 guint16 *ptr2 = buffer;
372 372
373 for (i = 0; i < length >> 1; i++, ptr2++) 373 for (i = 0; i < length >> 1; i++, ptr2++)
374 *(ptr1++) = GINT16_TO_LE(GUINT16_FROM_LE(*ptr2) ^ 32768); 374 *(ptr1++) = GUINT16_FROM_LE(*ptr2) - 32768;
375 } 375 }
376 if (input.format == FMT_U16_NE) 376 if (input.format == FMT_U16_NE)
377 { 377 {
378 gint16 *ptr1 = buffer; 378 gint16 *ptr1 = buffer;
379 guint16 *ptr2 = buffer; 379 guint16 *ptr2 = buffer;
380 380
381 for (i = 0; i < length >> 1; i++, ptr2++) 381 for (i = 0; i < length >> 1; i++, ptr2++)
382 *(ptr1++) = GINT16_TO_LE((*ptr2) ^ 32768); 382 *(ptr1++) = (*ptr2) - 32768;
383 } 383 }
384 } 384 }
385 385
386 static void ice_write(void *ptr, gint length) 386 static void ice_write(void *ptr, gint length)
387 { 387 {
388 if (input.format == FMT_S8 || input.format == FMT_S16_BE || 388 if (input.format == FMT_S8 || input.format == FMT_U16_NE ||
389 input.format == FMT_U16_LE || input.format == FMT_U16_BE || 389 input.format == FMT_U16_LE || input.format == FMT_U16_BE)
390 input.format == FMT_U16_NE)
391 convert_buffer(ptr, length); 390 convert_buffer(ptr, length);
392 #ifdef WORDS_BIGENDIAN 391 #ifdef WORDS_BIGENDIAN
393 if (input.format == FMT_S16_NE) 392 if (input.format == FMT_S16_LE)
393 convert_buffer(ptr, length);
394 #else
395 if (input.format == FMT_S16_BE)
394 convert_buffer(ptr, length); 396 convert_buffer(ptr, length);
395 #endif 397 #endif
396 398
397 plugin.write(ptr, length); 399 plugin.write(ptr, length);
398 } 400 }