# HG changeset patch # User Andrew O. Shadoura # Date 1216238978 -10800 # Node ID 31d6c44ffef2a8a5f5097bee267eaa266f2767e9 # Parent f1b6f1b2cdb3a86fbe00f13c307efc9d06ff161c 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 diff -r f1b6f1b2cdb3 -r 31d6c44ffef2 src/filewriter/filewriter.c --- a/src/filewriter/filewriter.c Mon Jul 14 03:35:13 2008 +0300 +++ b/src/filewriter/filewriter.c Wed Jul 16 23:09:38 2008 +0300 @@ -276,21 +276,21 @@ gint8 *ptr2 = buffer; for (i = 0; i < length; i++) - *(ptr1++) = *(ptr2++) ^ 128; + *(ptr1++) = *(ptr2++) + 128; } if (input.format == FMT_S16_BE) { gint16 *ptr = buffer; for (i = 0; i < length >> 1; i++, ptr++) - *ptr = GUINT16_SWAP_LE_BE(*ptr); + *ptr = GINT16_FROM_BE(*ptr); } - if (input.format == FMT_S16_NE) + if (input.format == FMT_S16_LE) { gint16 *ptr = buffer; for (i = 0; i < length >> 1; i++, ptr++) - *ptr = GINT16_TO_LE(*ptr); + *ptr = GINT16_FROM_LE(*ptr); } if (input.format == FMT_U16_BE) { @@ -298,7 +298,7 @@ guint16 *ptr2 = buffer; for (i = 0; i < length >> 1; i++, ptr2++) - *(ptr1++) = GINT16_TO_LE(GUINT16_FROM_BE(*ptr2) ^ 32768); + *(ptr1++) = GUINT16_FROM_BE(*ptr2) - 32768; } if (input.format == FMT_U16_LE) { @@ -306,7 +306,7 @@ guint16 *ptr2 = buffer; for (i = 0; i < length >> 1; i++, ptr2++) - *(ptr1++) = GINT16_TO_LE(GUINT16_FROM_LE(*ptr2) ^ 32768); + *(ptr1++) = GUINT16_FROM_LE(*ptr2) - 32768; } if (input.format == FMT_U16_NE) { @@ -314,18 +314,20 @@ guint16 *ptr2 = buffer; for (i = 0; i < length >> 1; i++, ptr2++) - *(ptr1++) = GINT16_TO_LE((*ptr2) ^ 32768); + *(ptr1++) = (*ptr2) - 32768; } } static void file_write(void *ptr, gint length) { - if (input.format == FMT_S8 || input.format == FMT_S16_BE || - input.format == FMT_U16_LE || input.format == FMT_U16_BE || - input.format == FMT_U16_NE) + if (input.format == FMT_S8 || input.format == FMT_U16_NE || + input.format == FMT_U16_LE || input.format == FMT_U16_BE) convert_buffer(ptr, length); #ifdef WORDS_BIGENDIAN - if (input.format == FMT_S16_NE) + if (input.format == FMT_S16_LE) + convert_buffer(ptr, length); +#else + if (input.format == FMT_S16_BE) convert_buffer(ptr, length); #endif diff -r f1b6f1b2cdb3 -r 31d6c44ffef2 src/filewriter/filewriter.h --- a/src/filewriter/filewriter.h Mon Jul 14 03:35:13 2008 +0300 +++ b/src/filewriter/filewriter.h Wed Jul 16 23:09:38 2008 +0300 @@ -65,6 +65,7 @@ gint (*free)(void); gint (*playing)(void); gint (*get_written_time)(void); + AFormat format_required; }; #endif diff -r f1b6f1b2cdb3 -r 31d6c44ffef2 src/filewriter/flac.c --- a/src/filewriter/flac.c Mon Jul 14 03:35:13 2008 +0300 +++ b/src/filewriter/flac.c Wed Jul 16 23:09:38 2008 +0300 @@ -44,7 +44,8 @@ flac_close, flac_free, flac_playing, - flac_get_written_time + flac_get_written_time, + FMT_S16_NE }; static FLAC__StreamEncoder *flac_encoder; diff -r f1b6f1b2cdb3 -r 31d6c44ffef2 src/filewriter/mp3.c --- a/src/filewriter/mp3.c Mon Jul 14 03:35:13 2008 +0300 +++ b/src/filewriter/mp3.c Wed Jul 16 23:09:38 2008 +0300 @@ -50,7 +50,8 @@ mp3_close, mp3_free, mp3_playing, - mp3_get_written_time + mp3_get_written_time, + FMT_S16_NE }; static GtkWidget *configure_win = NULL; diff -r f1b6f1b2cdb3 -r 31d6c44ffef2 src/filewriter/vorbis.c --- a/src/filewriter/vorbis.c Mon Jul 14 03:35:13 2008 +0300 +++ b/src/filewriter/vorbis.c Wed Jul 16 23:09:38 2008 +0300 @@ -47,7 +47,8 @@ vorbis_close, vorbis_free, vorbis_playing, - vorbis_get_written_time + vorbis_get_written_time, + FMT_S16_NE }; static float v_base_quality = 0.5; diff -r f1b6f1b2cdb3 -r 31d6c44ffef2 src/filewriter/wav.c --- a/src/filewriter/wav.c Mon Jul 14 03:35:13 2008 +0300 +++ b/src/filewriter/wav.c Wed Jul 16 23:09:38 2008 +0300 @@ -40,7 +40,8 @@ wav_close, wav_free, wav_playing, - wav_get_written_time + wav_get_written_time, + FMT_S16_LE }; diff -r f1b6f1b2cdb3 -r 31d6c44ffef2 src/icecast/icecast.c --- a/src/icecast/icecast.c Mon Jul 14 03:35:13 2008 +0300 +++ b/src/icecast/icecast.c Wed Jul 16 23:09:38 2008 +0300 @@ -341,21 +341,21 @@ gint8 *ptr2 = buffer; for (i = 0; i < length; i++) - *(ptr1++) = *(ptr2++) ^ 128; + *(ptr1++) = *(ptr2++) + 128; } if (input.format == FMT_S16_BE) { gint16 *ptr = buffer; for (i = 0; i < length >> 1; i++, ptr++) - *ptr = GUINT16_SWAP_LE_BE(*ptr); + *ptr = GINT16_FROM_BE(*ptr); } - if (input.format == FMT_S16_NE) + if (input.format == FMT_S16_LE) { gint16 *ptr = buffer; for (i = 0; i < length >> 1; i++, ptr++) - *ptr = GINT16_TO_LE(*ptr); + *ptr = GINT16_FROM_LE(*ptr); } if (input.format == FMT_U16_BE) { @@ -363,7 +363,7 @@ guint16 *ptr2 = buffer; for (i = 0; i < length >> 1; i++, ptr2++) - *(ptr1++) = GINT16_TO_LE(GUINT16_FROM_BE(*ptr2) ^ 32768); + *(ptr1++) = GUINT16_FROM_BE(*ptr2) - 32768; } if (input.format == FMT_U16_LE) { @@ -371,7 +371,7 @@ guint16 *ptr2 = buffer; for (i = 0; i < length >> 1; i++, ptr2++) - *(ptr1++) = GINT16_TO_LE(GUINT16_FROM_LE(*ptr2) ^ 32768); + *(ptr1++) = GUINT16_FROM_LE(*ptr2) - 32768; } if (input.format == FMT_U16_NE) { @@ -379,18 +379,20 @@ guint16 *ptr2 = buffer; for (i = 0; i < length >> 1; i++, ptr2++) - *(ptr1++) = GINT16_TO_LE((*ptr2) ^ 32768); + *(ptr1++) = (*ptr2) - 32768; } } static void ice_write(void *ptr, gint length) { - if (input.format == FMT_S8 || input.format == FMT_S16_BE || - input.format == FMT_U16_LE || input.format == FMT_U16_BE || - input.format == FMT_U16_NE) + if (input.format == FMT_S8 || input.format == FMT_U16_NE || + input.format == FMT_U16_LE || input.format == FMT_U16_BE) convert_buffer(ptr, length); #ifdef WORDS_BIGENDIAN - if (input.format == FMT_S16_NE) + if (input.format == FMT_S16_LE) + convert_buffer(ptr, length); +#else + if (input.format == FMT_S16_BE) convert_buffer(ptr, length); #endif