1 /*********************************************************************** 2 ** 3 ** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C 4 ** > Software Release 2.1 (2008-06) 5 ** (Simple repackaging; no change from 2005-05 Release 2.0 code) 6 ** 7 ** � 2004 Polycom, Inc. 8 ** 9 ** All rights reserved. 10 ** 11 ***********************************************************************/ 12 13 #include <stdio.h> 14 #include <math.h> 15 #include <stdlib.h> 16 #include "typedef.h" 17 #include "basop32.h" 18 19 #define PI 3.141592653589793238462 20 21 #define MAX_DCT_LENGTH 640 22 #define DCT_LENGTH 320 23 #define DCT_LENGTH_DIV_2 160 24 #define DCT_LENGTH_DIV_4 80 25 #define DCT_LENGTH_DIV_8 40 26 #define DCT_LENGTH_DIV_16 20 27 #define DCT_LENGTH_DIV_32 10 28 #define DCT_LENGTH_DIV_64 5 29 30 31 #define MAX(a,b) (a > b ? a : b) 32 #define MIN(a,b) (a < b ? a : b) 33 34 #define NUM_CATEGORIES 8 35 #define NUM_CATEGORIZATION_CONTROL_BITS 4 36 #define NUM_CATEGORIZATION_CONTROL_POSSIBILITIES 16 37 #define CORE_SIZE 10 38 #define DCT_LENGTH_LOG 6 39 #define MAX_DCT_LENGTH_LOG 7 40 41 /* region_size = (BLOCK_SIZE * 0.875)/NUM_REGIONS; */ 42 #define NUMBER_OF_REGIONS 14 43 #define MAX_NUMBER_OF_REGIONS 28 44 #define REGION_SIZE 20 45 #define NUMBER_OF_VALID_COEFS (NUMBER_OF_REGIONS * REGION_SIZE) 46 #define MAX_NUMBER_OF_VALID_COEFS (MAX_NUMBER_OF_REGIONS * REGION_SIZE) 47 48 #define REGION_POWER_TABLE_SIZE 64 49 #define REGION_POWER_TABLE_NUM_NEGATIVES 24 50 51 #define MAX_NUM_CATEGORIZATION_CONTROL_BITS 5 52 #define MAX_NUM_CATEGORIZATION_CONTROL_POSSIBILITIES 32 53 54 #define ENCODER_SCALE_FACTOR 18318.0 55 56 /* The MLT output is incorrectly scaled by the factor 57 product of ENCODER_SCALE_FACTOR and sqrt(160.) 58 This is now (9/30/96) 1.0/2^(4.5) or 1/22.627. 59 In the current implementation this 60 must be an integer power of sqrt(2). The 61 integer power is ESF_ADJUSTMENT_TO_RMS_INDEX. 62 The -2 is to conform with the range defined in the spec. */ 63 64 65 #define ESF_ADJUSTMENT_TO_RMS_INDEX (9-2) 66 67 68 #define INTERMEDIATE_FILES_FLAG 0 69 70 /* Max bit rate is 48000 bits/sec. */ 71 #define MAX_BITS_PER_FRAME 960 72 73 74 /***************************************************************************/ 75 /* Type definitions */ 76 /***************************************************************************/ 77 typedef struct 78 { 79 Word16 code_bit_count; /* bit count of the current word */ 80 Word16 current_word; /* current word in the bitstream being processed */ 81 Word16 *code_word_ptr; /* pointer to the bitstream */ 82 Word16 number_of_bits_left; /* number of bits left in the current word */ 83 Word16 next_bit; /* next bit in the current word */ 84 }Bit_Obj; 85 86 typedef struct 87 { 88 Word16 seed0; 89 Word16 seed1; 90 Word16 seed2; 91 Word16 seed3; 92 }Rand_Obj; 93 94 /***************************************************************************/ 95 /* Function definitions */ 96 /***************************************************************************/ 97 extern Word16 compute_region_powers(Word16 *mlt_coefs, 98 Word16 mag_shift, 99 Word16 *drp_num_bits, 100 UWord16 *drp_code_bits, 101 Word16 *absolute_region_power_index, 102 Word16 number_of_regions); 103 104 void vector_quantize_mlts(Word16 number_of_available_bits, 105 Word16 number_of_regions, 106 Word16 num_categorization_control_possibilities, 107 Word16 *mlt_coefs, 108 Word16 *absolute_region_power_index, 109 Word16 *power_categories, 110 Word16 *category_balances, 111 Word16 *p_categorization_control, 112 Word16 *region_mlt_bit_counts, 113 UWord32 *region_mlt_bits); 114 115 Word16 vector_huffman(Word16 category, 116 Word16 power_index, 117 Word16 *raw_mlt_ptr, 118 UWord32 *word_ptr); 119 120 121 void adjust_abs_region_power_index(Word16 *absolute_region_power_index,Word16 *mlt_coefs,Word16 number_of_regions); 122 123 void bits_to_words(UWord32 *region_mlt_bits,Word16 *region_mlt_bit_counts, 124 Word16 *drp_num_bits,UWord16 *drp_code_bits,Word16 *out_words, 125 Word16 categorization_control, Word16 number_of_regions, 126 Word16 num_categorization_control_bits, Word16 number_of_bits_per_frame); 127 128 void encoder(Word16 number_of_available_bits, 129 Word16 number_of_regions, 130 Word16 *mlt_coefs, 131 Word16 mag_shift, 132 Word16 *out_words); 133 134 void decoder(Bit_Obj *bitobj, 135 Rand_Obj *randobj, 136 Word16 number_of_regions, 137 Word16 *decoder_mlt_coefs, 138 Word16 *p_mag_shift, 139 Word16 *p_old_mag_shift, 140 Word16 *old_decoder_mlt_coefs, 141 Word16 frame_error_flag); 142 143 Word16 samples_to_rmlt_coefs(Word16 *new_samples,Word16 *history,Word16 *coefs,Word16 dct_length); 144 void rmlt_coefs_to_samples(Word16 *coefs, 145 Word16 *old_samples, 146 Word16 *out_samples, 147 Word16 dct_length, 148 Word16 mag_shift); 149 150 Word16 index_to_array(Word16 index,Word16 *array,Word16 category); 151 void categorize(Word16 number_of_available_bits, 152 Word16 number_of_regions, 153 Word16 num_categorization_control_possibilities, 154 Word16 *rms_index, 155 Word16 *power_categories, 156 Word16 *category_balances); 157 158 Word16 calc_offset(Word16 *rms_index,Word16 number_of_regions,Word16 available_bits); 159 void compute_raw_pow_categories(Word16 *power_categories,Word16 *rms_index,Word16 number_of_regions,Word16 offset); 160 void comp_powercat_and_catbalance(Word16 *power_categories, 161 Word16 *category_balances, 162 Word16 *rms_index, 163 Word16 number_of_available_bits, 164 Word16 number_of_regions, 165 Word16 num_categorization_control_possibilities, 166 Word16 offset); 167 168 void dct_type_iv_a (Word16 *input,Word16 *output,Word16 dct_length); 169 void dct_type_iv_s(Word16 *input,Word16 *output,Word16 dct_length); 170 void decode_envelope(Bit_Obj *bitobj, 171 Word16 number_of_regions, 172 Word16 *decoder_region_standard_deviation, 173 Word16 *absolute_region_power_index, 174 Word16 *p_mag_shift); 175 176 void decode_vector_quantized_mlt_indices(Bit_Obj *bitobj, 177 Rand_Obj *randobj, 178 Word16 number_of_regions, 179 Word16 *decoder_region_standard_deviation, 180 Word16 *dedecoder_power_categories, 181 Word16 *dedecoder_mlt_coefs); 182 183 void rate_adjust_categories(Word16 categorization_control, 184 Word16 *decoder_power_categories, 185 Word16 *decoder_category_balances); 186 187 void get_next_bit(Bit_Obj *bitobj); 188 Word16 get_rand(Rand_Obj *randobj); 189 190 void test_4_frame_errors(Bit_Obj *bitobj, 191 Word16 number_of_regions, 192 Word16 num_categorization_control_possibilities, 193 Word16 *frame_error_flag, 194 Word16 categorization_control, 195 Word16 *absolute_region_power_index); 196 197 void error_handling(Word16 number_of_coefs, 198 Word16 number_of_valid_coefs, 199 Word16 *frame_error_flag, 200 Word16 *decoder_mlt_coefs, 201 Word16 *old_decoder_mlt_coefs, 202 Word16 *p_mag_shift, 203 Word16 *p_old_mag_shift); 204 205 206