Mercurial > audlegacy-plugins
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 } |