1 /* 2 * Siren Encoder/Decoder library 3 * 4 * @author: Youness Alaoui <kakaroto@kakaroto.homelinux.net> 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Library General Public 8 * License as published by the Free Software Foundation; either 9 * version 2 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Library General Public License for more details. 15 * 16 * You should have received a copy of the GNU Library General Public 17 * License along with this library; if not, write to the 18 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, 19 * Boston, MA 02110-1301, USA. 20 */ 21 22 23 #ifndef _SIREN_COMMON_H 24 #define _SIREN_COMMON_H 25 26 typedef struct { 27 unsigned int RiffId; 28 unsigned int RiffSize; 29 } RiffHeader; 30 31 typedef struct { 32 unsigned short Format; 33 unsigned short Channels; 34 unsigned int SampleRate; 35 unsigned int ByteRate; 36 unsigned short BlockAlign; 37 unsigned short BitsPerSample; 38 } FmtChunk; 39 40 41 typedef struct { 42 FmtChunk fmt; 43 unsigned short ExtraSize; 44 unsigned short DctLength; 45 } SirenFmtChunk; 46 47 typedef struct { 48 RiffHeader riff; 49 unsigned int WaveId; 50 51 unsigned int FmtId; 52 unsigned int FmtSize; 53 54 SirenFmtChunk fmt; 55 56 unsigned int FactId; 57 unsigned int FactSize; 58 unsigned int Samples; 59 60 unsigned int DataId; 61 unsigned int DataSize; 62 } SirenWavHeader; 63 64 typedef struct { 65 RiffHeader riff; 66 unsigned int WaveId; 67 68 unsigned int FmtId; 69 unsigned int FmtSize; 70 71 FmtChunk fmt; 72 73 unsigned int FactId; 74 unsigned int FactSize; 75 unsigned int Samples; 76 77 unsigned int DataId; 78 unsigned int DataSize; 79 } PCMWavHeader; 80 81 #define RIFF_ID 0x46464952 82 #define WAVE_ID 0x45564157 83 #define FMT__ID 0x20746d66 84 #define DATA_ID 0x61746164 85 #define FACT_ID 0x74636166 86 87 88 extern int region_size; 89 extern float region_size_inverse; 90 extern float standard_deviation[64]; 91 extern float deviation_inverse[64]; 92 extern float region_power_table_boundary[63]; 93 extern int expected_bits_table[8]; 94 extern int vector_dimension[8]; 95 extern int number_of_vectors[8]; 96 extern float dead_zone[8]; 97 extern int max_bin[8]; 98 extern float step_size[8]; 99 extern float step_size_inverse[8]; 100 101 102 103 extern void siren_init(void); 104 extern int categorize_regions(int number_of_regions, int number_of_available_bits, int *absolute_region_power_index, int *power_categories, int *category_balance); 105 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 ); 106 107 108 #ifdef __BIG_ENDIAN__ 109 110 #define POW_2_8 256 111 #define POW_2_16 65536 112 #define POW_2_24 16777216 113 114 #define IDX(val, i) ((unsigned int) ((unsigned char *) &val)[i]) 115 116 117 118 #define ME_FROM_LE16(val) ( (unsigned short) ( IDX(val, 0) + IDX(val, 1) * 256 )) 119 #define ME_FROM_LE32(val) ( (unsigned int) (IDX(val, 0) + IDX(val, 1) * 256 + \ 120 IDX(val, 2) * 65536 + IDX(val, 3) * 16777216)) 121 122 123 #define ME_TO_LE16(val) ( (unsigned short) ( \ 124 (((unsigned short)val % 256) & 0xff) << 8 | \ 125 ((((unsigned short)val / POW_2_8) % 256) & 0xff) )) 126 127 #define ME_TO_LE32(val) ( (unsigned int) ( \ 128 ((((unsigned int) val ) % 256) & 0xff) << 24 | \ 129 ((((unsigned int) val / POW_2_8 ) % 256) & 0xff) << 16| \ 130 ((((unsigned int) val / POW_2_16) % 256) & 0xff) << 8 | \ 131 ((((unsigned int) val / POW_2_24) % 256) & 0xff) )) 132 133 #else 134 135 #define ME_TO_LE16(val) ( (unsigned short) (val)) 136 #define ME_TO_LE32(val) ( (unsigned int) (val)) 137 #define ME_FROM_LE16(val) ( (unsigned short) (val)) 138 #define ME_FROM_LE32(val) ( (unsigned int) (val)) 139 140 141 #endif 142 143 144 145 #endif /* _SIREN_COMMON_H */ 146 147