diff options
Diffstat (limited to 'gst/siren/common.c')
-rw-r--r-- | gst/siren/common.c | 96 |
1 files changed, 60 insertions, 36 deletions
diff --git a/gst/siren/common.c b/gst/siren/common.c index a85e6726f..b968c5b4e 100644 --- a/gst/siren/common.c +++ b/gst/siren/common.c @@ -28,10 +28,10 @@ float standard_deviation[64]; float deviation_inverse[64]; float region_power_table_boundary[63]; -int expected_bits_table[8] = {52, 47, 43, 37, 29, 22, 16, 0}; -int vector_dimension[8] = {2, 2, 2, 4, 4, 5, 5, 1}; -int number_of_vectors[8] = {10, 10, 10, 5, 5, 4, 4, 20}; -float dead_zone[8] = {0.3f, 0.33f, 0.36f, 0.39f, 0.42f, 0.45f, 0.5f, 0.5f}; +int expected_bits_table[8] = { 52, 47, 43, 37, 29, 22, 16, 0 }; +int vector_dimension[8] = { 2, 2, 2, 4, 4, 5, 5, 1 }; +int number_of_vectors[8] = { 10, 10, 10, 5, 5, 4, 4, 20 }; +float dead_zone[8] = { 0.3f, 0.33f, 0.36f, 0.39f, 0.42f, 0.45f, 0.5f, 0.5f }; int max_bin[8] = { 13, @@ -41,7 +41,8 @@ int max_bin[8] = { 3, 2, 1, - 1}; + 1 +}; float step_size[8] = { 0.3536f, @@ -51,7 +52,8 @@ float step_size[8] = { 1.4141999f, 2.0f, 2.8283999f, - 2.8283999f}; + 2.8283999f +}; float step_size_inverse[8]; @@ -62,7 +64,9 @@ static int siren_initialized = 0; */ #define STEPSIZE 0.3010299957 -void siren_init() { +void +siren_init () +{ int i; float region_power; @@ -70,36 +74,39 @@ void siren_init() { return; region_size = 20; - region_size_inverse = 1.0f/region_size; + region_size_inverse = 1.0f / region_size; for (i = 0; i < 64; i++) { - region_power = (float) pow(10, (i-24) * STEPSIZE); - standard_deviation[i] = (float) sqrt(region_power); + region_power = (float) pow (10, (i - 24) * STEPSIZE); + standard_deviation[i] = (float) sqrt (region_power); deviation_inverse[i] = (float) 1.0 / standard_deviation[i]; } for (i = 0; i < 63; i++) - region_power_table_boundary[i] = (float) pow(10, (i-24 + 0.5) * STEPSIZE); + region_power_table_boundary[i] = + (float) pow (10, (i - 24 + 0.5) * STEPSIZE); for (i = 0; i < 8; i++) step_size_inverse[i] = (float) 1.0 / step_size[i]; - siren_dct4_init(); - siren_rmlt_init(); + siren_dct4_init (); + siren_rmlt_init (); siren_initialized = 1; } -int categorize_regions(int number_of_regions, int number_of_available_bits, int *absolute_region_power_index, int *power_categories, int *category_balance) { +int +categorize_regions (int number_of_regions, int number_of_available_bits, + int *absolute_region_power_index, int *power_categories, + int *category_balance) +{ int region, delta, i, temp; int expected_number_of_code_bits; int min, max; int offset, num_rate_control_possibilities, - raw_value, - raw_max_idx = 0, - raw_min_idx = 0; + raw_value, raw_max_idx = 0, raw_min_idx = 0; int max_rate_categories[28]; int min_rate_categories[28]; int temp_category_balances[64]; @@ -108,12 +115,14 @@ int categorize_regions(int number_of_regions, int number_of_available_bits, int if (number_of_regions == 14) { num_rate_control_possibilities = 16; - if ( number_of_available_bits > 320) - number_of_available_bits = ((number_of_available_bits - 320) * 5/8) + 320; + if (number_of_available_bits > 320) + number_of_available_bits = + ((number_of_available_bits - 320) * 5 / 8) + 320; } else { num_rate_control_possibilities = 32; - if (number_of_regions == 28 && number_of_available_bits > 640) - number_of_available_bits = ((number_of_available_bits - 640) * 5/8) + 640; + if (number_of_regions == 28 && number_of_available_bits > 640) + number_of_available_bits = + ((number_of_available_bits - 640) * 5 / 8) + 640; } offset = -32; @@ -130,30 +139,34 @@ int categorize_regions(int number_of_regions, int number_of_available_bits, int expected_number_of_code_bits += expected_bits_table[i]; } - if (expected_number_of_code_bits >= number_of_available_bits-32) + if (expected_number_of_code_bits >= number_of_available_bits - 32) offset += delta; } expected_number_of_code_bits = 0; - for (region = 0; region < number_of_regions; region++) { + for (region = 0; region < number_of_regions; region++) { i = (offset - absolute_region_power_index[region]) >> 1; if (i > 7) i = 7; else if (i < 0) i = 0; - max_rate_categories[region] = min_rate_categories[region] = power_categories[region] = i; + max_rate_categories[region] = min_rate_categories[region] = + power_categories[region] = i; expected_number_of_code_bits += expected_bits_table[i]; } min = max = expected_number_of_code_bits; - min_rate_ptr = max_rate_ptr = temp_category_balances + num_rate_control_possibilities; - for (i = 0; i < num_rate_control_possibilities -1; i++) { + min_rate_ptr = max_rate_ptr = + temp_category_balances + num_rate_control_possibilities; + for (i = 0; i < num_rate_control_possibilities - 1; i++) { if (min + max > number_of_available_bits * 2) { raw_value = -99; - for (region = number_of_regions-1; region >= 0; region--) { + for (region = number_of_regions - 1; region >= 0; region--) { if (min_rate_categories[region] < 7) { - temp = offset - absolute_region_power_index[region] - 2*min_rate_categories[region]; + temp = + offset - absolute_region_power_index[region] - + 2 * min_rate_categories[region]; if (temp > raw_value) { raw_value = temp; raw_min_idx = region; @@ -161,13 +174,17 @@ int categorize_regions(int number_of_regions, int number_of_available_bits, int } } *min_rate_ptr++ = raw_min_idx; - min += expected_bits_table[min_rate_categories[raw_min_idx] + 1] - expected_bits_table[min_rate_categories[raw_min_idx]]; + min += + expected_bits_table[min_rate_categories[raw_min_idx] + 1] - + expected_bits_table[min_rate_categories[raw_min_idx]]; min_rate_categories[raw_min_idx]++; } else { raw_value = 99; for (region = 0; region < number_of_regions; region++) { - if (max_rate_categories[region] > 0 ) { - temp = offset - absolute_region_power_index[region] - 2*max_rate_categories[region]; + if (max_rate_categories[region] > 0) { + temp = + offset - absolute_region_power_index[region] - + 2 * max_rate_categories[region]; if (temp < raw_value) { raw_value = temp; raw_max_idx = region; @@ -176,7 +193,9 @@ int categorize_regions(int number_of_regions, int number_of_available_bits, int } *--max_rate_ptr = raw_max_idx; - max += expected_bits_table[max_rate_categories[raw_max_idx] - 1] - expected_bits_table[max_rate_categories[raw_max_idx]]; + max += + expected_bits_table[max_rate_categories[raw_max_idx] - 1] - + expected_bits_table[max_rate_categories[raw_max_idx]]; max_rate_categories[raw_max_idx]--; } } @@ -184,7 +203,7 @@ int categorize_regions(int number_of_regions, int number_of_available_bits, int for (region = 0; region < number_of_regions; region++) power_categories[region] = max_rate_categories[region]; - for (i = 0; i < num_rate_control_possibilities-1; i++) + for (i = 0; i < num_rate_control_possibilities - 1; i++) category_balance[i] = *max_rate_ptr++; @@ -201,7 +220,13 @@ int categorize_regions(int number_of_regions, int number_of_available_bits, int 3 : sample rate is variable and there is one for each frame */ -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 ) { +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) +{ switch (flag) { case 0: *number_of_coefs = 320; @@ -499,7 +524,6 @@ int GetSirenCodecInfo(int flag, int sample_rate, int *number_of_coefs, int *samp return 6; } - *bits_per_frame = sample_rate / 50; + *bits_per_frame = sample_rate / 50; return 0; } - |