/* * Siren Encoder/Decoder library * * @author: Youness Alaoui <kakaroto@kakaroto.homelinux.net> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301, USA. */ #ifndef _SIREN_COMMON_H #define _SIREN_COMMON_H typedef struct { unsigned int RiffId; unsigned int RiffSize; } RiffHeader; typedef struct { unsigned short Format; unsigned short Channels; unsigned int SampleRate; unsigned int ByteRate; unsigned short BlockAlign; unsigned short BitsPerSample; } FmtChunk; typedef struct { FmtChunk fmt; unsigned short ExtraSize; unsigned short DctLength; } SirenFmtChunk; typedef struct { RiffHeader riff; unsigned int WaveId; unsigned int FmtId; unsigned int FmtSize; SirenFmtChunk fmt; unsigned int FactId; unsigned int FactSize; unsigned int Samples; unsigned int DataId; unsigned int DataSize; } SirenWavHeader; typedef struct { RiffHeader riff; unsigned int WaveId; unsigned int FmtId; unsigned int FmtSize; FmtChunk fmt; unsigned int FactId; unsigned int FactSize; unsigned int Samples; unsigned int DataId; unsigned int DataSize; } PCMWavHeader; #define RIFF_ID 0x46464952 #define WAVE_ID 0x45564157 #define FMT__ID 0x20746d66 #define DATA_ID 0x61746164 #define FACT_ID 0x74636166 extern int region_size; extern float region_size_inverse; extern float standard_deviation[64]; extern float deviation_inverse[64]; extern float region_power_table_boundary[63]; extern int expected_bits_table[8]; extern int vector_dimension[8]; extern int number_of_vectors[8]; extern float dead_zone[8]; extern int max_bin[8]; extern float step_size[8]; extern float step_size_inverse[8]; extern void siren_init(void); extern int categorize_regions(int number_of_regions, int number_of_available_bits, int *absolute_region_power_index, int *power_categories, int *category_balance); extern int GetSirenCodecInfo(int flag, int sample_rate, int *number_of_coefs, int *sample_rate_bits, int *rate_control_bits, int *rate_control_possibilities, int *checksum_bits, int *esf_adjustment, int *scale_factor, int *number_of_regions, int *sample_rate_code, int *bits_per_frame ); #ifdef __BIG_ENDIAN__ #define POW_2_8 256 #define POW_2_16 65536 #define POW_2_24 16777216 #define IDX(val, i) ((unsigned int) ((unsigned char *) &val)[i]) #define ME_FROM_LE16(val) ( (unsigned short) ( IDX(val, 0) + IDX(val, 1) * 256 )) #define ME_FROM_LE32(val) ( (unsigned int) (IDX(val, 0) + IDX(val, 1) * 256 + \ IDX(val, 2) * 65536 + IDX(val, 3) * 16777216)) #define ME_TO_LE16(val) ( (unsigned short) ( \ (((unsigned short)val % 256) & 0xff) << 8 | \ ((((unsigned short)val / POW_2_8) % 256) & 0xff) )) #define ME_TO_LE32(val) ( (unsigned int) ( \ ((((unsigned int) val ) % 256) & 0xff) << 24 | \ ((((unsigned int) val / POW_2_8 ) % 256) & 0xff) << 16| \ ((((unsigned int) val / POW_2_16) % 256) & 0xff) << 8 | \ ((((unsigned int) val / POW_2_24) % 256) & 0xff) )) #else #define ME_TO_LE16(val) ( (unsigned short) (val)) #define ME_TO_LE32(val) ( (unsigned int) (val)) #define ME_FROM_LE16(val) ( (unsigned short) (val)) #define ME_FROM_LE32(val) ( (unsigned int) (val)) #endif #endif /* _SIREN_COMMON_H */