summaryrefslogtreecommitdiff
path: root/third_party/g7221/common/defs.h
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/g7221/common/defs.h')
-rw-r--r--third_party/g7221/common/defs.h205
1 files changed, 205 insertions, 0 deletions
diff --git a/third_party/g7221/common/defs.h b/third_party/g7221/common/defs.h
new file mode 100644
index 00000000..2c4978e0
--- /dev/null
+++ b/third_party/g7221/common/defs.h
@@ -0,0 +1,205 @@
+/***********************************************************************
+**
+** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C
+** > Software Release 2.1 (2008-06)
+** (Simple repackaging; no change from 2005-05 Release 2.0 code)
+**
+** © 2004 Polycom, Inc.
+**
+** All rights reserved.
+**
+***********************************************************************/
+
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+#include "g7221/common/stl-files/typedef.h"
+#include "g7221/common/stl-files/basop32.h"
+
+#define PI 3.141592653589793238462
+
+#define MAX_DCT_LENGTH 640
+#define DCT_LENGTH 320
+#define DCT_LENGTH_DIV_2 160
+#define DCT_LENGTH_DIV_4 80
+#define DCT_LENGTH_DIV_8 40
+#define DCT_LENGTH_DIV_16 20
+#define DCT_LENGTH_DIV_32 10
+#define DCT_LENGTH_DIV_64 5
+
+
+#define MAX(a,b) (a > b ? a : b)
+#define MIN(a,b) (a < b ? a : b)
+
+#define NUM_CATEGORIES 8
+#define NUM_CATEGORIZATION_CONTROL_BITS 4
+#define NUM_CATEGORIZATION_CONTROL_POSSIBILITIES 16
+#define CORE_SIZE 10
+#define DCT_LENGTH_LOG 6
+#define MAX_DCT_LENGTH_LOG 7
+
+/* region_size = (BLOCK_SIZE * 0.875)/NUM_REGIONS; */
+#define NUMBER_OF_REGIONS 14
+#define MAX_NUMBER_OF_REGIONS 28
+#define REGION_SIZE 20
+#define NUMBER_OF_VALID_COEFS (NUMBER_OF_REGIONS * REGION_SIZE)
+#define MAX_NUMBER_OF_VALID_COEFS (MAX_NUMBER_OF_REGIONS * REGION_SIZE)
+
+#define REGION_POWER_TABLE_SIZE 64
+#define REGION_POWER_TABLE_NUM_NEGATIVES 24
+
+#define MAX_NUM_CATEGORIZATION_CONTROL_BITS 5
+#define MAX_NUM_CATEGORIZATION_CONTROL_POSSIBILITIES 32
+
+#define ENCODER_SCALE_FACTOR 18318.0
+
+/* The MLT output is incorrectly scaled by the factor
+ product of ENCODER_SCALE_FACTOR and sqrt(160.)
+ This is now (9/30/96) 1.0/2^(4.5) or 1/22.627.
+ In the current implementation this
+ must be an integer power of sqrt(2). The
+ integer power is ESF_ADJUSTMENT_TO_RMS_INDEX.
+ The -2 is to conform with the range defined in the spec. */
+
+
+#define ESF_ADJUSTMENT_TO_RMS_INDEX (9-2)
+
+
+#define INTERMEDIATE_FILES_FLAG 0
+
+/* Max bit rate is 48000 bits/sec. */
+#define MAX_BITS_PER_FRAME 960
+
+
+/***************************************************************************/
+/* Type definitions */
+/***************************************************************************/
+typedef struct
+{
+ Word16 code_bit_count; /* bit count of the current word */
+ Word16 current_word; /* current word in the bitstream being processed */
+ Word16 *code_word_ptr; /* pointer to the bitstream */
+ Word16 number_of_bits_left; /* number of bits left in the current word */
+ Word16 next_bit; /* next bit in the current word */
+}Bit_Obj;
+
+typedef struct
+{
+ Word16 seed0;
+ Word16 seed1;
+ Word16 seed2;
+ Word16 seed3;
+}Rand_Obj;
+
+/***************************************************************************/
+/* Function definitions */
+/***************************************************************************/
+extern Word16 compute_region_powers(Word16 *mlt_coefs,
+ Word16 mag_shift,
+ Word16 *drp_num_bits,
+ UWord16 *drp_code_bits,
+ Word16 *absolute_region_power_index,
+ Word16 number_of_regions);
+
+void vector_quantize_mlts(Word16 number_of_available_bits,
+ Word16 number_of_regions,
+ Word16 num_categorization_control_possibilities,
+ Word16 *mlt_coefs,
+ Word16 *absolute_region_power_index,
+ Word16 *power_categories,
+ Word16 *category_balances,
+ Word16 *p_categorization_control,
+ Word16 *region_mlt_bit_counts,
+ UWord32 *region_mlt_bits);
+
+Word16 vector_huffman(Word16 category,
+ Word16 power_index,
+ Word16 *raw_mlt_ptr,
+ UWord32 *word_ptr);
+
+
+void adjust_abs_region_power_index(Word16 *absolute_region_power_index,Word16 *mlt_coefs,Word16 number_of_regions);
+
+void bits_to_words(UWord32 *region_mlt_bits,Word16 *region_mlt_bit_counts,
+ Word16 *drp_num_bits,UWord16 *drp_code_bits,Word16 *out_words,
+ Word16 categorization_control, Word16 number_of_regions,
+ Word16 num_categorization_control_bits, Word16 number_of_bits_per_frame);
+
+void encoder(Word16 number_of_available_bits,
+ Word16 number_of_regions,
+ Word16 *mlt_coefs,
+ Word16 mag_shift,
+ Word16 *out_words);
+
+void decoder(Bit_Obj *bitobj,
+ Rand_Obj *randobj,
+ Word16 number_of_regions,
+ Word16 *decoder_mlt_coefs,
+ Word16 *p_mag_shift,
+ Word16 *p_old_mag_shift,
+ Word16 *old_decoder_mlt_coefs,
+ Word16 frame_error_flag);
+
+Word16 samples_to_rmlt_coefs(Word16 *new_samples,Word16 *history,Word16 *coefs,Word16 dct_length);
+void rmlt_coefs_to_samples(Word16 *coefs,
+ Word16 *old_samples,
+ Word16 *out_samples,
+ Word16 dct_length,
+ Word16 mag_shift);
+
+Word16 index_to_array(Word16 index,Word16 *array,Word16 category);
+void categorize(Word16 number_of_available_bits,
+ Word16 number_of_regions,
+ Word16 num_categorization_control_possibilities,
+ Word16 *rms_index,
+ Word16 *power_categories,
+ Word16 *category_balances);
+
+Word16 calc_offset(Word16 *rms_index,Word16 number_of_regions,Word16 available_bits);
+void compute_raw_pow_categories(Word16 *power_categories,Word16 *rms_index,Word16 number_of_regions,Word16 offset);
+void comp_powercat_and_catbalance(Word16 *power_categories,
+ Word16 *category_balances,
+ Word16 *rms_index,
+ Word16 number_of_available_bits,
+ Word16 number_of_regions,
+ Word16 num_categorization_control_possibilities,
+ Word16 offset);
+
+void dct_type_iv_a (Word16 *input,Word16 *output,Word16 dct_length);
+void dct_type_iv_s(Word16 *input,Word16 *output,Word16 dct_length);
+void decode_envelope(Bit_Obj *bitobj,
+ Word16 number_of_regions,
+ Word16 *decoder_region_standard_deviation,
+ Word16 *absolute_region_power_index,
+ Word16 *p_mag_shift);
+
+void decode_vector_quantized_mlt_indices(Bit_Obj *bitobj,
+ Rand_Obj *randobj,
+ Word16 number_of_regions,
+ Word16 *decoder_region_standard_deviation,
+ Word16 *dedecoder_power_categories,
+ Word16 *dedecoder_mlt_coefs);
+
+void rate_adjust_categories(Word16 categorization_control,
+ Word16 *decoder_power_categories,
+ Word16 *decoder_category_balances);
+
+void get_next_bit(Bit_Obj *bitobj);
+Word16 get_rand(Rand_Obj *randobj);
+
+void test_4_frame_errors(Bit_Obj *bitobj,
+ Word16 number_of_regions,
+ Word16 num_categorization_control_possibilities,
+ Word16 *frame_error_flag,
+ Word16 categorization_control,
+ Word16 *absolute_region_power_index);
+
+void error_handling(Word16 number_of_coefs,
+ Word16 number_of_valid_coefs,
+ Word16 *frame_error_flag,
+ Word16 *decoder_mlt_coefs,
+ Word16 *old_decoder_mlt_coefs,
+ Word16 *p_mag_shift,
+ Word16 *p_old_mag_shift);
+
+