aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2018-06-10 19:02:20 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2018-06-10 19:02:20 +0000
commit9947dc2a0fbe88503e22f45ba9be1a431184e80a (patch)
treef4e0df5cb15e791d60b23b54a710f3d4d608193a
parent5cbd77d071247c9d656eb400a2d50a6f0c75cede (diff)
parentb3226ce6f80c78946aa3190cec158fb9852272ea (diff)
downloadlibxaac-pie-r2-release.tar.gz
Change-Id: Ic41dd8d45a55d57083c9a434ccea941be36a891f
-rw-r--r--decoder/armv7/ixheaacd_complex_fft_p2.s70
-rw-r--r--decoder/armv7/ixheaacd_complex_ifft_p2.s70
-rw-r--r--decoder/armv7/ixheaacd_esbr_cos_sin_mod_loop2.s4
-rw-r--r--decoder/armv7/ixheaacd_function_selector_arm_non_neon.c3
-rw-r--r--decoder/armv7/ixheaacd_function_selector_armv7.c8
-rw-r--r--decoder/armv7/ixheaacd_mps_complex_fft_64_asm.s70
-rw-r--r--decoder/armv7/ixheaacd_qmf_dec_armv7.c11
-rw-r--r--decoder/armv7/ixheaacd_sbr_qmfanal32_winadds_eld.s6
-rw-r--r--decoder/armv7/ixheaacd_tns_ar_filter_fixed.s660
-rw-r--r--decoder/armv8/ixheaacd_apply_scale_factors.s8
-rw-r--r--decoder/armv8/ixheaacd_cos_sin_mod_loop2.s4
-rw-r--r--decoder/armv8/ixheaacd_function_selector_armv8.c8
-rw-r--r--decoder/armv8/ixheaacd_post_twiddle_overlap.s2242
-rw-r--r--decoder/armv8/ixheaacd_qmf_dec_armv8.c14
-rw-r--r--decoder/armv8/ixheaacd_shiftrountine_with_round.s8
-rw-r--r--decoder/armv8/ixheaacd_shiftrountine_with_round_eld.s8
-rw-r--r--decoder/drc_src/impd_apicmd_standards.h142
-rw-r--r--decoder/drc_src/impd_drc_api.c1133
-rw-r--r--decoder/drc_src/impd_drc_api_defs.h26
-rw-r--r--decoder/drc_src/impd_drc_api_struct_def.h185
-rw-r--r--decoder/drc_src/impd_drc_bitbuffer.c358
-rw-r--r--decoder/drc_src/impd_drc_bitbuffer.h38
-rw-r--r--decoder/drc_src/impd_drc_bitstream_dec_api.h67
-rw-r--r--decoder/drc_src/impd_drc_common.h318
-rw-r--r--decoder/drc_src/impd_drc_config_params.h41
-rw-r--r--decoder/drc_src/impd_drc_dec.c601
-rw-r--r--decoder/drc_src/impd_drc_dec.h53
-rw-r--r--decoder/drc_src/impd_drc_definitions.h18
-rw-r--r--decoder/drc_src/impd_drc_dynamic_payload.c2349
-rw-r--r--decoder/drc_src/impd_drc_eq.c2540
-rw-r--r--decoder/drc_src/impd_drc_eq.h202
-rw-r--r--decoder/drc_src/impd_drc_error_codes.h47
-rw-r--r--decoder/drc_src/impd_drc_extr_delta_coded_info.c124
-rw-r--r--decoder/drc_src/impd_drc_extr_delta_coded_info.h61
-rw-r--r--decoder/drc_src/impd_drc_fiilter_bank.c802
-rw-r--r--decoder/drc_src/impd_drc_filter_bank.c802
-rw-r--r--decoder/drc_src/impd_drc_filter_bank.h175
-rw-r--r--decoder/drc_src/impd_drc_gain_dec.c1337
-rw-r--r--decoder/drc_src/impd_drc_gain_dec.h93
-rw-r--r--decoder/drc_src/impd_drc_gain_decoder.c852
-rw-r--r--decoder/drc_src/impd_drc_gain_decoder.h133
-rw-r--r--decoder/drc_src/impd_drc_hashdefines.h11
-rw-r--r--decoder/drc_src/impd_drc_host_params.c285
-rw-r--r--decoder/drc_src/impd_drc_host_params.h11
-rw-r--r--decoder/drc_src/impd_drc_init.c1009
-rw-r--r--decoder/drc_src/impd_drc_interface.h155
-rw-r--r--decoder/drc_src/impd_drc_interface_decoder.c255
-rw-r--r--decoder/drc_src/impd_drc_interface_parser.c911
-rw-r--r--decoder/drc_src/impd_drc_loud_eq.c246
-rw-r--r--decoder/drc_src/impd_drc_loudness_control.c1680
-rw-r--r--decoder/drc_src/impd_drc_loudness_control.h98
-rw-r--r--decoder/drc_src/impd_drc_main_qmf_process.c377
-rw-r--r--decoder/drc_src/impd_drc_main_stft_process.c372
-rw-r--r--decoder/drc_src/impd_drc_main_td_process.c501
-rw-r--r--decoder/drc_src/impd_drc_main_td_qmf_process.c537
-rw-r--r--decoder/drc_src/impd_drc_multi_band.h44
-rw-r--r--decoder/drc_src/impd_drc_multiband.c254
-rw-r--r--decoder/drc_src/impd_drc_parametric_dec.c1849
-rw-r--r--decoder/drc_src/impd_drc_parser.h102
-rw-r--r--decoder/drc_src/impd_drc_parser_interface.h33
-rw-r--r--decoder/drc_src/impd_drc_peak_limiter.c184
-rw-r--r--decoder/drc_src/impd_drc_peak_limiter.h52
-rw-r--r--decoder/drc_src/impd_drc_peak_limiter_struct.h43
-rw-r--r--decoder/drc_src/impd_drc_process.c949
-rw-r--r--decoder/drc_src/impd_drc_process_audio.h83
-rw-r--r--decoder/drc_src/impd_drc_qmf_filter.h24
-rw-r--r--decoder/drc_src/impd_drc_rom.c2228
-rw-r--r--decoder/drc_src/impd_drc_rom.h98
-rw-r--r--decoder/drc_src/impd_drc_sel_proc_drc_set_sel.h175
-rw-r--r--decoder/drc_src/impd_drc_selection_process.c1928
-rw-r--r--decoder/drc_src/impd_drc_selection_process.h247
-rw-r--r--decoder/drc_src/impd_drc_selection_process_drcset_selection.c2722
-rw-r--r--decoder/drc_src/impd_drc_selection_process_init.c738
-rw-r--r--decoder/drc_src/impd_drc_shape_filter.c446
-rw-r--r--decoder/drc_src/impd_drc_static_payload.c4469
-rw-r--r--decoder/drc_src/impd_drc_struct.h1014
-rw-r--r--decoder/drc_src/impd_drc_tables.c142
-rw-r--r--decoder/drc_src/impd_drc_tables.h35
-rw-r--r--decoder/drc_src/impd_drc_uni_bitstream_dec_api.h69
-rw-r--r--decoder/drc_src/impd_drc_uni_common.h235
-rw-r--r--decoder/drc_src/impd_drc_uni_dec.h22
-rw-r--r--decoder/drc_src/impd_drc_uni_eq.h29
-rw-r--r--decoder/drc_src/impd_drc_uni_gain_dec.h124
-rw-r--r--decoder/drc_src/impd_drc_uni_interface.h134
-rw-r--r--decoder/drc_src/impd_drc_uni_loud_eq.h4
-rw-r--r--decoder/drc_src/impd_drc_uni_multi_band.h44
-rw-r--r--decoder/drc_src/impd_drc_uni_parser.h101
-rw-r--r--decoder/drc_src/impd_drc_uni_process_audio.h37
-rw-r--r--decoder/drc_src/impd_drc_uni_sel_proc_drc_set_sel.h145
-rw-r--r--decoder/drc_src/impd_drc_uni_sel_proc_init.h10
-rw-r--r--decoder/drc_src/impd_drc_uni_sel_proc_loudness_control.h75
-rw-r--r--decoder/drc_src/impd_drc_uni_shape_filter.h2
-rw-r--r--decoder/drc_src/impd_drc_uni_tables.h67
-rw-r--r--decoder/drc_src/impd_error_handler.h59
-rw-r--r--decoder/drc_src/impd_error_standards.h4
-rw-r--r--decoder/drc_src/impd_memory_standards.h107
-rw-r--r--decoder/drc_src/impd_parametric_drc_dec.h258
-rw-r--r--decoder/drc_src/impd_type_def.h124
-rw-r--r--decoder/generic/ixheaacd_function_selector_generic.c8
-rw-r--r--decoder/generic/ixheaacd_qmf_dec_generic.c14
-rw-r--r--decoder/ixheaacd_aac_config.h2
-rw-r--r--decoder/ixheaacd_aac_imdct.c12
-rw-r--r--decoder/ixheaacd_aac_tns.c6
-rw-r--r--decoder/ixheaacd_aacdecoder.c10
-rw-r--r--decoder/ixheaacd_acelp_decode.c3
-rw-r--r--decoder/ixheaacd_api.c73
-rw-r--r--decoder/ixheaacd_arith_dec.c27
-rw-r--r--decoder/ixheaacd_avq_dec.c6
-rw-r--r--decoder/ixheaacd_basic_ops32.h8
-rw-r--r--decoder/ixheaacd_basic_ops40.h15
-rw-r--r--decoder/ixheaacd_block.c1
-rw-r--r--decoder/ixheaacd_channel.c21
-rw-r--r--decoder/ixheaacd_channelinfo.h6
-rw-r--r--decoder/ixheaacd_common_initfuncs.c1
-rw-r--r--decoder/ixheaacd_config.h3
-rw-r--r--decoder/ixheaacd_create.c129
-rw-r--r--decoder/ixheaacd_decode_main.c360
-rw-r--r--decoder/ixheaacd_drc_freq_dec.c23
-rw-r--r--decoder/ixheaacd_env_calc.c14
-rw-r--r--decoder/ixheaacd_env_calc.h15
-rw-r--r--decoder/ixheaacd_env_extr.c25
-rw-r--r--decoder/ixheaacd_esbr_polyphase.c19
-rw-r--r--decoder/ixheaacd_ext_ch_ele.c20
-rw-r--r--decoder/ixheaacd_fft.c16
-rw-r--r--decoder/ixheaacd_freq_sca.c352
-rw-r--r--decoder/ixheaacd_fwd_alias_cnx.c32
-rw-r--r--decoder/ixheaacd_hbe_trans.c22
-rw-r--r--decoder/ixheaacd_headerdecode.c8
-rw-r--r--decoder/ixheaacd_huff_code_reorder.c28
-rw-r--r--decoder/ixheaacd_imdct.c10
-rw-r--r--decoder/ixheaacd_init_config.c68
-rw-r--r--decoder/ixheaacd_lpc.c47
-rw-r--r--decoder/ixheaacd_lpfuncs.c11
-rw-r--r--decoder/ixheaacd_main.h3
-rw-r--r--decoder/ixheaacd_mps_dec.c13
-rw-r--r--decoder/ixheaacd_mps_interface.h8
-rw-r--r--decoder/ixheaacd_mps_temp_process.c7
-rw-r--r--decoder/ixheaacd_process.c44
-rw-r--r--decoder/ixheaacd_qmf_dec.c1
-rw-r--r--decoder/ixheaacd_qmf_dec.h17
-rw-r--r--decoder/ixheaacd_qmf_poly.h4
-rw-r--r--decoder/ixheaacd_sbr_dec.c130
-rw-r--r--decoder/ixheaacd_sbr_dec.h73
-rw-r--r--decoder/ixheaacd_sbrdec_initfuncs.c10
-rw-r--r--decoder/ixheaacd_sbrdec_lpfuncs.c22
-rw-r--r--decoder/ixheaacd_sbrdecoder.c67
-rw-r--r--decoder/ixheaacd_sbrqmftrans.h10
-rw-r--r--decoder/ixheaacd_spectrum_dec.c7
-rw-r--r--decoder/ixheaacd_tns.h6
-rw-r--r--decoder/ixheaacd_type_def.h88
-rw-r--r--decoder/x86/ixheaacd_function_selector_x86.c8
-rw-r--r--decoder/x86_64/ixheaacd_function_selector_x86_64.c8
152 files changed, 21287 insertions, 22302 deletions
diff --git a/decoder/armv7/ixheaacd_complex_fft_p2.s b/decoder/armv7/ixheaacd_complex_fft_p2.s
index e427088..3845d87 100644
--- a/decoder/armv7/ixheaacd_complex_fft_p2.s
+++ b/decoder/armv7/ixheaacd_complex_fft_p2.s
@@ -50,21 +50,21 @@ FIRST_STAGE_R4:
ADD r0, r0, #4
CMP r0, lr, ASR #1
- ADD r4, r4, r6 @x0r = x0r + x2r@
- ADD r5, r5, r7 @x0i = x0i + x2i@
+ ADD r4, r4, r6 @x0r = x0r + x2r@
+ ADD r5, r5, r7 @x0i = x0i + x2i@
SUB r6, r4, r6, lsl#1 @x2r = x0r - (x2r << 1)@
SUB r7, r5, r7, lsl#1 @x2i = x0i - (x2i << 1)@
- ADD r8, r8, r10 @x1r = x1r + x3r@
- ADD r9, r9, r11 @x1i = x1i + x3i@
+ ADD r8, r8, r10 @x1r = x1r + x3r@
+ ADD r9, r9, r11 @x1i = x1i + x3i@
SUB r1, r8, r10, lsl#1 @x3r = x1r - (x3r << 1)@
SUB r11, r9, r11, lsl#1 @x3i = x1i - (x3i << 1)@
- ADD r4, r4, r8 @x0r = x0r + x1r@
- ADD r5, r5, r9 @x0i = x0i + x1i@
+ ADD r4, r4, r8 @x0r = x0r + x1r@
+ ADD r5, r5, r9 @x0i = x0i + x1i@
SUB r8, r4, r8, lsl#1 @x1r = x0r - (x1r << 1)@
SUB r9, r5, r9, lsl#1 @x1i = x0i - (x1i << 1)
- ADD r6, r6, r11 @x2r = x2r + x3i@
- SUB r7, r7, r1 @x2i = x2i - x3r@
+ ADD r6, r6, r11 @x2r = x2r + x3i@
+ SUB r7, r7, r1 @x2i = x2i - x3r@
SUB r10, r6, r11, lsl#1 @x3i = x2r - (x3i << 1)@
ADD r11, r7, r1, lsl#1 @x3r = x2i + (x3r << 1)@
@@ -108,23 +108,23 @@ LOOP_TRIVIAL_TWIDDLE:
@MOV r10,r10,ASR #1
@MOV r11,r11,ASR #1
- ADD r4, r4, r8 @x0r = x0r + x2r@
- ADD r5, r5, r9 @x0i = x0i + x2i@
+ ADD r4, r4, r8 @x0r = x0r + x2r@
+ ADD r5, r5, r9 @x0i = x0i + x2i@
SUB r8, r4, r8, lsl #1 @x2r = x0r - (x2r << 1)@
SUB r9, r5, r9, lsl #1 @x2i = x0i - (x2i << 1)@
- ADD r6, r6, r10 @x1r = x1r + x3r@
- ADD r7, r7, r11 @x1i = x1i + x3i@
+ ADD r6, r6, r10 @x1r = x1r + x3r@
+ ADD r7, r7, r11 @x1i = x1i + x3i@
SUB r2, r6, r10, lsl #1 @x3r = x1r - (x3r << 1)@
SUB r11, r7, r11, lsl #1 @x3i = x1i - (x3i << 1)@
- ADD r4, r4, r6 @x0r = x0r + x1r@
- ADD r5, r5, r7 @x0i = x0i + x1i@
+ ADD r4, r4, r6 @x0r = x0r + x1r@
+ ADD r5, r5, r7 @x0i = x0i + x1i@
@MOV r4,r4,ASR #1
@MOV r5,r5,ASR #1
SUB r6, r4, r6, lsl #1 @x1r = x0r - (x1r << 1)@
SUB r7, r5, r7, lsl #1 @x1i = x0i - (x1i << 1)
- ADD r8, r8, r11 @x2r = x2r + x3i@
- SUB r9, r9, r2 @x2i = x2i - x3r@
+ ADD r8, r8, r11 @x2r = x2r + x3i@
+ SUB r9, r9, r2 @x2i = x2i - x3r@
SUB r10, r8, r11, lsl#1 @x3i = x2r - (x3i << 1)@
ADD r11, r9, r2, lsl#1 @x3r = x2i + (x3r << 1)
@@ -241,23 +241,23 @@ RADIX4_BFLY:
ADD r4, r8, r4 @x0r = x0r + x2r@
- ADD r5, r9, r5 @x0i = x0i + x2i@
+ ADD r5, r9, r5 @x0i = x0i + x2i@
SUB r8, r4, r8, lsl#1 @x2r = x0r - (x2r << 1)@
SUB r9, r5, r9, lsl#1 @x2i = x0i - (x2i << 1)@
- ADD r6, r6, r10 @x1r = x1r + x3r@
- ADD r7, r7, r11 @x1i = x1i + x3i@
+ ADD r6, r6, r10 @x1r = x1r + x3r@
+ ADD r7, r7, r11 @x1i = x1i + x3i@
SUB r10, r6, r10, lsl#1 @x3r = x1r - (x3r << 1)@
SUB r11, r7, r11, lsl#1 @x3i = x1i - (x3i << 1)@
- ADD r4, r4, r6 @x0r = x0r + x1r@
- ADD r5, r5, r7 @x0i = x0i + x1i@
+ ADD r4, r4, r6 @x0r = x0r + x1r@
+ ADD r5, r5, r7 @x0i = x0i + x1i@
SUB r6, r4, r6, lsl#1 @x1r = x0r - (x1r << 1)@
SUB r7, r5, r7, lsl#1 @x1i = x0i - (x1i << 1)
STRD r4, [r12] @r4=x0r, r5=x0i
ADD r12, r12, r0
- ADD r8, r8, r11 @x2r = x2r + x3i@
- SUB r9, r9, r10 @x2i = x2i - x3r@
+ ADD r8, r8, r11 @x2r = x2r + x3i@
+ SUB r9, r9, r10 @x2i = x2i - x3r@
SUB r4, r8, r11, lsl#1 @x3i = x2r - (x3i << 1)@
ADD r5, r9, r10, lsl#1 @x3r = x2i + (x3r << 1)
@@ -504,20 +504,20 @@ RADIX4_BFLY_3:
ADD r5, r9, r5 @x0i = x0i + x2i@
SUB r8, r4, r8, lsl#1 @x2r = x0r - (x2r << 1)@
SUB r9, r5, r9, lsl#1 @x2i = x0i - (x2i << 1)@
- ADD r6, r6, r10 @x1r = x1r + x3r@
- ADD r7, r7, r11 @x1i = x1i + x3i@
+ ADD r6, r6, r10 @x1r = x1r + x3r@
+ ADD r7, r7, r11 @x1i = x1i + x3i@
SUB r10, r6, r10, lsl#1 @x3r = x1r - (x3r << 1)@
SUB r11, r7, r11, lsl#1 @x3i = x1i - (x3i << 1)@
- ADD r4, r4, r6 @x0r = x0r + x1r@
- ADD r5, r5, r7 @x0i = x0i + x1i@
+ ADD r4, r4, r6 @x0r = x0r + x1r@
+ ADD r5, r5, r7 @x0i = x0i + x1i@
SUB r6, r4, r6, lsl#1 @x1r = x0r - (x1r << 1)@
SUB r7, r5, r7, lsl#1 @x1i = x0i - (x1i << 1)
STRD r4, [r12] @r4=x0r, r5=x0i
ADD r12, r12, r0
- ADD r8, r8, r11 @x2r = x2r + x3i@
- SUB r9, r9, r10 @x2i = x2i - x3r@
+ ADD r8, r8, r11 @x2r = x2r + x3i@
+ SUB r9, r9, r10 @x2i = x2i - x3r@
SUB r4, r8, r11, lsl#1 @x3i = x2r - (x3i << 1)@
ADD r5, r9, r10, lsl#1 @x3r = x2i + (x3r << 1)
@@ -634,20 +634,20 @@ RADIX4_BFLY_4:
ADD r5, r9, r5 @x0i = x0i + x2i@
SUB r8, r4, r8, lsl#1 @x2r = x0r - (x2r << 1)@
SUB r9, r5, r9, lsl#1 @x2i = x0i - (x2i << 1)@
- ADD r6, r6, r10 @x1r = x1r + x3r@
- SUB r7, r7, r11 @x1i = x1i - x3i@
+ ADD r6, r6, r10 @x1r = x1r + x3r@
+ SUB r7, r7, r11 @x1i = x1i - x3i@
SUB r10, r6, r10, lsl#1 @x3r = x1r - (x3r << 1)@
ADD r11, r7, r11, lsl#1 @x3i = x1i + (x3i << 1)@
- ADD r4, r4, r6 @x0r = x0r + x1r@
- ADD r5, r5, r7 @x0i = x0i + x1i@
+ ADD r4, r4, r6 @x0r = x0r + x1r@
+ ADD r5, r5, r7 @x0i = x0i + x1i@
SUB r6, r4, r6, lsl#1 @x1r = x0r - (x1r << 1)@
SUB r7, r5, r7, lsl#1 @x1i = x0i - (x1i << 1)
STRD r4, [r12] @r4=x0r, r5=x0i
ADD r12, r12, r0
- ADD r8, r8, r11 @x2r = x2r + x3i@
- SUB r9, r9, r10 @x2i = x2i - x3r@
+ ADD r8, r8, r11 @x2r = x2r + x3i@
+ SUB r9, r9, r10 @x2i = x2i - x3r@
SUB r4, r8, r11, lsl#1 @x3i = x2r - (x3i << 1)@
ADD r5, r9, r10, lsl#1 @x3r = x2i + (x3r << 1)
diff --git a/decoder/armv7/ixheaacd_complex_ifft_p2.s b/decoder/armv7/ixheaacd_complex_ifft_p2.s
index 81c9716..ce89139 100644
--- a/decoder/armv7/ixheaacd_complex_ifft_p2.s
+++ b/decoder/armv7/ixheaacd_complex_ifft_p2.s
@@ -50,21 +50,21 @@ FIRST_STAGE_R4:
ADD r0, r0, #4
CMP r0, lr, ASR #1
- ADD r4, r4, r6 @x0r = x0r + x2r@
- ADD r5, r5, r7 @x0i = x0i + x2i@
+ ADD r4, r4, r6 @x0r = x0r + x2r@
+ ADD r5, r5, r7 @x0i = x0i + x2i@
SUB r6, r4, r6, lsl#1 @x2r = x0r - (x2r << 1)@
SUB r7, r5, r7, lsl#1 @x2i = x0i - (x2i << 1)@
- ADD r8, r8, r10 @x1r = x1r + x3r@
- ADD r9, r9, r11 @x1i = x1i + x3i@
+ ADD r8, r8, r10 @x1r = x1r + x3r@
+ ADD r9, r9, r11 @x1i = x1i + x3i@
SUB r1, r8, r10, lsl#1 @x3r = x1r - (x3r << 1)@
SUB r11, r9, r11, lsl#1 @x3i = x1i - (x3i << 1)@
- ADD r4, r4, r8 @x0r = x0r + x1r@
- ADD r5, r5, r9 @x0i = x0i + x1i@
+ ADD r4, r4, r8 @x0r = x0r + x1r@
+ ADD r5, r5, r9 @x0i = x0i + x1i@
SUB r8, r4, r8, lsl#1 @x1r = x0r - (x1r << 1)@
SUB r9, r5, r9, lsl#1 @x1i = x0i - (x1i << 1)
- SUB r6, r6, r11 @x2r = x2r - x3i@
- ADD r7, r7, r1 @x2i = x2i + x3r@
+ SUB r6, r6, r11 @x2r = x2r - x3i@
+ ADD r7, r7, r1 @x2i = x2i + x3r@
ADD r10, r6, r11, lsl#1 @x3i = x2r + (x3i << 1)@
SUB r11, r7, r1, lsl#1 @x3r = x2i - (x3r << 1)@
@@ -108,23 +108,23 @@ LOOP_TRIVIAL_TWIDDLE:
@MOV r10,r10,ASR #1
@MOV r11,r11,ASR #1
- ADD r4, r4, r8 @x0r = x0r + x2r@
- ADD r5, r5, r9 @x0i = x0i + x2i@
+ ADD r4, r4, r8 @x0r = x0r + x2r@
+ ADD r5, r5, r9 @x0i = x0i + x2i@
SUB r8, r4, r8, lsl #1 @x2r = x0r - (x2r << 1)@
SUB r9, r5, r9, lsl #1 @x2i = x0i - (x2i << 1)@
- ADD r6, r6, r10 @x1r = x1r + x3r@
- ADD r7, r7, r11 @x1i = x1i + x3i@
+ ADD r6, r6, r10 @x1r = x1r + x3r@
+ ADD r7, r7, r11 @x1i = x1i + x3i@
SUB r2, r6, r10, lsl #1 @x3r = x1r - (x3r << 1)@
SUB r11, r7, r11, lsl #1 @x3i = x1i - (x3i << 1)@
- ADD r4, r4, r6 @x0r = x0r + x1r@
- ADD r5, r5, r7 @x0i = x0i + x1i@
+ ADD r4, r4, r6 @x0r = x0r + x1r@
+ ADD r5, r5, r7 @x0i = x0i + x1i@
@MOV r4,r4,ASR #1
@MOV r5,r5,ASR #1
SUB r6, r4, r6, lsl #1 @x1r = x0r - (x1r << 1)@
SUB r7, r5, r7, lsl #1 @x1i = x0i - (x1i << 1)
- SUB r8, r8, r11 @x2r = x2r - x3i@
- ADD r9, r9, r2 @x2i = x2i + x3r@
+ SUB r8, r8, r11 @x2r = x2r - x3i@
+ ADD r9, r9, r2 @x2i = x2i + x3r@
ADD r10, r8, r11, lsl#1 @x3i = x2r + (x3i << 1)@
SUB r11, r9, r2, lsl#1 @x3r = x2i - (x3r << 1)
@@ -241,23 +241,23 @@ RADIX4_BFLY:
ADD r4, r8, r4 @x0r = x0r + x2r@
- ADD r5, r9, r5 @x0i = x0i + x2i@
+ ADD r5, r9, r5 @x0i = x0i + x2i@
SUB r8, r4, r8, lsl#1 @x2r = x0r - (x2r << 1)@
SUB r9, r5, r9, lsl#1 @x2i = x0i - (x2i << 1)@
- ADD r6, r6, r10 @x1r = x1r + x3r@
- ADD r7, r7, r11 @x1i = x1i + x3i@
+ ADD r6, r6, r10 @x1r = x1r + x3r@
+ ADD r7, r7, r11 @x1i = x1i + x3i@
SUB r10, r6, r10, lsl#1 @x3r = x1r - (x3r << 1)@
SUB r11, r7, r11, lsl#1 @x3i = x1i - (x3i << 1)@
- ADD r4, r4, r6 @x0r = x0r + x1r@
- ADD r5, r5, r7 @x0i = x0i + x1i@
+ ADD r4, r4, r6 @x0r = x0r + x1r@
+ ADD r5, r5, r7 @x0i = x0i + x1i@
SUB r6, r4, r6, lsl#1 @x1r = x0r - (x1r << 1)@
SUB r7, r5, r7, lsl#1 @x1i = x0i - (x1i << 1)
STRD r4, [r12] @r4=x0r, r5=x0i
ADD r12, r12, r0
- SUB r8, r8, r11 @x2r = x2r - x3i@
- ADD r9, r9, r10 @x2i = x2i + x3r@
+ SUB r8, r8, r11 @x2r = x2r - x3i@
+ ADD r9, r9, r10 @x2i = x2i + x3r@
ADD r4, r8, r11, lsl#1 @x3i = x2r + (x3i << 1)@
SUB r5, r9, r10, lsl#1 @x3r = x2i - (x3r << 1)
@@ -504,20 +504,20 @@ RADIX4_BFLY_3:
ADD r5, r9, r5 @x0i = x0i + x2i@
SUB r8, r4, r8, lsl#1 @x2r = x0r - (x2r << 1)@
SUB r9, r5, r9, lsl#1 @x2i = x0i - (x2i << 1)@
- ADD r6, r6, r10 @x1r = x1r + x3r@
- ADD r7, r7, r11 @x1i = x1i + x3i@
+ ADD r6, r6, r10 @x1r = x1r + x3r@
+ ADD r7, r7, r11 @x1i = x1i + x3i@
SUB r10, r6, r10, lsl#1 @x3r = x1r - (x3r << 1)@
SUB r11, r7, r11, lsl#1 @x3i = x1i - (x3i << 1)@
- ADD r4, r4, r6 @x0r = x0r + x1r@
- ADD r5, r5, r7 @x0i = x0i + x1i@
+ ADD r4, r4, r6 @x0r = x0r + x1r@
+ ADD r5, r5, r7 @x0i = x0i + x1i@
SUB r6, r4, r6, lsl#1 @x1r = x0r - (x1r << 1)@
SUB r7, r5, r7, lsl#1 @x1i = x0i - (x1i << 1)
STRD r4, [r12] @r4=x0r, r5=x0i
ADD r12, r12, r0
- SUB r8, r8, r11 @x2r = x2r - x3i@
- ADD r9, r9, r10 @x2i = x2i + x3r@
+ SUB r8, r8, r11 @x2r = x2r - x3i@
+ ADD r9, r9, r10 @x2i = x2i + x3r@
ADD r4, r8, r11, lsl#1 @x3i = x2r + (x3i << 1)@
SUB r5, r9, r10, lsl#1 @x3r = x2i - (x3r << 1)
@@ -635,20 +635,20 @@ RADIX4_BFLY_4:
ADD r5, r9, r5 @x0i = x0i + x2i@
SUB r8, r4, r8, lsl#1 @x2r = x0r - (x2r << 1)@
SUB r9, r5, r9, lsl#1 @x2i = x0i - (x2i << 1)@
- ADD r6, r6, r10 @x1r = x1r + x3r@
- SUB r7, r7, r11 @x1i = x1i - x3i@
+ ADD r6, r6, r10 @x1r = x1r + x3r@
+ SUB r7, r7, r11 @x1i = x1i - x3i@
SUB r10, r6, r10, lsl#1 @x3r = x1r - (x3r << 1)@
ADD r11, r7, r11, lsl#1 @x3i = x1i + (x3i << 1)@
- ADD r4, r4, r6 @x0r = x0r + x1r@
- ADD r5, r5, r7 @x0i = x0i + x1i@
+ ADD r4, r4, r6 @x0r = x0r + x1r@
+ ADD r5, r5, r7 @x0i = x0i + x1i@
SUB r6, r4, r6, lsl#1 @x1r = x0r - (x1r << 1)@
SUB r7, r5, r7, lsl#1 @x1i = x0i - (x1i << 1)
STRD r4, [r12] @r4=x0r, r5=x0i
ADD r12, r12, r0
- SUB r8, r8, r11 @x2r = x2r - x3i@
- ADD r9, r9, r10 @x2i = x2i + x3r@
+ SUB r8, r8, r11 @x2r = x2r - x3i@
+ ADD r9, r9, r10 @x2i = x2i + x3r@
ADD r4, r8, r11, lsl#1 @x3i = x2r + (x3i << 1)@
SUB r5, r9, r10, lsl#1 @x3r = x2i - (x3r << 1)
diff --git a/decoder/armv7/ixheaacd_esbr_cos_sin_mod_loop2.s b/decoder/armv7/ixheaacd_esbr_cos_sin_mod_loop2.s
index 732a265..0c2844b 100644
--- a/decoder/armv7/ixheaacd_esbr_cos_sin_mod_loop2.s
+++ b/decoder/armv7/ixheaacd_esbr_cos_sin_mod_loop2.s
@@ -94,8 +94,8 @@ ixheaacd_esbr_cos_sin_mod_loop2:
LOOP1:
VLD1.32 {D2}, [R0]
VLD1.32 {D3}, [R10]
- LDR R5, [R3] @RE2
- LDR R6, [R11] @RE3
+ LDR R5, [R3] @RE2
+ LDR R6, [R11] @RE3
VTRN.32 D2, D3
VMULL.S32 q2, d0, d2 @qsub 2nd
diff --git a/decoder/armv7/ixheaacd_function_selector_arm_non_neon.c b/decoder/armv7/ixheaacd_function_selector_arm_non_neon.c
index 8b4efcc..e950ea1 100644
--- a/decoder/armv7/ixheaacd_function_selector_arm_non_neon.c
+++ b/decoder/armv7/ixheaacd_function_selector_arm_non_neon.c
@@ -134,7 +134,8 @@ VOID(*ixheaacd_harm_idx_zerotwolp)
VOID(*ixheaacd_tns_ar_filter_fixed)
(WORD32 *spectrum, WORD32 size, WORD32 inc, WORD32 *lpc, WORD32 order,
- WORD32 shift_value, WORD scale_spec) = &ixheaacd_tns_ar_filter_fixed_non_neon_armv7;
+ WORD32 shift_value,
+ WORD scale_spec) = &ixheaacd_tns_ar_filter_fixed_non_neon_armv7;
VOID(*ixheaacd_tns_ar_filter)
(WORD32 *spectrum, WORD32 size, WORD32 inc, WORD16 *lpc, WORD32 order,
diff --git a/decoder/armv7/ixheaacd_function_selector_armv7.c b/decoder/armv7/ixheaacd_function_selector_armv7.c
index 0b6594c..cde6269 100644
--- a/decoder/armv7/ixheaacd_function_selector_armv7.c
+++ b/decoder/armv7/ixheaacd_function_selector_armv7.c
@@ -230,20 +230,20 @@ VOID(*ixheaacd_aac_ld_dec_rearrange)
(WORD32 *ip, WORD32 *op, WORD32 mdct_len_2,
UWORD8 *re_arr_tab) = &ia_aac_ld_dec_rearrange_armv7;
-VOID (*ixheaacd_fft32x32_ld)
+VOID(*ixheaacd_fft32x32_ld)
(ia_aac_dec_imdct_tables_struct *imdct_tables_ptr, WORD32 npoints,
WORD32 *ptr_x, WORD32 *ptr_y) = &ixheaacd_imdct_using_fft_armv7;
-VOID (*ixheaacd_fft32x32_ld2)
+VOID(*ixheaacd_fft32x32_ld2)
(ia_aac_dec_imdct_tables_struct *imdct_tables_ptr, WORD32 npoints,
WORD32 *ptr_x, WORD32 *ptr_y) = &ixheaacd_fft32x32_ld2_armv7;
WORD16 (*ixheaacd_neg_expo_inc)(WORD16 neg_expo) = &ixheaacd_neg_expo_inc_arm;
-VOID (*ixheaacd_inv_dit_fft_8pt)
+VOID(*ixheaacd_inv_dit_fft_8pt)
(WORD32 *x, WORD32 *real, WORD32 *imag) = &ixheaacd_inv_dit_fft_8pt_armv7;
-VOID (*ixheaacd_scale_factor_process)
+VOID(*ixheaacd_scale_factor_process)
(WORD32 *x_invquant, WORD16 *scale_fact, WORD no_band, WORD8 *width,
WORD32 *scale_tables_ptr, WORD32 total_channels, WORD32 object_type,
WORD32 aac_sf_data_resil_flag) = &ixheaacd_scale_factor_process_armv7;
diff --git a/decoder/armv7/ixheaacd_mps_complex_fft_64_asm.s b/decoder/armv7/ixheaacd_mps_complex_fft_64_asm.s
index 38638cf..9e4ba93 100644
--- a/decoder/armv7/ixheaacd_mps_complex_fft_64_asm.s
+++ b/decoder/armv7/ixheaacd_mps_complex_fft_64_asm.s
@@ -38,21 +38,21 @@ FIRST_STAGE_R4:
ADD r0, r0, #4
CMP r0, lr, ASR #1
- ADD r4, r4, r6 @x0r = x0r + x2r@
- ADD r5, r5, r7 @x0i = x0i + x2i@
+ ADD r4, r4, r6 @x0r = x0r + x2r@
+ ADD r5, r5, r7 @x0i = x0i + x2i@
SUB r6, r4, r6, lsl#1 @x2r = x0r - (x2r << 1)@
SUB r7, r5, r7, lsl#1 @x2i = x0i - (x2i << 1)@
- ADD r8, r8, r10 @x1r = x1r + x3r@
- ADD r9, r9, r11 @x1i = x1i + x3i@
+ ADD r8, r8, r10 @x1r = x1r + x3r@
+ ADD r9, r9, r11 @x1i = x1i + x3i@
SUB r1, r8, r10, lsl#1 @x3r = x1r - (x3r << 1)@
SUB r11, r9, r11, lsl#1 @x3i = x1i - (x3i << 1)@
- ADD r4, r4, r8 @x0r = x0r + x1r@
- ADD r5, r5, r9 @x0i = x0i + x1i@
+ ADD r4, r4, r8 @x0r = x0r + x1r@
+ ADD r5, r5, r9 @x0i = x0i + x1i@
SUB r8, r4, r8, lsl#1 @x1r = x0r - (x1r << 1)@
SUB r9, r5, r9, lsl#1 @x1i = x0i - (x1i << 1)
- ADD r6, r6, r11 @x2r = x2r + x3i@
- SUB r7, r7, r1 @x2i = x2i - x3r@
+ ADD r6, r6, r11 @x2r = x2r + x3i@
+ SUB r7, r7, r1 @x2i = x2i - x3r@
SUB r10, r6, r11, lsl#1 @x3i = x2r - (x3i << 1)@
ADD r11, r7, r1, lsl#1 @x3r = x2i + (x3r << 1)@
@@ -96,23 +96,23 @@ LOOP_TRIVIAL_TWIDDLE:
@MOV r10,r10,ASR #1
@MOV r11,r11,ASR #1
- ADD r4, r4, r8 @x0r = x0r + x2r@
- ADD r5, r5, r9 @x0i = x0i + x2i@
+ ADD r4, r4, r8 @x0r = x0r + x2r@
+ ADD r5, r5, r9 @x0i = x0i + x2i@
SUB r8, r4, r8, lsl #1 @x2r = x0r - (x2r << 1)@
SUB r9, r5, r9, lsl #1 @x2i = x0i - (x2i << 1)@
- ADD r6, r6, r10 @x1r = x1r + x3r@
- ADD r7, r7, r11 @x1i = x1i + x3i@
+ ADD r6, r6, r10 @x1r = x1r + x3r@
+ ADD r7, r7, r11 @x1i = x1i + x3i@
SUB r2, r6, r10, lsl #1 @x3r = x1r - (x3r << 1)@
SUB r11, r7, r11, lsl #1 @x3i = x1i - (x3i << 1)@
- ADD r4, r4, r6 @x0r = x0r + x1r@
- ADD r5, r5, r7 @x0i = x0i + x1i@
+ ADD r4, r4, r6 @x0r = x0r + x1r@
+ ADD r5, r5, r7 @x0i = x0i + x1i@
@MOV r4,r4,ASR #1
@MOV r5,r5,ASR #1
SUB r6, r4, r6, lsl #1 @x1r = x0r - (x1r << 1)@
SUB r7, r5, r7, lsl #1 @x1i = x0i - (x1i << 1)
- ADD r8, r8, r11 @x2r = x2r + x3i@
- SUB r9, r9, r2 @x2i = x2i - x3r@
+ ADD r8, r8, r11 @x2r = x2r + x3i@
+ SUB r9, r9, r2 @x2i = x2i - x3r@
SUB r10, r8, r11, lsl#1 @x3i = x2r - (x3i << 1)@
ADD r11, r9, r2, lsl#1 @x3r = x2i + (x3r << 1)
@@ -229,23 +229,23 @@ RADIX4_BFLY:
ADD r4, r8, r4 @x0r = x0r + x2r@
- ADD r5, r9, r5 @x0i = x0i + x2i@
+ ADD r5, r9, r5 @x0i = x0i + x2i@
SUB r8, r4, r8, lsl#1 @x2r = x0r - (x2r << 1)@
SUB r9, r5, r9, lsl#1 @x2i = x0i - (x2i << 1)@
- ADD r6, r6, r10 @x1r = x1r + x3r@
- ADD r7, r7, r11 @x1i = x1i + x3i@
+ ADD r6, r6, r10 @x1r = x1r + x3r@
+ ADD r7, r7, r11 @x1i = x1i + x3i@
SUB r10, r6, r10, lsl#1 @x3r = x1r - (x3r << 1)@
SUB r11, r7, r11, lsl#1 @x3i = x1i - (x3i << 1)@
- ADD r4, r4, r6 @x0r = x0r + x1r@
- ADD r5, r5, r7 @x0i = x0i + x1i@
+ ADD r4, r4, r6 @x0r = x0r + x1r@
+ ADD r5, r5, r7 @x0i = x0i + x1i@
SUB r6, r4, r6, lsl#1 @x1r = x0r - (x1r << 1)@
SUB r7, r5, r7, lsl#1 @x1i = x0i - (x1i << 1)
STRD r4, [r12] @r4=x0r, r5=x0i
ADD r12, r12, r0
- ADD r8, r8, r11 @x2r = x2r + x3i@
- SUB r9, r9, r10 @x2i = x2i - x3r@
+ ADD r8, r8, r11 @x2r = x2r + x3i@
+ SUB r9, r9, r10 @x2i = x2i - x3r@
SUB r4, r8, r11, lsl#1 @x3i = x2r - (x3i << 1)@
ADD r5, r9, r10, lsl#1 @x3r = x2i + (x3r << 1)
@@ -492,20 +492,20 @@ RADIX4_BFLY_3:
ADD r5, r9, r5 @x0i = x0i + x2i@
SUB r8, r4, r8, lsl#1 @x2r = x0r - (x2r << 1)@
SUB r9, r5, r9, lsl#1 @x2i = x0i - (x2i << 1)@
- ADD r6, r6, r10 @x1r = x1r + x3r@
- ADD r7, r7, r11 @x1i = x1i + x3i@
+ ADD r6, r6, r10 @x1r = x1r + x3r@
+ ADD r7, r7, r11 @x1i = x1i + x3i@
SUB r10, r6, r10, lsl#1 @x3r = x1r - (x3r << 1)@
SUB r11, r7, r11, lsl#1 @x3i = x1i - (x3i << 1)@
- ADD r4, r4, r6 @x0r = x0r + x1r@
- ADD r5, r5, r7 @x0i = x0i + x1i@
+ ADD r4, r4, r6 @x0r = x0r + x1r@
+ ADD r5, r5, r7 @x0i = x0i + x1i@
SUB r6, r4, r6, lsl#1 @x1r = x0r - (x1r << 1)@
SUB r7, r5, r7, lsl#1 @x1i = x0i - (x1i << 1)
STRD r4, [r12] @r4=x0r, r5=x0i
ADD r12, r12, r0
- ADD r8, r8, r11 @x2r = x2r + x3i@
- SUB r9, r9, r10 @x2i = x2i - x3r@
+ ADD r8, r8, r11 @x2r = x2r + x3i@
+ SUB r9, r9, r10 @x2i = x2i - x3r@
SUB r4, r8, r11, lsl#1 @x3i = x2r - (x3i << 1)@
ADD r5, r9, r10, lsl#1 @x3r = x2i + (x3r << 1)
@@ -622,19 +622,19 @@ RADIX4_BFLY_4:
ADD r5, r9, r5 @x0i = x0i + x2i@
SUB r8, r4, r8, lsl#1 @x2r = x0r - (x2r << 1)@
SUB r9, r5, r9, lsl#1 @x2i = x0i - (x2i << 1)@
- ADD r6, r6, r10 @x1r = x1r + x3r@
- SUB r7, r7, r11 @x1i = x1i - x3i@
+ ADD r6, r6, r10 @x1r = x1r + x3r@
+ SUB r7, r7, r11 @x1i = x1i - x3i@
SUB r10, r6, r10, lsl#1 @x3r = x1r - (x3r << 1)@
ADD r11, r7, r11, lsl#1 @x3i = x1i + (x3i << 1)@
- ADD r4, r4, r6 @x0r = x0r + x1r@
- ADD r5, r5, r7 @x0i = x0i + x1i@
+ ADD r4, r4, r6 @x0r = x0r + x1r@
+ ADD r5, r5, r7 @x0i = x0i + x1i@
SUB r6, r4, r6, lsl#1 @x1r = x0r - (x1r << 1)@
SUB r7, r5, r7, lsl#1 @x1i = x0i - (x1i << 1)
STRD r4, [r12] @r4=x0r, r5=x0i
ADD r12, r12, r0
- ADD r8, r8, r11 @x2r = x2r + x3i@
- SUB r9, r9, r10 @x2i = x2i - x3r@
+ ADD r8, r8, r11 @x2r = x2r + x3i@
+ SUB r9, r9, r10 @x2i = x2i - x3r@
SUB r4, r8, r11, lsl#1 @x3i = x2r - (x3i << 1)@
ADD r5, r9, r10, lsl#1 @x3r = x2i + (x3r << 1)
diff --git a/decoder/armv7/ixheaacd_qmf_dec_armv7.c b/decoder/armv7/ixheaacd_qmf_dec_armv7.c
index d75de06..13b3f9d 100644
--- a/decoder/armv7/ixheaacd_qmf_dec_armv7.c
+++ b/decoder/armv7/ixheaacd_qmf_dec_armv7.c
@@ -228,8 +228,8 @@ VOID ixheaacd_cplx_anal_qmffilt(const WORD16 *time_sample_buf,
}
VOID ixheaacd_inv_modulation_lp(WORD32 *qmf_real, WORD16 *filter_states,
- ia_sbr_qmf_filter_bank_struct *syn_qmf,
- ia_qmf_dec_tables_struct *qmf_dec_tables_ptr) {
+ ia_sbr_qmf_filter_bank_struct *syn_qmf,
+ ia_qmf_dec_tables_struct *qmf_dec_tables_ptr) {
WORD32 L = syn_qmf->no_channels;
const WORD32 M = (L >> 1);
WORD32 *dct_in = qmf_real;
@@ -249,9 +249,9 @@ VOID ixheaacd_inv_modulation_lp(WORD32 *qmf_real, WORD16 *filter_states,
filter_states[3 * M] = 0;
}
-VOID ixheaacd_inv_emodulation(
- WORD32 *qmf_real, ia_sbr_qmf_filter_bank_struct *syn_qmf,
- ia_qmf_dec_tables_struct *qmf_dec_tables_ptr) {
+VOID ixheaacd_inv_emodulation(WORD32 *qmf_real,
+ ia_sbr_qmf_filter_bank_struct *syn_qmf,
+ ia_qmf_dec_tables_struct *qmf_dec_tables_ptr) {
ixheaacd_cos_sin_mod(qmf_real, syn_qmf, (WORD16 *)qmf_dec_tables_ptr->w1024,
(WORD32 *)qmf_dec_tables_ptr->dig_rev_table2_128);
}
@@ -352,4 +352,3 @@ VOID ixheaacd_esbr_cos_sin_mod(WORD32 *subband,
p_sin = qmf_bank->esbr_alt_sin_twiddle;
ixheaacd_esbr_cos_sin_mod_loop2(subband, p_sin, M);
}
-
diff --git a/decoder/armv7/ixheaacd_sbr_qmfanal32_winadds_eld.s b/decoder/armv7/ixheaacd_sbr_qmfanal32_winadds_eld.s
index 53392ec..ce5361b 100644
--- a/decoder/armv7/ixheaacd_sbr_qmfanal32_winadds_eld.s
+++ b/decoder/armv7/ixheaacd_sbr_qmfanal32_winadds_eld.s
@@ -51,17 +51,17 @@ LOOP:
MOV R6, R6, LSL #1 @
VLD1.16 {D1, D2}, [R2]! @ tmpQmf_c1[2*(n + 0)] load and incremented
- MOV R7, #244 @ NOT USED further
+ MOV R7, #244 @ NOT USED further
MOV R9, R0
ADD R0, R0, #120 @ incrementing R0 by 120 + 8 = 128
- MOV R11, R4 @ Mov winAdd to R11
+ MOV R11, R4 @ Mov winAdd to R11
VLD1.16 D2, [R0], R6 @ tmpQ1[n + 64] load and incremented by R6
ADD R11, R11, #128 @ increment winAdd by 128
- MOV R10, R2 @
+ MOV R10, R2 @
ADD R2, R2, #112 @ This should be 240 --> 112
VMULL.S16 Q15, D0, D1
diff --git a/decoder/armv7/ixheaacd_tns_ar_filter_fixed.s b/decoder/armv7/ixheaacd_tns_ar_filter_fixed.s
index d0b2dd2..48fb61c 100644
--- a/decoder/armv7/ixheaacd_tns_ar_filter_fixed.s
+++ b/decoder/armv7/ixheaacd_tns_ar_filter_fixed.s
@@ -28,68 +28,68 @@
.global ixheaacd_tns_ar_filter_fixed_armv7
ixheaacd_tns_ar_filter_fixed_armv7:
- STMFD r13! , {r4 - r12, r14}
- vpush {d8-d15}
- SUB sp, sp, #128 @ state[MaximumOrder] + one more
- LDR r4, [sp,#232] @order
- LDR r6, [sp,#236] @shift_value
- STR r1, [sp]
- ADD r12, sp, #4 @ r12 = state
- ANDS r5, r4, #3
- BEQ FILTER_LOOP
- MOV r8, #0
- ADD r14, r3, r4,LSL #2
- RSBS r7, r5, #3
- BEQ ORDER_LOOPEND
+ STMFD r13! , {r4 - r12, r14}
+ vpush {d8-d15}
+ SUB sp, sp, #128 @ state[MaximumOrder] + one more
+ LDR r4, [sp, #232] @order
+ LDR r6, [sp, #236] @shift_value
+ STR r1, [sp]
+ ADD r12, sp, #4 @ r12 = state
+ ANDS r5, r4, #3
+ BEQ FILTER_LOOP
+ MOV r8, #0
+ ADD r14, r3, r4, LSL #2
+ RSBS r7, r5, #3
+ BEQ ORDER_LOOPEND
ORDER_LOOP:
- STR r8, [r14,#4]! @lpc[i] = 0
- SUBS r7, r7, #1
- BGT ORDER_LOOP
+ STR r8, [r14, #4]! @lpc[i] = 0
+ SUBS r7, r7, #1
+ BGT ORDER_LOOP
ORDER_LOOPEND:
- STR r8, [r14,#4] @lpc[i] = 0
- BIC r4, r4, #3
- ADD r4, r4, #4 @order = ( (order & 0xfffffffc) +4 )
+ STR r8, [r14, #4] @lpc[i] = 0
+ BIC r4, r4, #3
+ ADD r4, r4, #4 @order = ( (order & 0xfffffffc) +4 )
FILTER_LOOP:
- LDR r1, [sp,#240] @scaleSpec
+ LDR r1, [sp, #240] @scaleSpec
@filtering loop here
- CMP r2, #1 @ inc =1 or -1
- MOV r7, r4 @loop_count
- BNE NEG_INC
-
- LDR r8 , [r0] @r8 =*spectrum
- SUBS r7 , r7 , #1
- MOV r8, r8, lsl r1
- MOV r9, r8, asr r1
- MOV r8 , r8 ,lsl r6
- STR r8 , [r12] @state[0] = sp[top]
- STR r9, [r0], #4
- BEQ FILTER_LOOP2
-FILTER_LOOP1: @siva 16 times loop run
- LDR r8 , [r0] @r8 =*spectrum
- SUB r5 , r4 , r7 @
- MOV r5 , r5 ,lsl #2
- MOV r11 , #0 @accu = 0
- ADD r14, r12, r5 @state[j]
+ CMP r2, #1 @ inc =1 or -1
+ MOV r7, r4 @loop_count
+ BNE NEG_INC
+
+ LDR r8 , [r0] @r8 =*spectrum
+ SUBS r7 , r7 , #1
+ MOV r8, r8, lsl r1
+ MOV r9, r8, asr r1
+ MOV r8 , r8 , lsl r6
+ STR r8 , [r12] @state[0] = sp[top]
+ STR r9, [r0], #4
+ BEQ FILTER_LOOP2
+FILTER_LOOP1: @siva 16 times loop run
+ LDR r8 , [r0] @r8 =*spectrum
+ SUB r5 , r4 , r7 @
+ MOV r5 , r5 , lsl #2
+ MOV r11 , #0 @accu = 0
+ ADD r14, r12, r5 @state[j]
INNER_LOOP1:
- LDR r10 , [r14,#-4] @state[j-1]
- LDR r9 , [r3 , r5] @lpc[j]
- SUBS r5 , r5 , #4
+ LDR r10 , [r14, #-4] @state[j-1]
+ LDR r9 , [r3 , r5] @lpc[j]
+ SUBS r5 , r5 , #4
- MOV r2, #0
- SMLAL r2 , r11, r10, r9
- STR r10 , [r14], #-4 @state[j] = state[j - 1]
- BGT INNER_LOOP1
+ MOV r2, #0
+ SMLAL r2 , r11, r10, r9
+ STR r10 , [r14], #-4 @state[j] = state[j - 1]
+ BGT INNER_LOOP1
- MOV r8, r8, lsl r1
- SUB r8 , r8 , r11,lsl #1
- MOV r9, r8, asr r1
- STR r9 , [r0], #4 @*spectrum = y@
- SUBS r7 , r7 , #1 @i--
- MOV r8 , r8 ,lsl r6
- STR r8 , [r12] @state[0]
- BGT FILTER_LOOP1
+ MOV r8, r8, lsl r1
+ SUB r8 , r8 , r11, lsl #1
+ MOV r9, r8, asr r1
+ STR r9 , [r0], #4 @*spectrum = y@
+ SUBS r7 , r7 , #1 @i--
+ MOV r8 , r8 , lsl r6
+ STR r8 , [r12] @state[0]
+ BGT FILTER_LOOP1
@@ -98,456 +98,456 @@ INNER_LOOP1:
FILTER_LOOP2:
- LDR R1, [sp] @size
- ADD R8, R3, #4
+ LDR R1, [sp] @size
+ ADD R8, R3, #4
- SUBS R7 , R1 , r4 @size-order
- BEQ EXIT
+ SUBS R7 , R1 , r4 @size-order
+ BEQ EXIT
- LDR R1, [sp,#240] @scaleSpec
+ LDR R1, [sp, #240] @scaleSpec
- MOV R5 , R4 ,LSL #2 @count for inner loop = order
- VLD1.32 {D10, D11}, [R8]! @lpc[j]
- MOV R14,#0
- VLD1.32 {D12, D13}, [R12]! @state[j - 1]
+ MOV R5 , R4 , LSL #2 @count for inner loop = order
+ VLD1.32 {D10, D11}, [R8]! @lpc[j]
+ MOV R14, #0
+ VLD1.32 {D12, D13}, [R12]! @state[j - 1]
- CMP R4,#4
- VLD1.32 {D18, D19}, [R8]!
- BEQ ORDER4
- VLD1.32 {D22, D23}, [R12]!
+ CMP R4, #4
+ VLD1.32 {D18, D19}, [R8]!
+ BEQ ORDER4
+ VLD1.32 {D22, D23}, [R12]!
- CMP R4,#8
- VLD1.32 {D20, D21}, [R8]!
- BEQ ORDER8
- CMP R4,#12
- VLD1.32 {D24, D25}, [R12]!
- BEQ ORDER12
+ CMP R4, #8
+ VLD1.32 {D20, D21}, [R8]!
+ BEQ ORDER8
+ CMP R4, #12
+ VLD1.32 {D24, D25}, [R12]!
+ BEQ ORDER12
- VLD1.32 {D26, D27},[R8]!
- CMP R4,#16
- VLD1.32 {D28, D29},[R12]!
- BEQ ORDER16 @order16 added
+ VLD1.32 {D26, D27}, [R8]!
+ CMP R4, #16
+ VLD1.32 {D28, D29}, [R12]!
+ BEQ ORDER16 @order16 added
- VLD1.32 {D4, D5},[R8]!
- CMP R4,#20
- VLD1.32 {D8, D9},[R12]!
- BEQ ORDER20 @order20 added
+ VLD1.32 {D4, D5}, [R8]!
+ CMP R4, #20
+ VLD1.32 {D8, D9}, [R12]!
+ BEQ ORDER20 @order20 added
ORDER4:
- LDR r8 , [r0] @r8 = y = *spectrum
+ LDR r8 , [r0] @r8 = y = *spectrum
OUTER_LOOP2_4:
- VDUP.32 Q1,R14 @Q1= accu = 0
+ VDUP.32 Q1, R14 @Q1= accu = 0
- VMLAL.S32 Q1, D10, D12
+ VMLAL.S32 Q1, D10, D12
- VMLAL.S32 Q1, D11, D13
+ VMLAL.S32 Q1, D11, D13
- MOV r8, r8, lsl r1 @y = (*spectrum) << scaleSpec
- SUBS r7 , r7 , #1
+ MOV r8, r8, lsl r1 @y = (*spectrum) << scaleSpec
+ SUBS r7 , r7 , #1
- VADD.I64 D6,D2,D3
+ VADD.I64 D6, D2, D3
- VSHR.S64 D6,#32 @acc1=acc>>32 @acc = mac32_tns_neon(state[j - 1],lpc[j],acc, temp_lo)@
- @VMOV R11,D6[0]
- VST1.32 D6[0],[SP]
- LDR R11,[SP]
+ VSHR.S64 D6, #32 @acc1=acc>>32 @acc = mac32_tns_neon(state[j - 1],lpc[j],acc, temp_lo)@
+ @VMOV R11,D6[0]
+ VST1.32 D6[0], [SP]
+ LDR R11, [SP]
- SUB r8 , r8 , r11,lsl #1 @y=sub32(y,(acc<<1))
- MOV r2 , r8 ,lsl r6 @ shl32(y, shift_value)
+ SUB r8 , r8 , r11, lsl #1 @y=sub32(y,(acc<<1))
+ MOV r2 , r8 , lsl r6 @ shl32(y, shift_value)
- MOV r9, r8, asr r1
- VMOV.32 D15[1], R2 @state[0]
+ MOV r9, r8, asr r1
+ VMOV.32 D15[1], R2 @state[0]
- STR r9 , [r0],#4 @*spectrum = y@
- VEXT.32 Q6,Q7,Q6,#3
- LDRGT r8 , [r0] @r8 = y = *spectrum
+ STR r9 , [r0], #4 @*spectrum = y@
+ VEXT.32 Q6, Q7, Q6, #3
+ LDRGT r8 , [r0] @r8 = y = *spectrum
- BGT OUTER_LOOP2_4
+ BGT OUTER_LOOP2_4
- B EXIT
+ B EXIT
ORDER8:
- LDR r8 , [r0] @r8 = y = *spectrum
+ LDR r8 , [r0] @r8 = y = *spectrum
OUTER_LOOP2_8:
- VDUP.32 Q1,R14 @Q1= accu = 0
+ VDUP.32 Q1, R14 @Q1= accu = 0
- VMLAL.S32 Q1, D10, D12
- VMLAL.S32 Q1, D11, D13
- VMLAL.S32 Q1, D22, D18
- VMLAL.S32 Q1, D23, D19
+ VMLAL.S32 Q1, D10, D12
+ VMLAL.S32 Q1, D11, D13
+ VMLAL.S32 Q1, D22, D18
+ VMLAL.S32 Q1, D23, D19
- MOV r8, r8, lsl r1 @y = (*spectrum) << scaleSpec
- VEXT.32 Q11,Q6,Q11,#3
- SUBS r7 , r7 , #1
+ MOV r8, r8, lsl r1 @y = (*spectrum) << scaleSpec
+ VEXT.32 Q11, Q6, Q11, #3
+ SUBS r7 , r7 , #1
- VADD.I64 D6,D2,D3
- VSHR.S64 D6,#32 @acc = mac32_tns_neon(state[j - 1],lpc[j],acc, temp_lo)@
+ VADD.I64 D6, D2, D3
+ VSHR.S64 D6, #32 @acc = mac32_tns_neon(state[j - 1],lpc[j],acc, temp_lo)@
- @VMOV R11,D6[0]
- VST1.32 D6[0],[SP]
- LDR R11,[SP]
- SUB r8 , r8 , r11,lsl #1 @y=sub32(y,(acc<<1))
+ @VMOV R11,D6[0]
+ VST1.32 D6[0], [SP]
+ LDR R11, [SP]
+ SUB r8 , r8 , r11, lsl #1 @y=sub32(y,(acc<<1))
- MOV r2 , r8 ,lsl r6 @ shl32(y, shift_value)
+ MOV r2 , r8 , lsl r6 @ shl32(y, shift_value)
- MOV r9, r8, asr r1
- VMOV.32 D15[1], R2 @state[0]
+ MOV r9, r8, asr r1
+ VMOV.32 D15[1], R2 @state[0]
- STR r9 , [r0],#4 @*spectrum = y@
- VEXT.32 Q6,Q7,Q6,#3
- LDRGT r8 , [r0] @r8 = y = *spectrum
+ STR r9 , [r0], #4 @*spectrum = y@
+ VEXT.32 Q6, Q7, Q6, #3
+ LDRGT r8 , [r0] @r8 = y = *spectrum
- BGT OUTER_LOOP2_8
+ BGT OUTER_LOOP2_8
- B EXIT
+ B EXIT
ORDER12:
- LDR r8 , [r0] @r8 = y = *spectrum
+ LDR r8 , [r0] @r8 = y = *spectrum
OUTER_LOOP2_12:
- VDUP.32 Q1,R14 @Q1= accu = 0
+ VDUP.32 Q1, R14 @Q1= accu = 0
- VMLAL.S32 Q1, D10, D12
- VMLAL.S32 Q1, D11, D13
- VMLAL.S32 Q1, D22, D18
- VMLAL.S32 Q1, D23, D19
- VMLAL.S32 Q1, D24, D20
- VMLAL.S32 Q1, D25, D21
+ VMLAL.S32 Q1, D10, D12
+ VMLAL.S32 Q1, D11, D13
+ VMLAL.S32 Q1, D22, D18
+ VMLAL.S32 Q1, D23, D19
+ VMLAL.S32 Q1, D24, D20
+ VMLAL.S32 Q1, D25, D21
- MOV r8, r8, lsl r1 @y = (*spectrum) << scaleSpec
- VEXT.32 Q12,Q11,Q12,#3
- SUBS r7 , r7 , #1
+ MOV r8, r8, lsl r1 @y = (*spectrum) << scaleSpec
+ VEXT.32 Q12, Q11, Q12, #3
+ SUBS r7 , r7 , #1
- VADD.I64 D6,D2,D3
- VEXT.32 Q11,Q6,Q11,#3
- VSHR.S64 D6,#32
+ VADD.I64 D6, D2, D3
+ VEXT.32 Q11, Q6, Q11, #3
+ VSHR.S64 D6, #32
- @VMOV R11,D6[0]
- VST1.32 D6[0],[SP]
- LDR R11,[SP]
- SUB r8 , r8 , r11,lsl #1 @y=sub32(y,(acc<<1))
+ @VMOV R11,D6[0]
+ VST1.32 D6[0], [SP]
+ LDR R11, [SP]
+ SUB r8 , r8 , r11, lsl #1 @y=sub32(y,(acc<<1))
- MOV r2 , r8 ,lsl r6 @ shl32(y, shift_value)
+ MOV r2 , r8 , lsl r6 @ shl32(y, shift_value)
- MOV r9, r8, asr r1
- VMOV.32 D15[1], R2 @state[0]
+ MOV r9, r8, asr r1
+ VMOV.32 D15[1], R2 @state[0]
- STR r9 , [r0],#4 @*spectrum = y@
- VEXT.32 Q6,Q7,Q6,#3
- LDRGT r8 , [r0] @r8 = y = *spectrum
+ STR r9 , [r0], #4 @*spectrum = y@
+ VEXT.32 Q6, Q7, Q6, #3
+ LDRGT r8 , [r0] @r8 = y = *spectrum
- BGT OUTER_LOOP2_12
+ BGT OUTER_LOOP2_12
- B EXIT
+ B EXIT
ORDER16:
- LDR r8 , [r0] @r8 = y = *spectrum
+ LDR r8 , [r0] @r8 = y = *spectrum
OUTER_LOOP2_16:
- VDUP.32 Q1,R14 @Q1= accu = 0
+ VDUP.32 Q1, R14 @Q1= accu = 0
- VMLAL.S32 Q1, D10, D12
- VMLAL.S32 Q1, D11, D13
- VMLAL.S32 Q1, D22, D18
- VMLAL.S32 Q1, D23, D19
- VMLAL.S32 Q1, D24, D20
- VMLAL.S32 Q1, D25, D21
- VMLAL.S32 Q1, D28, D26 @
- VMLAL.S32 Q1, D29, D27 @ @order16
+ VMLAL.S32 Q1, D10, D12
+ VMLAL.S32 Q1, D11, D13
+ VMLAL.S32 Q1, D22, D18
+ VMLAL.S32 Q1, D23, D19
+ VMLAL.S32 Q1, D24, D20
+ VMLAL.S32 Q1, D25, D21
+ VMLAL.S32 Q1, D28, D26 @
+ VMLAL.S32 Q1, D29, D27 @ @order16
- VEXT.32 Q14,Q12,Q14,#3
- MOV r8, r8, lsl r1 @y = (*spectrum) << scaleSpec
- VEXT.32 Q12,Q11,Q12,#3
- SUBS r7 , r7 , #1
+ VEXT.32 Q14, Q12, Q14, #3
+ MOV r8, r8, lsl r1 @y = (*spectrum) << scaleSpec
+ VEXT.32 Q12, Q11, Q12, #3
+ SUBS r7 , r7 , #1
- VADD.I64 D6,D2,D3
- VEXT.32 Q11,Q6,Q11,#3
- VSHR.S64 D6,#32
+ VADD.I64 D6, D2, D3
+ VEXT.32 Q11, Q6, Q11, #3
+ VSHR.S64 D6, #32
- @VMOV R11,D6[0]
- VST1.32 D6[0],[SP]
- LDR R11,[SP]
- SUB r8 , r8 , r11,lsl #1 @y=sub32(y,(acc<<1))
+ @VMOV R11,D6[0]
+ VST1.32 D6[0], [SP]
+ LDR R11, [SP]
+ SUB r8 , r8 , r11, lsl #1 @y=sub32(y,(acc<<1))
- MOV r2 , r8 ,lsl r6 @ shl32(y, shift_value)
+ MOV r2 , r8 , lsl r6 @ shl32(y, shift_value)
- MOV r9, r8, asr r1
- VMOV.32 D15[1], R2 @state[0]
+ MOV r9, r8, asr r1
+ VMOV.32 D15[1], R2 @state[0]
- STR r9 , [r0],#4 @*spectrum = y@
- VEXT.32 Q6,Q7,Q6,#3
- LDRGT r8 , [r0] @r8 = y = *spectrum
+ STR r9 , [r0], #4 @*spectrum = y@
+ VEXT.32 Q6, Q7, Q6, #3
+ LDRGT r8 , [r0] @r8 = y = *spectrum
- BGT OUTER_LOOP2_16
+ BGT OUTER_LOOP2_16
- B EXIT
+ B EXIT
ORDER20:
- LDR r8 , [r0] @r8 = y = *spectrum
+ LDR r8 , [r0] @r8 = y = *spectrum
OUTER_LOOP2_20:
- VDUP.32 Q1,R14 @Q1= accu = 0
+ VDUP.32 Q1, R14 @Q1= accu = 0
- VMLAL.S32 Q1, D10, D12
- VMLAL.S32 Q1, D11, D13
- VMLAL.S32 Q1, D22, D18
- VMLAL.S32 Q1, D23, D19
- VMLAL.S32 Q1, D24, D20
- VMLAL.S32 Q1, D25, D21
- VMLAL.S32 Q1, D28, D26 @
- VMLAL.S32 Q1, D29, D27 @ @order16
- VMLAL.S32 Q1, D8, D4 @order20
- VMLAL.S32 Q1, D9, D5 @order20
+ VMLAL.S32 Q1, D10, D12
+ VMLAL.S32 Q1, D11, D13
+ VMLAL.S32 Q1, D22, D18
+ VMLAL.S32 Q1, D23, D19
+ VMLAL.S32 Q1, D24, D20
+ VMLAL.S32 Q1, D25, D21
+ VMLAL.S32 Q1, D28, D26 @
+ VMLAL.S32 Q1, D29, D27 @ @order16
+ VMLAL.S32 Q1, D8, D4 @order20
+ VMLAL.S32 Q1, D9, D5 @order20
- VEXT.32 Q4,Q14,Q4,#3 @ @for order20
- VEXT.32 Q14,Q12,Q14,#3 @ @for order16
- MOV r8, r8, lsl r1 @y = (*spectrum) << scaleSpec
- VEXT.32 Q12,Q11,Q12,#3 @order12
- SUBS r7 , r7 , #1
+ VEXT.32 Q4, Q14, Q4, #3 @ @for order20
+ VEXT.32 Q14, Q12, Q14, #3 @ @for order16
+ MOV r8, r8, lsl r1 @y = (*spectrum) << scaleSpec
+ VEXT.32 Q12, Q11, Q12, #3 @order12
+ SUBS r7 , r7 , #1
- VADD.I64 D6,D2,D3
- VEXT.32 Q11,Q6,Q11,#3 @order8
- VSHR.S64 D6,#32
+ VADD.I64 D6, D2, D3
+ VEXT.32 Q11, Q6, Q11, #3 @order8
+ VSHR.S64 D6, #32
- @VMOV R11,D6[0]
- VST1.32 D6[0],[SP]
- LDR R11,[SP]
- SUB r8 , r8 , r11,lsl #1 @y=sub32(y,(acc<<1))
+ @VMOV R11,D6[0]
+ VST1.32 D6[0], [SP]
+ LDR R11, [SP]
+ SUB r8 , r8 , r11, lsl #1 @y=sub32(y,(acc<<1))
- MOV r2 , r8 ,lsl r6 @ shl32(y, shift_value)
+ MOV r2 , r8 , lsl r6 @ shl32(y, shift_value)
- MOV r9, r8, asr r1
- VMOV.32 D15[1], R2 @state[0]
+ MOV r9, r8, asr r1
+ VMOV.32 D15[1], R2 @state[0]
- STR r9 , [r0],#4 @*spectrum = y@
- VEXT.32 Q6,Q7,Q6,#3
- LDRGT r8 , [r0] @r8 = y = *spectrum
+ STR r9 , [r0], #4 @*spectrum = y@
+ VEXT.32 Q6, Q7, Q6, #3
+ LDRGT r8 , [r0] @r8 = y = *spectrum
- BGT OUTER_LOOP2_20
+ BGT OUTER_LOOP2_20
- B EXIT
+ B EXIT
NEG_INC:
@ filtering loop for inc = -1
- LDR r8 , [r0] @r8 =*spectrum
- SUBS r7 , r7 , #1
- MOV r8, r8, lsl r1
- MOV r9, r8, asr r1
- MOV r8 , r8 ,lsl r6
- STR r8 , [r12] @state[0] = sp[top]
- STR r9, [r0], #-4
- BEQ NEGFILTER_LOOP2
+ LDR r8 , [r0] @r8 =*spectrum
+ SUBS r7 , r7 , #1
+ MOV r8, r8, lsl r1
+ MOV r9, r8, asr r1
+ MOV r8 , r8 , lsl r6
+ STR r8 , [r12] @state[0] = sp[top]
+ STR r9, [r0], #-4
+ BEQ NEGFILTER_LOOP2
NEGFILTER_LOOP1:
- LDR r8 , [r0] @r8 =*spectrum
- SUB r5 , r4 , r7 @
- MOV r5 , r5 ,lsl #2
- MOV r11 , #0 @accu = 0
- ADD r14, r12, r5 @state[j]
+ LDR r8 , [r0] @r8 =*spectrum
+ SUB r5 , r4 , r7 @
+ MOV r5 , r5 , lsl #2
+ MOV r11 , #0 @accu = 0
+ ADD r14, r12, r5 @state[j]
NEGINNER_LOOP1:
- LDR r10 , [r14,#-4] @state[j-1]
- LDR r9 , [r3 , r5] @lpc[j]
- SUBS r5 , r5 , #4
-
- MOV r2, #0
- SMLAL r2 , r11, r10, r9
- STR r10 , [r14], #-4 @state[j] = state[j - 1]
- BGT NEGINNER_LOOP1
-
- MOV r8, r8, lsl r1
- SUB r8 , r8 , r11,lsl #1
- MOV r9, r8, asr r1
- STR r9 , [r0], #-4 @*spectrum = y@
- SUBS r7 , r7 , #1 @i--
- MOV r8 , r8 ,lsl r6
- STR r8 , [r12] @state[0]
- BGT NEGFILTER_LOOP1
+ LDR r10 , [r14, #-4] @state[j-1]
+ LDR r9 , [r3 , r5] @lpc[j]
+ SUBS r5 , r5 , #4
+
+ MOV r2, #0
+ SMLAL r2 , r11, r10, r9
+ STR r10 , [r14], #-4 @state[j] = state[j - 1]
+ BGT NEGINNER_LOOP1
+
+ MOV r8, r8, lsl r1
+ SUB r8 , r8 , r11, lsl #1
+ MOV r9, r8, asr r1
+ STR r9 , [r0], #-4 @*spectrum = y@
+ SUBS r7 , r7 , #1 @i--
+ MOV r8 , r8 , lsl r6
+ STR r8 , [r12] @state[0]
+ BGT NEGFILTER_LOOP1
NEGFILTER_LOOP2:
- LDR R1, [sp] @size
- SUBS R7 , R1 , r4 @size-order
- BEQ EXIT
+ LDR R1, [sp] @size
+ SUBS R7 , R1 , r4 @size-order
+ BEQ EXIT
- ADD R8, R3, #4
+ ADD R8, R3, #4
- MOV R14,#0
- VLD1.32 {D10, D11}, [R8]! @lpc[j]
- MOV R5 , R4 ,LSL #2 @count for inner loop = order
+ MOV R14, #0
+ VLD1.32 {D10, D11}, [R8]! @lpc[j]
+ MOV R5 , R4 , LSL #2 @count for inner loop = order
- LDR R1, [sp,#240] @scaleSpec
+ LDR R1, [sp, #240] @scaleSpec
- CMP R4,#4
- VLD1.32 {D12, D13}, [R12]! @state[j - 1]
- BEQ NEGORDER4
+ CMP R4, #4
+ VLD1.32 {D12, D13}, [R12]! @state[j - 1]
+ BEQ NEGORDER4
- VLD1.32 {D18, D19}, [R8]!
- CMP R4,#8
+ VLD1.32 {D18, D19}, [R8]!
+ CMP R4, #8
- VLD1.32 {D22, D23}, [R12]!
- BEQ NEGORDER8
+ VLD1.32 {D22, D23}, [R12]!
+ BEQ NEGORDER8
- VLD1.32 {D20, D21}, [R8]!
- CMP R4,#12
+ VLD1.32 {D20, D21}, [R8]!
+ CMP R4, #12
- VLD1.32 {D24, D25}, [R12]!
- BEQ NEGORDER12
+ VLD1.32 {D24, D25}, [R12]!
+ BEQ NEGORDER12
NEGORDER4:
- LDR r8 , [r0] @r8 = y = *spectrum
+ LDR r8 , [r0] @r8 = y = *spectrum
NEGOUTER_LOOP2_4:
- VDUP.32 Q1,R14 @Q1= accu = 0
+ VDUP.32 Q1, R14 @Q1= accu = 0
- VMLAL.S32 Q1, D10, D12
- VMLAL.S32 Q1, D11, D13
- MOV r8, r8, lsl r1 @y = (*spectrum) << scaleSpec
- SUBS r7 , r7 , #1
+ VMLAL.S32 Q1, D10, D12
+ VMLAL.S32 Q1, D11, D13
+ MOV r8, r8, lsl r1 @y = (*spectrum) << scaleSpec
+ SUBS r7 , r7 , #1
- VADD.I64 D6,D2,D3
- VSHR.S64 D6,#32
+ VADD.I64 D6, D2, D3
+ VSHR.S64 D6, #32
- @VMOV R11,D6[0]
- VST1.32 D6[0],[SP]
- LDR R11,[SP]
- SUB r8 , r8 , r11,lsl #1 @y=sub32(y,(acc<<1))
+ @VMOV R11,D6[0]
+ VST1.32 D6[0], [SP]
+ LDR R11, [SP]
+ SUB r8 , r8 , r11, lsl #1 @y=sub32(y,(acc<<1))
- MOV r2 , r8 ,lsl r6
+ MOV r2 , r8 , lsl r6
- VMOV.32 D15[1], R2
- MOV r9, r8, asr r1
+ VMOV.32 D15[1], R2
+ MOV r9, r8, asr r1
- STR r9 , [r0],#-4 @*spectrum = y@
- VEXT.32 Q6,Q7,Q6,#3
- LDRGT r8 , [r0] @r8 = y = *spectrum
+ STR r9 , [r0], #-4 @*spectrum = y@
+ VEXT.32 Q6, Q7, Q6, #3
+ LDRGT r8 , [r0] @r8 = y = *spectrum
- BGT NEGOUTER_LOOP2_4
+ BGT NEGOUTER_LOOP2_4
- B EXIT
+ B EXIT
NEGORDER8:
- LDR r8 , [r0] @r8 = y = *spectrum
+ LDR r8 , [r0] @r8 = y = *spectrum
NEGOUTER_LOOP2_8:
- VDUP.32 Q1,R14 @Q1= accu = 0
+ VDUP.32 Q1, R14 @Q1= accu = 0
- VMLAL.S32 Q1, D10, D12
- VMLAL.S32 Q1, D11, D13
- VMLAL.S32 Q1, D22, D18
- VMLAL.S32 Q1, D23, D19
+ VMLAL.S32 Q1, D10, D12
+ VMLAL.S32 Q1, D11, D13
+ VMLAL.S32 Q1, D22, D18
+ VMLAL.S32 Q1, D23, D19
- MOV r8, r8, lsl r1 @y = (*spectrum) << scaleSpec
- VEXT.32 Q11,Q6,Q11,#3
- SUBS r7 , r7 , #1
+ MOV r8, r8, lsl r1 @y = (*spectrum) << scaleSpec
+ VEXT.32 Q11, Q6, Q11, #3
+ SUBS r7 , r7 , #1
- VADD.I64 D6,D2,D3
+ VADD.I64 D6, D2, D3
- VSHR.S64 D6,#32
+ VSHR.S64 D6, #32
- @VMOV R11,D6[0]
- VST1.32 D6[0],[SP]
- LDR R11,[SP]
- SUB r8 , r8 , r11,lsl #1 @y=sub32(y,(acc<<1))
- MOV r2 , r8 ,lsl r6 @ shl32(y, shift_value)
+ @VMOV R11,D6[0]
+ VST1.32 D6[0], [SP]
+ LDR R11, [SP]
+ SUB r8 , r8 , r11, lsl #1 @y=sub32(y,(acc<<1))
+ MOV r2 , r8 , lsl r6 @ shl32(y, shift_value)
- VMOV.32 D15[1], R2 @state[0]
- MOV r9, r8, asr r1
+ VMOV.32 D15[1], R2 @state[0]
+ MOV r9, r8, asr r1
- STR r9 , [r0],#-4 @*spectrum = y@
- VEXT.32 Q6,Q7,Q6,#3
- LDRGT r8 , [r0] @r8 = y = *spectrum
+ STR r9 , [r0], #-4 @*spectrum = y@
+ VEXT.32 Q6, Q7, Q6, #3
+ LDRGT r8 , [r0] @r8 = y = *spectrum
- BGT NEGOUTER_LOOP2_8
+ BGT NEGOUTER_LOOP2_8
- B EXIT
+ B EXIT
NEGORDER12:
- LDR r8 , [r0] @r8 = y = *spectrum
+ LDR r8 , [r0] @r8 = y = *spectrum
NEGOUTER_LOOP2_12:
- VDUP.32 Q1,R14 @Q1= accu = 0
+ VDUP.32 Q1, R14 @Q1= accu = 0
- VMLAL.S32 Q1, D10, D12
- VMLAL.S32 Q1, D11, D13
- VMLAL.S32 Q1, D22, D18
- VMLAL.S32 Q1, D23, D19
- VMLAL.S32 Q1, D24, D20
- VMLAL.S32 Q1, D25, D21
+ VMLAL.S32 Q1, D10, D12
+ VMLAL.S32 Q1, D11, D13
+ VMLAL.S32 Q1, D22, D18
+ VMLAL.S32 Q1, D23, D19
+ VMLAL.S32 Q1, D24, D20
+ VMLAL.S32 Q1, D25, D21
- MOV r8, r8, lsl r1 @y = (*spectrum) << scaleSpec
- VEXT.32 Q12,Q11,Q12,#3
- SUBS r7 , r7 , #1
+ MOV r8, r8, lsl r1 @y = (*spectrum) << scaleSpec
+ VEXT.32 Q12, Q11, Q12, #3
+ SUBS r7 , r7 , #1
- VADD.I64 D6,D2,D3
- VEXT.32 Q11,Q6,Q11,#3
- VSHR.S64 D6,#32
+ VADD.I64 D6, D2, D3
+ VEXT.32 Q11, Q6, Q11, #3
+ VSHR.S64 D6, #32
- @VMOV R11,D6[0]
- VST1.32 D6[0],[SP]
- LDR R11,[SP]
- SUB r8 , r8 , r11,lsl #1 @y=sub32(y,(acc<<1))
+ @VMOV R11,D6[0]
+ VST1.32 D6[0], [SP]
+ LDR R11, [SP]
+ SUB r8 , r8 , r11, lsl #1 @y=sub32(y,(acc<<1))
- MOV r2 , r8 ,lsl r6 @ shl32(y, shift_value)
+ MOV r2 , r8 , lsl r6 @ shl32(y, shift_value)
- VMOV.32 D15[1], R2 @state[0]
- MOV r9, r8, asr r1
+ VMOV.32 D15[1], R2 @state[0]
+ MOV r9, r8, asr r1
- STR r9 , [r0],#-4 @*spectrum = y@
- VEXT.32 Q6,Q7,Q6,#3
- LDRGT r8 , [r0] @r8 = y = *spectrum
+ STR r9 , [r0], #-4 @*spectrum = y@
+ VEXT.32 Q6, Q7, Q6, #3
+ LDRGT r8 , [r0] @r8 = y = *spectrum
- BGT NEGOUTER_LOOP2_12
+ BGT NEGOUTER_LOOP2_12
EXIT:
- ADD sp, sp ,#128
- vpop {d8-d15}
- LDMFD r13!, {r4 - r12, r15}
+ ADD sp, sp , #128
+ vpop {d8-d15}
+ LDMFD r13!, {r4 - r12, r15}
diff --git a/decoder/armv8/ixheaacd_apply_scale_factors.s b/decoder/armv8/ixheaacd_apply_scale_factors.s
index 0c87aff..82c0c97 100644
--- a/decoder/armv8/ixheaacd_apply_scale_factors.s
+++ b/decoder/armv8/ixheaacd_apply_scale_factors.s
@@ -32,7 +32,7 @@ ixheaacd_scale_factor_process_armv8:
MOV x21, x6
MOV x22, x7
- CMP x2, #0 // Tbands
+ CMP x2, #0 // Tbands
BGT lbl17
@@ -50,7 +50,7 @@ ADD_34:
TBANDS_LOOP:
LDRSH x5, [x1], #2 // scale_factor = *Scfactor++;
- LDRB w4, [x3], #1 //Offset [1]
+ LDRB w4, [x3], #1 //Offset [1]
sxtw x4, w4
@@ -149,8 +149,8 @@ SHIFT_NEGTIVE: //;loop over sfbWidth a multiple of 4
ASR x6, x6, #16
ASR x7, x7, #16
- LSL x6, x6, #2 // shl for fixmul_32x16b and shl32(buffer,1)
- LSL x7, x7, #2 // shl for fixmul_32x16b and shl32(buffer,1)
+ LSL x6, x6, #2 // shl for fixmul_32x16b and shl32(buffer,1)
+ LSL x7, x7, #2 // shl for fixmul_32x16b and shl32(buffer,1)
STP w6, w7, [x0], #8 // *x_invquant++ = buffex1;
diff --git a/decoder/armv8/ixheaacd_cos_sin_mod_loop2.s b/decoder/armv8/ixheaacd_cos_sin_mod_loop2.s
index 294dcc2..a48a705 100644
--- a/decoder/armv8/ixheaacd_cos_sin_mod_loop2.s
+++ b/decoder/armv8/ixheaacd_cos_sin_mod_loop2.s
@@ -131,9 +131,9 @@ ixheaacd_cos_sin_mod_loop2:
LOOP1:
LD1 {v2.2s}, [x0]
LD1 {v3.2s}, [x10]
- LDR w5, [x3] //RE2
+ LDR w5, [x3] //RE2
sxtw x5, w5
- LDR w6, [x11] //RE3
+ LDR w6, [x11] //RE3
sxtw x6, w6
//VTRN.32 D2, D3
TRN1 v4.2s, v2.2s, v3.2s
diff --git a/decoder/armv8/ixheaacd_function_selector_armv8.c b/decoder/armv8/ixheaacd_function_selector_armv8.c
index 86592d3..bf28a30 100644
--- a/decoder/armv8/ixheaacd_function_selector_armv8.c
+++ b/decoder/armv8/ixheaacd_function_selector_armv8.c
@@ -229,20 +229,20 @@ VOID(*ixheaacd_aac_ld_dec_rearrange)
(WORD32 *ip, WORD32 *op, WORD32 mdct_len_2,
UWORD8 *re_arr_tab) = &ixheaacd_rearrange_dec;
-VOID (*ixheaacd_fft32x32_ld)
+VOID(*ixheaacd_fft32x32_ld)
(ia_aac_dec_imdct_tables_struct *imdct_tables_ptr, WORD32 npoints,
WORD32 *ptr_x, WORD32 *ptr_y) = &ixheaacd_imdct_using_fft_armv8;
-VOID (*ixheaacd_fft32x32_ld2)
+VOID(*ixheaacd_fft32x32_ld2)
(ia_aac_dec_imdct_tables_struct *imdct_tables_ptr, WORD32 npoints,
WORD32 *ptr_x, WORD32 *ptr_y) = &ixheaacd_fft32x32_ld2_armv8;
WORD16 (*ixheaacd_neg_expo_inc)(WORD16 neg_expo) = &ixheaacd_neg_expo_inc_arm;
-VOID (*ixheaacd_inv_dit_fft_8pt)
+VOID(*ixheaacd_inv_dit_fft_8pt)
(WORD32 *x, WORD32 *real, WORD32 *imag) = &ixheaacd_inv_dit_fft_8pt_armv8;
-VOID (*ixheaacd_scale_factor_process)
+VOID(*ixheaacd_scale_factor_process)
(WORD32 *x_invquant, WORD16 *scale_fact, WORD no_band, WORD8 *width,
WORD32 *scale_tables_ptr, WORD32 total_channels, WORD32 object_type,
WORD32 aac_sf_data_resil_flag) = &ixheaacd_scale_factor_process_armv8; \ No newline at end of file
diff --git a/decoder/armv8/ixheaacd_post_twiddle_overlap.s b/decoder/armv8/ixheaacd_post_twiddle_overlap.s
index aa6b70f..8ddce48 100644
--- a/decoder/armv8/ixheaacd_post_twiddle_overlap.s
+++ b/decoder/armv8/ixheaacd_post_twiddle_overlap.s
@@ -1,43 +1,43 @@
.macro push_v_regs
- stp q8, q9, [sp, #-32]!
- stp q10, q11, [sp, #-32]!
- stp q12, q13, [sp, #-32]!
- stp q14, q15, [sp, #-32]!
+ stp q8, q9, [sp, #-32]!
+ stp q10, q11, [sp, #-32]!
+ stp q12, q13, [sp, #-32]!
+ stp q14, q15, [sp, #-32]!
//st1 { v8.2d, v9.2d, v10.2d, v11.2d}, [sp, #-64]!
//st1 {v12.2d, v13.2d, v14.2d, v15.2d}, [sp, #-64]!
- stp X8, X9, [sp, #-16]!
- stp X10, X11, [sp, #-16]!
- stp X12, X13, [sp, #-16]!
- stp X14, X15, [sp, #-16]!
- stp X16, X17, [sp, #-16]!
- stp X18, X19, [sp, #-16]!
- stp X20, X21, [sp, #-16]!
- stp X22, X23, [sp, #-16]!
- stp X24, X25, [sp, #-16]!
- stp X26, X27, [sp, #-16]!
- stp X28, X29, [sp, #-16]!
- stp X30, X29, [sp, #-16]!
+ stp X8, X9, [sp, #-16]!
+ stp X10, X11, [sp, #-16]!
+ stp X12, X13, [sp, #-16]!
+ stp X14, X15, [sp, #-16]!
+ stp X16, X17, [sp, #-16]!
+ stp X18, X19, [sp, #-16]!
+ stp X20, X21, [sp, #-16]!
+ stp X22, X23, [sp, #-16]!
+ stp X24, X25, [sp, #-16]!
+ stp X26, X27, [sp, #-16]!
+ stp X28, X29, [sp, #-16]!
+ stp X30, X29, [sp, #-16]!
.endm
.macro pop_v_regs
- ldp X30, X29, [sp], #16
- ldp X28, X29, [sp], #16
- ldp X26, X27, [sp], #16
- ldp X24, X25, [sp], #16
- ldp X22, X23, [sp], #16
- ldp X20, X21, [sp], #16
- ldp X18, X19, [sp], #16
- ldp X16, X17, [sp], #16
- ldp X14, X15, [sp], #16
- ldp X12, X13, [sp], #16
- ldp X10, X11, [sp], #16
- ldp X8, X9, [sp], #16
+ ldp X30, X29, [sp], #16
+ ldp X28, X29, [sp], #16
+ ldp X26, X27, [sp], #16
+ ldp X24, X25, [sp], #16
+ ldp X22, X23, [sp], #16
+ ldp X20, X21, [sp], #16
+ ldp X18, X19, [sp], #16
+ ldp X16, X17, [sp], #16
+ ldp X14, X15, [sp], #16
+ ldp X12, X13, [sp], #16
+ ldp X10, X11, [sp], #16
+ ldp X8, X9, [sp], #16
//ld1 {v12.2d, v13.2d, v14.2d, v15.2d}, [sp], #64
//ld1 { v8.2d, v9.2d, v10.2d, v11.2d}, [sp], #64
- ldp q14, q15, [sp], #32
- ldp q12, q13, [sp], #32
- ldp q10, q11, [sp], #32
- ldp q8, q9, [sp], #32
+ ldp q14, q15, [sp], #32
+ ldp q12, q13, [sp], #32
+ ldp q10, q11, [sp], #32
+ ldp q8, q9, [sp], #32
.endm
@@ -58,32 +58,32 @@ ixheaacd_post_twid_overlap_add_armv8:
//sxtw x5,w5
//LDR w6, [sp, #108]
//sxtw x6,w6
- MOV x16, x5
- MOV x17, x7
+ MOV x16, x5
+ MOV x17, x7
LSL x9, x3, #2
ASR x9, x9, #1
ADD x6, x6, x9
SUB x6, x6, #4
- LDR w8, =7500
- sxtw x8,w8
+ LDR w8, =7500
+ sxtw x8, w8
ADD x2, x2, x8
- movi v18.4h, #50
- sub x20, x5, #15
- neg x9, x20
- movi v20.4s, #0x80, LSL #8
- dup v16.4s,w5
+ movi v18.4h, #50
+ sub x20, x5, #15
+ neg x9, x20
+ movi v20.4s, #0x80, LSL #8
+ dup v16.4s, w5
SUB x5, x5, #16
//STR w5, [sp, #116]
- MOV w25, w5
- sxtw x25,w25
+ MOV w25, w5
+ sxtw x25, w25
MOV x8, #1
LSL x8, x8, x9
//STR w8, [sp, #120]
- MOV w26, w8
+ MOV w26, w8
//sxtw x8,w8
@@ -91,32 +91,32 @@ ixheaacd_post_twid_overlap_add_armv8:
ARM_PROLOGUE:
- LDR w8, [x1], #4
- sxtw x8,w8
- LDR w9, [x1], #4
- sxtw x9,w9
+ LDR w8, [x1], #4
+ sxtw x8, w8
+ LDR w9, [x1], #4
+ sxtw x9, w9
- LDR w10, [x2], #4
- sxtw x10,w10
+ LDR w10, [x2], #4
+ sxtw x10, w10
- AND w19,w10,0xFFFF
- sxth x19,w19
- ASR w10,w10,#16
+ AND w19, w10, 0xFFFF
+ sxth x19, w19
+ ASR w10, w10, #16
// SMULWT x11, x8, x10
//
// SMULWB x12, x9, x10
// SMULWB x5, x8, x10
// SMLAWT x7, x9, x10, x5
- SMULL x11, w8, w10
- ASR x11,x11,#16
- SMULL x12, w9, w19
- ASR x12,x12,#16
- SMULL x5, w8, w19
- ASR x5,x5,#16
- SMULL x7, w9, w10
- ASR x7, x7, #16
- ADD x7, x7, x5
+ SMULL x11, w8, w10
+ ASR x11, x11, #16
+ SMULL x12, w9, w19
+ ASR x12, x12, #16
+ SMULL x5, w8, w19
+ ASR x5, x5, #16
+ SMULL x7, w9, w10
+ ASR x7, x7, #16
+ ADD x7, x7, x5
SUB x8, x12, x11
MVN x5, x7
@@ -125,87 +125,87 @@ ARM_PROLOGUE:
MOV x9, #50
MOV x12, #-50
- AND w19,w9,0xFFFF
- sxth x19,w19
- SMULL x10, w5, w19
- ASR x10,x10,#16
- AND w19,w12,0xFFFF
- sxth x19,w19
- SMULL x11, w8, w19
- ASR x11,x11,#16
+ AND w19, w9, 0xFFFF
+ sxth x19, w19
+ SMULL x10, w5, w19
+ ASR x10, x10, #16
+ AND w19, w12, 0xFFFF
+ sxth x19, w19
+ SMULL x11, w8, w19
+ ASR x11, x11, #16
ADD x8, x8, x10
ADD x5, x5, x11
//LDR w11, [sp, #104]
- MOV w11, w16
- sxth x11,w11
- LDR w10, [x6], #-32
- sxtw x10,w10
+ MOV w11, w16
+ sxth x11, w11
+ LDR w10, [x6], #-32
+ sxtw x10, w10
- AND w19,w10,0xFFFF
- sxth x19,w19
- ASR w20,w10,#16
+ AND w19, w10, 0xFFFF
+ sxth x19, w19
+ ASR w20, w10, #16
//SMULWB x7, x8, x10
- SMULL x7, w8, w19
- ASR x7, x7, #16
+ SMULL x7, w8, w19
+ ASR x7, x7, #16
MVN x8, x8
ADD x8, x8, #1
//SMULWT x12, x8, x10
- SMULL x12, w8, w20
- ASR x12, x12, #16
+ SMULL x12, w8, w20
+ ASR x12, x12, #16
CMP x11, #0
BLT NEXT
- SUB x9, x11, #16
- negs x9,x9
+ SUB x9, x11, #16
+ negs x9, x9
- // LDR w8, [sp, #120]
+ // LDR w8, [sp, #120]
//sxtw x8,w8
- MOV v1.s[0], w26
- MOV v2.s[0], w5
+ MOV v1.s[0], w26
+ MOV v2.s[0], w5
//sQADD w5, w5, w8
//ASR w5, w5, w9
- SQADD v2.2s, v2.2s, v1.2s
- MOV w5, v2.s[0]
+ SQADD v2.2s, v2.2s, v1.2s
+ MOV w5, v2.s[0]
ASR w5, w5, w9
- SUB x9, x11, #31
- negs x9,x9
- ASR x20, x7, x9
+ SUB x9, x11, #31
+ negs x9, x9
+ ASR x20, x7, x9
//MOV x8, x20
ADDS x8, x20, #0
- BGE NEXT2
- CMN x8, #1
+ BGE NEXT2
+ CMN x8, #1
NEXT2:
- LDR x20,=0x80000000
- csel x7, x20, x7,LT
- LDR x20,=0x7fffffff
- csel x7, x20, x7,GT
- LSL x20, x7, x11
- csel x7,x20,x7,EQ
-
- SUB x9, x11, #31
- negs x9,x9
- ASR x20, x12, x9
+ LDR x20, =0x80000000
+ csel x7, x20, x7, LT
+ LDR x20, =0x7fffffff
+ csel x7, x20, x7, GT
+ LSL x20, x7, x11
+ csel x7, x20, x7, EQ
+
+ SUB x9, x11, #31
+ negs x9, x9
+ ASR x20, x12, x9
//MOV x8, x20
ADDS x8, x20, #0
- BGE NEXT3
- CMN x8, #1
+ BGE NEXT3
+ CMN x8, #1
NEXT3:
- LDR x20,=0x80000000
- csel x12, x20, x12,LT
- LDR x20,=0x7fffffff
- csel x12, x20, x12,GT
- LSL x20, x12, x11
- csel x12,x20,x12,EQ
+ LDR x20, =0x80000000
+ csel x12, x20, x12, LT
+ LDR x20, =0x7fffffff
+ csel x12, x20, x12, GT
+ LSL x20, x12, x11
+ csel x12, x20, x12, EQ
B NEXT1
NEXT:
@@ -214,83 +214,83 @@ NEXT:
ASR w5, w5, w11
MOV w8, #0x8000
- MOV v1.s[0], w8
- MOV v2.s[0], w5
+ MOV v1.s[0], w8
+ MOV v2.s[0], w5
//QADD x5, x5, x8
- SQADD v2.2s, v2.2s, v1.2s
- MOV w5, v2.s[0]
+ SQADD v2.2s, v2.2s, v1.2s
+ MOV w5, v2.s[0]
ASR w5, w5, #16
ASR w7, w7, w11
ASR w12, w12, w11
NEXT1:
- LDR w9, [x4]
- sxtw x9,w9
+ LDR w9, [x4]
+ sxtw x9, w9
MOV w8, #0x8000
//sxtw x8,w8
- STR w5, [x4], #4
- sxtw x5,w5
+ STR w5, [x4], #4
+ sxtw x5, w5
- ROR w20, w10, #16
+ ROR w20, w10, #16
//UXTH x5, x10, ROR #16
UXTH w5, w20
UXTH w10, w10
- dup v0.2s,w9
- dup v2.2s,w10
- dup v3.2s,w5
+ dup v0.2s, w9
+ dup v2.2s, w10
+ dup v3.2s, w5
//VZIP.32 D2, D3
- ZIP1 v28.2s, v2.2s, v3.2s
- ZIP2 v3.2s, v2.2s, v3.2s
- MOV v2.8b, v28.8b
- sMULL v0.2d, v2.2s, v0.2s
- Sqxtn v8.2s, v0.2d
+ ZIP1 v28.2s, v2.2s, v3.2s
+ ZIP2 v3.2s, v2.2s, v3.2s
+ MOV v2.8b, v28.8b
+ sMULL v0.2d, v2.2s, v0.2s
+ Sqxtn v8.2s, v0.2d
- dup v0.2s,w12
- dup v1.2s,w7
+ dup v0.2s, w12
+ dup v1.2s, w7
//VZIP.32 D0, D1
- ZIP1 v28.2s, v0.2s, v1.2s
- ZIP2 v1.2s, v0.2s, v1.2s
- MOV v0.8b, v28.8b
+ ZIP1 v28.2s, v0.2s, v1.2s
+ ZIP2 v1.2s, v0.2s, v1.2s
+ MOV v0.8b, v28.8b
- SQSUB v8.2s, v0.2s , v8.2s
+ SQSUB v8.2s, v0.2s , v8.2s
- sQshL v8.2s, v8.2s,#2
- dup v0.2s,w8
- SQADD v8.2s, v8.2s , v0.2s
- sshR v8.2s, v8.2s,#16
+ sQshL v8.2s, v8.2s, #2
+ dup v0.2s, w8
+ SQADD v8.2s, v8.2s , v0.2s
+ sshR v8.2s, v8.2s, #16
- MOV x7, x17
+ MOV x7, x17
//sxtw x7,w7
LSL x10, x7, #1
ASR x5, x3, #1
//SMULBB x5, x10, x5
- AND w5,w5,0xFFFF
- sxth x5,w5
- AND w19,w10,0xFFFF
- sxth x19,w19
- SMULL x5, w19, w5
+ AND w5, w5, 0xFFFF
+ sxth x5, w5
+ AND w19, w10, 0xFFFF
+ sxth x19, w19
+ SMULL x5, w19, w5
ADD x5, x5, x0
SUB x0, x5, x10
MVN x9, x10
ADD x9, x9, #1
- ST1 {v8.h}[2],[x0], x9
- ST1 {v8.h}[0],[x5], x10
+ ST1 {v8.h}[2], [x0], x9
+ ST1 {v8.h}[0], [x5], x10
MOV x8, x1
@@ -311,875 +311,875 @@ PROLOGUE_NEON:
ASR x3, x3, #2
SUB x3, x3, #2
- LD2 { v0.4s, v1.4s}, [x1]
- MOV v2.16b, v1.16b
+ LD2 { v0.4s, v1.4s}, [x1]
+ MOV v2.16b, v1.16b
ADD x1, x1, x12
//VUZP.16 D0, D1
UZP1 v28.8h, v0.8h, v0.8h
UZP2 v29.8h, v0.8h, v0.8h
- MOV v0.d[0], v28.d[0]
- MOV v0.d[1], v29.d[0]
+ MOV v0.d[0], v28.d[0]
+ MOV v0.d[1], v29.d[0]
//VUZP.16 D2, D3
UZP1 v28.8h, v2.8h, v2.8h
UZP2 v29.8h, v2.8h, v2.8h
- MOV v2.d[0], v28.d[0]
- MOV v2.d[1], v29.d[0]
+ MOV v2.d[0], v28.d[0]
+ MOV v2.d[1], v29.d[0]
//rev64 v0.8h, v0.8h
- rev64 v0.8h, v0.8h
- MOV v1.d[0], v0.d[1]
- rev64 v2.8h, v2.8h
- MOV v3.d[0], v2.d[1]
- LD2 {v8.4h, v9.4h}, [x2]
- ADD x2, x2, #16
-
- LD2 { v4.4s, v5.4s}, [x8]
- MOV v6.16b, v5.16b
- ADD x8, x8,#32
- uMULL v30.4s, v0.4h, v9.4h
+ rev64 v0.8h, v0.8h
+ MOV v1.d[0], v0.d[1]
+ rev64 v2.8h, v2.8h
+ MOV v3.d[0], v2.d[1]
+ LD2 {v8.4h, v9.4h}, [x2]
+ ADD x2, x2, #16
+
+ LD2 { v4.4s, v5.4s}, [x8]
+ MOV v6.16b, v5.16b
+ ADD x8, x8, #32
+ uMULL v30.4s, v0.4h, v9.4h
// VUZP.16 D4, D5
UZP1 v28.8h, v4.8h, v4.8h
UZP2 v29.8h, v4.8h, v4.8h
- MOV v4.d[0], v28.d[0]
- MOV v5.d[0], v29.d[0]
+ MOV v4.d[0], v28.d[0]
+ MOV v5.d[0], v29.d[0]
- uMULL v28.4s, v2.4h, v8.4h
+ uMULL v28.4s, v2.4h, v8.4h
// VUZP.16 D6, D7
UZP1 v26.8h, v6.8h, v6.8h
UZP2 v27.8h, v6.8h, v6.8h
- MOV v6.d[0], v26.d[0]
- MOV v7.d[0], v27.d[0]
+ MOV v6.d[0], v26.d[0]
+ MOV v7.d[0], v27.d[0]
- uMULL v26.4s, v0.4h, v8.4h
+ uMULL v26.4s, v0.4h, v8.4h
- uMULL v24.4s, v2.4h, v9.4h
+ uMULL v24.4s, v2.4h, v9.4h
- LD2 { v10.4s, v11.4s}, [x6]
- MOV v12.16b, v11.16b
- ADD x6, x6, x12
- ushR v30.4s, v30.4s,#16
+ LD2 { v10.4s, v11.4s}, [x6]
+ MOV v12.16b, v11.16b
+ ADD x6, x6, x12
+ ushR v30.4s, v30.4s, #16
//VUZP.16 D10, D11
UZP1 v22.8h, v10.8h, v10.8h
UZP2 v23.8h, v10.8h, v10.8h
- MOV v10.d[0], v22.d[0]
- MOV v10.d[1], v23.d[0]
+ MOV v10.d[0], v22.d[0]
+ MOV v10.d[1], v23.d[0]
- ushR v28.4s, v28.4s,#16
+ ushR v28.4s, v28.4s, #16
//VUZP.16 D12, D13
UZP1 v22.8h, v12.8h, v12.8h
UZP2 v23.8h, v12.8h, v12.8h
- MOV v12.d[0], v22.d[0]
- MOV v12.d[1], v23.d[0]
+ MOV v12.d[0], v22.d[0]
+ MOV v12.d[1], v23.d[0]
- sMLAL v30.4s, v1.4h, v9.4h
+ sMLAL v30.4s, v1.4h, v9.4h
- rev64 v10.8h, v10.8h
- MOV v11.d[0], v10.d[1]
- sMLAL v28.4s, v3.4h, v8.4h
+ rev64 v10.8h, v10.8h
+ MOV v11.d[0], v10.d[1]
+ sMLAL v28.4s, v3.4h, v8.4h
- rev64 v12.8h, v12.8h
- MOV v13.d[0], v12.d[1]
- ushR v26.4s, v26.4s,#16
+ rev64 v12.8h, v12.8h
+ MOV v13.d[0], v12.d[1]
+ ushR v26.4s, v26.4s, #16
- ushR v24.4s, v24.4s,#16
+ ushR v24.4s, v24.4s, #16
- sMLAL v26.4s, v1.4h, v8.4h
- sMLAL v24.4s, v3.4h, v9.4h
+ sMLAL v26.4s, v1.4h, v8.4h
+ sMLAL v24.4s, v3.4h, v9.4h
- ADD v30.4s, v30.4s , v28.4s
- NEG v30.4s, v30.4s
+ ADD v30.4s, v30.4s , v28.4s
+ NEG v30.4s, v30.4s
- uMULL v22.4s, v4.4h, v8.4h
+ uMULL v22.4s, v4.4h, v8.4h
- SUB v28.4s, v24.4s , v26.4s
+ SUB v28.4s, v24.4s , v26.4s
- mov v26.16b, v30.16b
- mov v24.16b, v28.16b
+ mov v26.16b, v30.16b
+ mov v24.16b, v28.16b
// VUZP.16 D24, D25
UZP1 v19.8h, v24.8h, v24.8h
UZP2 v21.8h, v24.8h, v24.8h
- MOV v24.d[0], v19.d[0]
- MOV v25.d[0], v21.d[0]
+ MOV v24.d[0], v19.d[0]
+ MOV v25.d[0], v21.d[0]
// VUZP.16 D26, D27
UZP1 v19.8h, v26.8h, v26.8h
UZP2 v21.8h, v26.8h, v26.8h
- MOV v26.d[0], v19.d[0]
- MOV v27.d[0], v21.d[0]
+ MOV v26.d[0], v19.d[0]
+ MOV v27.d[0], v21.d[0]
- uMULL v2.4s, v24.4h, v18.4h
+ uMULL v2.4s, v24.4h, v18.4h
- uMULL v0.4s, v26.4h, v18.4h
+ uMULL v0.4s, v26.4h, v18.4h
- ushR v22.4s, v22.4s,#16
- sMLAL v22.4s, v5.4h, v8.4h
+ ushR v22.4s, v22.4s, #16
+ sMLAL v22.4s, v5.4h, v8.4h
- ushR v2.4s, v2.4s,#16
- ushR v0.4s, v0.4s,#16
- sMLAL v2.4s, v25.4h, v18.4h
- sMLAL v0.4s, v27.4h, v18.4h
+ ushR v2.4s, v2.4s, #16
+ ushR v0.4s, v0.4s, #16
+ sMLAL v2.4s, v25.4h, v18.4h
+ sMLAL v0.4s, v27.4h, v18.4h
- uMULL v24.4s, v4.4h, v9.4h
- uMULL v26.4s, v6.4h, v8.4h
+ uMULL v24.4s, v4.4h, v9.4h
+ uMULL v26.4s, v6.4h, v8.4h
- NEG v2.4s, v2.4s
- ADD v28.4s, v28.4s , v0.4s
- ADD v30.4s, v30.4s , v2.4s
+ NEG v2.4s, v2.4s
+ ADD v28.4s, v28.4s , v0.4s
+ ADD v30.4s, v30.4s , v2.4s
- uMULL v0.4s, v6.4h, v9.4h
- sshR v24.4s, v24.4s,#16
- sMLAL v24.4s, v5.4h, v9.4h
- sshR v26.4s, v26.4s,#16
- sshR v0.4s, v0.4s,#16
- sMLAL v26.4s, v7.4h, v8.4h
- sMLAL v0.4s, v7.4h, v9.4h
+ uMULL v0.4s, v6.4h, v9.4h
+ sshR v24.4s, v24.4s, #16
+ sMLAL v24.4s, v5.4h, v9.4h
+ sshR v26.4s, v26.4s, #16
+ sshR v0.4s, v0.4s, #16
+ sMLAL v26.4s, v7.4h, v8.4h
+ sMLAL v0.4s, v7.4h, v9.4h
- ADD v22.4s, v22.4s , v0.4s
- NEG v22.4s, v22.4s
- SUB v24.4s, v26.4s , v24.4s
+ ADD v22.4s, v22.4s , v0.4s
+ NEG v22.4s, v22.4s
+ SUB v24.4s, v26.4s , v24.4s
//LDR w11, [sp, #120]
//sxtw x11,w11
- MOV w11, w26
- dup v14.4s,w11
- SQADD v28.4s, v28.4s , v14.4s
+ MOV w11, w26
+ dup v14.4s, w11
+ SQADD v28.4s, v28.4s , v14.4s
//LDR w11, [sp, #116]
- MOV w11, w25
+ MOV w11, w25
//sxtw x11,w11
- dup v0.4s,w11
- sQshL v28.4s, v28.4s, v0.4s
+ dup v0.4s, w11
+ sQshL v28.4s, v28.4s, v0.4s
- mov v0.16b, v22.16b
- mov v14.16b, v24.16b
+ mov v0.16b, v22.16b
+ mov v14.16b, v24.16b
// VUZP.16 D24, D25
UZP1 v19.8h, v24.8h, v24.8h
UZP2 v21.8h, v24.8h, v24.8h
- MOV v24.d[0], v19.d[0]
- MOV v25.d[0], v21.d[0]
+ MOV v24.d[0], v19.d[0]
+ MOV v25.d[0], v21.d[0]
// VUZP.16 D22, D23
UZP1 v19.8h, v22.8h, v22.8h
UZP2 v21.8h, v22.8h, v22.8h
- MOV v22.d[0], v19.d[0]
- MOV v23.d[0], v21.d[0]
+ MOV v22.d[0], v19.d[0]
+ MOV v23.d[0], v21.d[0]
- uMULL v8.4s, v24.4h, v18.4h
- uMULL v26.4s, v22.4h, v18.4h
+ uMULL v8.4s, v24.4h, v18.4h
+ uMULL v26.4s, v22.4h, v18.4h
- NEG v2.4s, v30.4s
+ NEG v2.4s, v30.4s
// VUZP.16 D30, D31
UZP1 v19.8h, v30.8h, v30.8h
UZP2 v21.8h, v30.8h, v30.8h
- MOV v30.d[0], v19.d[0]
- MOV v30.d[1], v21.d[0]
+ MOV v30.d[0], v19.d[0]
+ MOV v30.d[1], v21.d[0]
// VUZP.16 D2, D3
UZP1 v19.8h, v2.8h, v2.8h
UZP2 v21.8h, v2.8h, v2.8h
- MOV v2.d[0], v19.d[0]
- MOV v3.d[0], v21.d[0]
+ MOV v2.d[0], v19.d[0]
+ MOV v3.d[0], v21.d[0]
- uMULL v4.4s, v30.4h, v12.4h
+ uMULL v4.4s, v30.4h, v12.4h
- uMULL v6.4s, v2.4h, v13.4h
+ uMULL v6.4s, v2.4h, v13.4h
- ushR v8.4s, v8.4s,#16
- ushR v26.4s, v26.4s,#16
+ ushR v8.4s, v8.4s, #16
+ ushR v26.4s, v26.4s, #16
- sMLAL v8.4s, v25.4h, v18.4h
- sMLAL v26.4s, v23.4h, v18.4h
+ sMLAL v8.4s, v25.4h, v18.4h
+ sMLAL v26.4s, v23.4h, v18.4h
- ushR v4.4s, v4.4s,#16
- ushR v6.4s, v6.4s,#16
+ ushR v4.4s, v4.4s, #16
+ ushR v6.4s, v6.4s, #16
- MOV v19.d[0], v30.d[1]
+ MOV v19.d[0], v30.d[1]
- sMLAL v4.4s, v19.4h, v12.4h
- sMLAL v6.4s, v3.4h, v13.4h
+ sMLAL v4.4s, v19.4h, v12.4h
+ sMLAL v6.4s, v3.4h, v13.4h
- NEG v8.4s, v8.4s
- ADD v14.4s, v14.4s , v26.4s
- ADD v0.4s, v0.4s , v8.4s
+ NEG v8.4s, v8.4s
+ ADD v14.4s, v14.4s , v26.4s
+ ADD v0.4s, v0.4s , v8.4s
//LDR w11, [sp, #120]
//sxtw x11,w11
- MOV w11, w26
- dup v8.4s,w11
- SQADD v0.4s, v0.4s , v8.4s
+ MOV w11, w26
+ dup v8.4s, w11
+ SQADD v0.4s, v0.4s , v8.4s
//LDR w11, [sp, #116]
//sxtw x11,w11
- MOV w11, w25
- dup v26.4s,w11
- sQshL v0.4s, v0.4s, v26.4s
+ MOV w11, w25
+ dup v26.4s, w11
+ sQshL v0.4s, v0.4s, v26.4s
- mov v26.16b, v28.16b
+ mov v26.16b, v28.16b
- LD2 { v28.4s, v29.4s}, [x4]
- MOV v30.16b, v29.16b
- MOV v29.d[0], v28.d[1]
- // VZIP.32 Q13, Q0
+ LD2 { v28.4s, v29.4s}, [x4]
+ MOV v30.16b, v29.16b
+ MOV v29.d[0], v28.d[1]
+// VZIP.32 Q13, Q0
- ZIP1 v19.4s, v26.4s, v0.4s
- ZIP2 v0.4s, v26.4s, v0.4s
- MOV v26.16b, v19.16b
+ ZIP1 v19.4s, v26.4s, v0.4s
+ ZIP2 v0.4s, v26.4s, v0.4s
+ MOV v26.16b, v19.16b
- ST1 { v26.4s}, [x4],#16
- ST1 { v0.4s}, [x4],#16
+ ST1 { v26.4s}, [x4], #16
+ ST1 { v0.4s}, [x4], #16
- movi v1.2s, #0
+ movi v1.2s, #0
//VADDL.S16 Q0, D13, D1
- SADDL v0.4s, v13.4h, v1.4h
- MOV v1.d[0], v0.d[1]
- sMULL v26.2d, v28.2s, v0.2s
- Sqxtn v8.2s, v26.2d
- sMULL v26.2d, v29.2s, v1.2s
- Sqxtn v9.2s, v26.2d
- MOV v8.d[1], v9.d[0]
- movi v1.2s, #0
+ SADDL v0.4s, v13.4h, v1.4h
+ MOV v1.d[0], v0.d[1]
+ sMULL v26.2d, v28.2s, v0.2s
+ Sqxtn v8.2s, v26.2d
+ sMULL v26.2d, v29.2s, v1.2s
+ Sqxtn v9.2s, v26.2d
+ MOV v8.d[1], v9.d[0]
+ movi v1.2s, #0
// VADDL.S16 Q0, D12, D1
- SADDL v0.4s, v12.4h, v1.4h
- MOV v1.d[0], v0.d[1]
- sMULL v24.2d, v28.2s, v0.2s
- Sqxtn v26.2s, v24.2d
- sMULL v24.2d, v29.2s, v1.2s
- Sqxtn v27.2s, v24.2d
- MOV v26.d[1], v27.d[0]
+ SADDL v0.4s, v12.4h, v1.4h
+ MOV v1.d[0], v0.d[1]
+ sMULL v24.2d, v28.2s, v0.2s
+ Sqxtn v26.2s, v24.2d
+ sMULL v24.2d, v29.2s, v1.2s
+ Sqxtn v27.2s, v24.2d
+ MOV v26.d[1], v27.d[0]
- sQshL v4.4s, v4.4s, v16.4s
- sQshL v6.4s, v6.4s, v16.4s
+ sQshL v4.4s, v4.4s, v16.4s
+ sQshL v6.4s, v6.4s, v16.4s
- SQSUB v4.4s, v4.4s , v8.4s
- SQSUB v6.4s, v6.4s , v26.4s
+ SQSUB v4.4s, v4.4s , v8.4s
+ SQSUB v6.4s, v6.4s , v26.4s
- NEG v26.4s, v14.4s
+ NEG v26.4s, v14.4s
// VUZP.16 D14, D15
UZP1 v19.8h, v14.8h, v14.8h
UZP2 v21.8h, v14.8h, v14.8h
- MOV v14.d[0], v19.d[0]
- MOV v15.d[0], v21.d[0]
+ MOV v14.d[0], v19.d[0]
+ MOV v15.d[0], v21.d[0]
// VUZP.16 D26, D27
UZP1 v19.8h, v26.8h, v26.8h
UZP2 v21.8h, v26.8h, v26.8h
- MOV v26.d[0], v19.d[0]
- MOV v27.d[0], v21.d[0]
+ MOV v26.d[0], v19.d[0]
+ MOV v27.d[0], v21.d[0]
- movi v1.2s, #0
+ movi v1.2s, #0
// VADDL.S16 Q0, D10, D1
- SADDL v0.4s, v10.4h, v1.4h
- MOV v1.d[0], v0.d[0]
- sMULL v22.2d, v30.2s, v0.2s
- Sqxtn v24.2s, v22.2d
- sMULL2 v22.2d, v30.4s, v0.4s
- Sqxtn v25.2s, v22.2d
- MOV v24.d[1], v25.d[0]
- movi v1.2s, #0
+ SADDL v0.4s, v10.4h, v1.4h
+ MOV v1.d[0], v0.d[0]
+ sMULL v22.2d, v30.2s, v0.2s
+ Sqxtn v24.2s, v22.2d
+ sMULL2 v22.2d, v30.4s, v0.4s
+ Sqxtn v25.2s, v22.2d
+ MOV v24.d[1], v25.d[0]
+ movi v1.2s, #0
// VADDL.S16 Q0, D11, D1
- SADDL v0.4s, v11.4h, v1.4h
- MOV v1.d[0], v0.d[1]
-
- sMULL v8.2d, v30.2s, v0.2s
- Sqxtn v22.2s, v8.2d
- sMULL2 v8.2d, v30.4s, v0.4s
- Sqxtn v23.2s, v8.2d
- MOV v22.d[1], v23.d[0]
- uMULL v8.4s, v26.4h, v11.4h
- uMULL v30.4s, v14.4h, v10.4h
-
- LD2 { v0.4s, v1.4s}, [x1]
- MOV v2.16b, v1.16b
- ADD x1, x1, x12
+ SADDL v0.4s, v11.4h, v1.4h
+ MOV v1.d[0], v0.d[1]
+
+ sMULL v8.2d, v30.2s, v0.2s
+ Sqxtn v22.2s, v8.2d
+ sMULL2 v8.2d, v30.4s, v0.4s
+ Sqxtn v23.2s, v8.2d
+ MOV v22.d[1], v23.d[0]
+ uMULL v8.4s, v26.4h, v11.4h
+ uMULL v30.4s, v14.4h, v10.4h
+
+ LD2 { v0.4s, v1.4s}, [x1]
+ MOV v2.16b, v1.16b
+ ADD x1, x1, x12
// VUZP.16 D0, D1
UZP1 v19.8h, v0.8h, v0.8h
UZP2 v21.8h, v0.8h, v0.8h
- MOV v0.d[0], v19.d[0]
- MOV v0.d[1], v21.d[0]
+ MOV v0.d[0], v19.d[0]
+ MOV v0.d[1], v21.d[0]
// VUZP.16 D2, D3
UZP1 v19.8h, v2.8h, v2.8h
UZP2 v21.8h, v2.8h, v2.8h
- MOV v2.d[0], v19.d[0]
- MOV v2.d[1], v21.d[0]
+ MOV v2.d[0], v19.d[0]
+ MOV v2.d[1], v21.d[0]
- ushR v8.4s, v8.4s,#16
+ ushR v8.4s, v8.4s, #16
- rev64 v0.8h, v0.8h
- MOV v1.d[0], v0.d[1]
- ushR v30.4s, v30.4s,#16
+ rev64 v0.8h, v0.8h
+ MOV v1.d[0], v0.d[1]
+ ushR v30.4s, v30.4s, #16
- rev64 v2.8h, v2.8h
- MOV v3.d[0], v2.d[1]
- sMLAL v8.4s, v27.4h, v11.4h
+ rev64 v2.8h, v2.8h
+ MOV v3.d[0], v2.d[1]
+ sMLAL v8.4s, v27.4h, v11.4h
- sMLAL v30.4s, v15.4h, v10.4h
+ sMLAL v30.4s, v15.4h, v10.4h
- LD2 { v10.4s, v11.4s}, [x6]
- ADD x6, x6, x12
- MOV v12.16b, v11.16b
- sQshL v4.4s, v4.4s,#2
+ LD2 { v10.4s, v11.4s}, [x6]
+ ADD x6, x6, x12
+ MOV v12.16b, v11.16b
+ sQshL v4.4s, v4.4s, #2
- // VUZP.16 D10, D11
+// VUZP.16 D10, D11
UZP1 v19.8h, v10.8h, v10.8h
UZP2 v21.8h, v10.8h, v10.8h
- MOV v10.d[0], v19.d[0]
- MOV v10.d[1], v21.d[0]
+ MOV v10.d[0], v19.d[0]
+ MOV v10.d[1], v21.d[0]
- sQshL v6.4s, v6.4s,#2
+ sQshL v6.4s, v6.4s, #2
// VUZP.16 D12, D13
UZP1 v19.8h, v12.8h, v12.8h
UZP2 v21.8h, v12.8h, v12.8h
- MOV v12.d[0], v19.d[0]
- MOV v12.d[1], v21.d[0]
+ MOV v12.d[0], v19.d[0]
+ MOV v12.d[1], v21.d[0]
- SQADD v14.4s, v4.4s , v20.4s
+ SQADD v14.4s, v4.4s , v20.4s
- rev64 v10.8h, v10.8h
- MOV v11.d[0], v10.d[1]
- SQADD v6.4s, v6.4s , v20.4s
+ rev64 v10.8h, v10.8h
+ MOV v11.d[0], v10.d[1]
+ SQADD v6.4s, v6.4s , v20.4s
- rev64 v12.8h, v12.8h
- MOV v13.d[0], v12.d[1]
- sshR v14.4s, v14.4s,#16
+ rev64 v12.8h, v12.8h
+ MOV v13.d[0], v12.d[1]
+ sshR v14.4s, v14.4s, #16
// VUZP.16 D14, D15
UZP1 v19.8h, v14.8h, v14.8h
UZP2 v21.8h, v14.8h, v14.8h
- MOV v14.d[0], v19.d[0]
- MOV v15.d[0], v21.d[0]
+ MOV v14.d[0], v19.d[0]
+ MOV v15.d[0], v21.d[0]
- sshR v6.4s, v6.4s,#16
+ sshR v6.4s, v6.4s, #16
// VUZP.16 D6, D7
UZP1 v19.8h, v6.8h, v6.8h
UZP2 v21.8h, v6.8h, v6.8h
- MOV v6.d[0], v19.d[0]
- MOV v7.d[0], v21.d[0]
+ MOV v6.d[0], v19.d[0]
+ MOV v7.d[0], v21.d[0]
- mov v15.8b, v6.8b
- sQshL v8.4s, v8.4s, v16.4s
+ mov v15.8b, v6.8b
+ sQshL v8.4s, v8.4s, v16.4s
- LD2 { v4.4s, v5.4s}, [x8]
- ADD x8, x8,#32
- MOV v6.16b, v5.16b
- sQshL v30.4s, v30.4s, v16.4s
+ LD2 { v4.4s, v5.4s}, [x8]
+ ADD x8, x8, #32
+ MOV v6.16b, v5.16b
+ sQshL v30.4s, v30.4s, v16.4s
// VUZP.16 D4, D5
UZP1 v19.8h, v4.8h, v4.8h
UZP2 v21.8h, v4.8h, v4.8h
- MOV v4.d[0], v19.d[0]
- MOV v5.d[0], v21.d[0]
+ MOV v4.d[0], v19.d[0]
+ MOV v5.d[0], v21.d[0]
- SQSUB v8.4s, v8.4s , v24.4s
+ SQSUB v8.4s, v8.4s , v24.4s
// VUZP.16 D6, D7
UZP1 v19.8h, v6.8h, v6.8h
UZP2 v21.8h, v6.8h, v6.8h
- MOV v6.d[0], v19.d[0]
- MOV v7.d[0], v21.d[0]
+ MOV v6.d[0], v19.d[0]
+ MOV v7.d[0], v21.d[0]
- SQSUB v22.4s, v30.4s , v22.4s
+ SQSUB v22.4s, v30.4s , v22.4s
- sQshL v30.4s, v8.4s,#2
+ sQshL v30.4s, v8.4s, #2
- LD2 {v8.4h, v9.4h}, [x2]
- ADD x2, x2, #16
- sQshL v22.4s, v22.4s,#2
+ LD2 {v8.4h, v9.4h}, [x2]
+ ADD x2, x2, #16
+ sQshL v22.4s, v22.4s, #2
- SQADD v30.4s, v30.4s , v20.4s
- SQADD v22.4s, v22.4s , v20.4s
+ SQADD v30.4s, v30.4s , v20.4s
+ SQADD v22.4s, v22.4s , v20.4s
- sshR v30.4s, v30.4s,#16
+ sshR v30.4s, v30.4s, #16
// VUZP.16 D30, D31
UZP1 v19.8h, v30.8h, v30.8h
UZP2 v21.8h, v30.8h, v30.8h
- MOV v30.d[0], v19.d[0]
- MOV v30.d[1], v21.d[0]
+ MOV v30.d[0], v19.d[0]
+ MOV v30.d[1], v21.d[0]
- sshR v22.4s, v22.4s,#16
+ sshR v22.4s, v22.4s, #16
// VUZP.16 D22, D23
UZP1 v19.8h, v22.8h, v22.8h
UZP2 v21.8h, v22.8h, v22.8h
- MOV v22.d[0], v19.d[0]
- MOV v23.d[0], v21.d[0]
+ MOV v22.d[0], v19.d[0]
+ MOV v23.d[0], v21.d[0]
- mov v23.8b, v30.8b
+ mov v23.8b, v30.8b
CORE_LOOP:
- ST1 {v14.h}[0], [x0]
- ADD x0, x0, x9
- uMULL v30.4s, v0.4h, v9.4h
+ ST1 {v14.h}[0], [x0]
+ ADD x0, x0, x9
+ uMULL v30.4s, v0.4h, v9.4h
- ST1 {v22.h}[0], [x0]
- ADD x0, x0, x9
- uMULL v28.4s, v2.4h, v8.4h
+ ST1 {v22.h}[0], [x0]
+ ADD x0, x0, x9
+ uMULL v28.4s, v2.4h, v8.4h
- ST1 {v14.h}[1], [x0]
- ADD x0, x0, x9
- uMULL v26.4s, v0.4h, v8.4h
+ ST1 {v14.h}[1], [x0]
+ ADD x0, x0, x9
+ uMULL v26.4s, v0.4h, v8.4h
- ST1 {v22.h}[1], [x0]
- ADD x0, x0, x9
- uMULL v24.4s, v2.4h, v9.4h
+ ST1 {v22.h}[1], [x0]
+ ADD x0, x0, x9
+ uMULL v24.4s, v2.4h, v9.4h
- ST1 {v14.h}[2], [x0]
- ADD x0, x0, x9
- ushR v30.4s, v30.4s,#16
+ ST1 {v14.h}[2], [x0]
+ ADD x0, x0, x9
+ ushR v30.4s, v30.4s, #16
- ST1 {v22.h}[2], [x0]
- ADD x0, x0, x9
- ushR v28.4s, v28.4s,#16
+ ST1 {v22.h}[2], [x0]
+ ADD x0, x0, x9
+ ushR v28.4s, v28.4s, #16
- ST1 {v14.h}[3], [x0]
- ADD x0, x0, x9
- sMLAL v30.4s, v1.4h, v9.4h
+ ST1 {v14.h}[3], [x0]
+ ADD x0, x0, x9
+ sMLAL v30.4s, v1.4h, v9.4h
- ST1 {v22.h}[3], [x0]
- ADD x0, x0, x9
- sMLAL v28.4s, v3.4h, v8.4h
+ ST1 {v22.h}[3], [x0]
+ ADD x0, x0, x9
+ sMLAL v28.4s, v3.4h, v8.4h
- ST1 {v15.h}[0], [x5]
- ADD x5, x5, x10
- ushR v26.4s, v26.4s,#16
+ ST1 {v15.h}[0], [x5]
+ ADD x5, x5, x10
+ ushR v26.4s, v26.4s, #16
- ST1 {v23.h}[0], [x5]
- ADD x5, x5, x10
- ushR v24.4s, v24.4s,#16
+ ST1 {v23.h}[0], [x5]
+ ADD x5, x5, x10
+ ushR v24.4s, v24.4s, #16
- ST1 {v15.h}[1], [x5]
- ADD x5, x5, x10
- sMLAL v26.4s, v1.4h, v8.4h
+ ST1 {v15.h}[1], [x5]
+ ADD x5, x5, x10
+ sMLAL v26.4s, v1.4h, v8.4h
- ST1 {v23.h}[1], [x5]
- ADD x5, x5, x10
- sMLAL v24.4s, v3.4h, v9.4h
+ ST1 {v23.h}[1], [x5]
+ ADD x5, x5, x10
+ sMLAL v24.4s, v3.4h, v9.4h
- ST1 {v15.h}[2], [x5]
- ADD x5, x5, x10
- ADD v30.4s, v30.4s , v28.4s
+ ST1 {v15.h}[2], [x5]
+ ADD x5, x5, x10
+ ADD v30.4s, v30.4s , v28.4s
- ST1 {v23.h}[2], [x5]
- ADD x5, x5, x10
- NEG v30.4s, v30.4s
+ ST1 {v23.h}[2], [x5]
+ ADD x5, x5, x10
+ NEG v30.4s, v30.4s
- ST1 {v15.h}[3], [x5]
- ADD x5, x5, x10
+ ST1 {v15.h}[3], [x5]
+ ADD x5, x5, x10
- ST1 {v23.h}[3], [x5]
- ADD x5, x5, x10
- SUB v28.4s, v24.4s , v26.4s
+ ST1 {v23.h}[3], [x5]
+ ADD x5, x5, x10
+ SUB v28.4s, v24.4s , v26.4s
- mov v26.16b, v30.16b
- uMULL v22.4s, v4.4h, v8.4h
+ mov v26.16b, v30.16b
+ uMULL v22.4s, v4.4h, v8.4h
- mov v24.16b, v28.16b
+ mov v24.16b, v28.16b
// VUZP.16 D24, D25
UZP1 v19.8h, v24.8h, v24.8h
UZP2 v21.8h, v24.8h, v24.8h
- MOV v24.d[0], v19.d[0]
- MOV v25.d[0], v21.d[0]
+ MOV v24.d[0], v19.d[0]
+ MOV v25.d[0], v21.d[0]
// VUZP.16 D26, D27
UZP1 v19.8h, v26.8h, v26.8h
UZP2 v21.8h, v26.8h, v26.8h
- MOV v26.d[0], v19.d[0]
- MOV v27.d[0], v21.d[0]
+ MOV v26.d[0], v19.d[0]
+ MOV v27.d[0], v21.d[0]
- uMULL v2.4s, v24.4h, v18.4h
- uMULL v0.4s, v26.4h, v18.4h
+ uMULL v2.4s, v24.4h, v18.4h
+ uMULL v0.4s, v26.4h, v18.4h
- ushR v22.4s, v22.4s,#16
- sMLAL v22.4s, v5.4h, v8.4h
+ ushR v22.4s, v22.4s, #16
+ sMLAL v22.4s, v5.4h, v8.4h
- ushR v2.4s, v2.4s,#16
- ushR v0.4s, v0.4s,#16
- sMLAL v2.4s, v25.4h, v18.4h
- sMLAL v0.4s, v27.4h, v18.4h
+ ushR v2.4s, v2.4s, #16
+ ushR v0.4s, v0.4s, #16
+ sMLAL v2.4s, v25.4h, v18.4h
+ sMLAL v0.4s, v27.4h, v18.4h
- uMULL v24.4s, v4.4h, v9.4h
- uMULL v26.4s, v6.4h, v8.4h
+ uMULL v24.4s, v4.4h, v9.4h
+ uMULL v26.4s, v6.4h, v8.4h
- NEG v2.4s, v2.4s
- ADD v28.4s, v28.4s , v0.4s
- ADD v30.4s, v30.4s , v2.4s
+ NEG v2.4s, v2.4s
+ ADD v28.4s, v28.4s , v0.4s
+ ADD v30.4s, v30.4s , v2.4s
- uMULL v0.4s, v6.4h, v9.4h
- sshR v24.4s, v24.4s,#16
- sMLAL v24.4s, v5.4h, v9.4h
- sshR v26.4s, v26.4s,#16
- sshR v0.4s, v0.4s,#16
- sMLAL v26.4s, v7.4h, v8.4h
- sMLAL v0.4s, v7.4h, v9.4h
+ uMULL v0.4s, v6.4h, v9.4h
+ sshR v24.4s, v24.4s, #16
+ sMLAL v24.4s, v5.4h, v9.4h
+ sshR v26.4s, v26.4s, #16
+ sshR v0.4s, v0.4s, #16
+ sMLAL v26.4s, v7.4h, v8.4h
+ sMLAL v0.4s, v7.4h, v9.4h
- ADD v22.4s, v22.4s , v0.4s
+ ADD v22.4s, v22.4s , v0.4s
- NEG v22.4s, v22.4s
- SUB v24.4s, v26.4s , v24.4s
+ NEG v22.4s, v22.4s
+ SUB v24.4s, v26.4s , v24.4s
//LDR w11, [sp, #120]
//sxtw x11,w11
- MOV w11, w26
- dup v14.4s,w11
- SQADD v28.4s, v28.4s , v14.4s
+ MOV w11, w26
+ dup v14.4s, w11
+ SQADD v28.4s, v28.4s , v14.4s
//LDR w11, [sp, #116]
//sxtw x11,w11
- MOV w11, w25
- dup v0.4s,w11
- sQshL v28.4s, v28.4s, v0.4s
+ MOV w11, w25
+ dup v0.4s, w11
+ sQshL v28.4s, v28.4s, v0.4s
- mov v0.16b, v22.16b
- mov v14.16b, v24.16b
+ mov v0.16b, v22.16b
+ mov v14.16b, v24.16b
// VUZP.16 D24, D25
UZP1 v19.8h, v24.8h, v24.8h
UZP2 v21.8h, v24.8h, v24.8h
- MOV v24.d[0], v19.d[0]
- MOV v25.d[0], v21.d[0]
+ MOV v24.d[0], v19.d[0]
+ MOV v25.d[0], v21.d[0]
// VUZP.16 D22, D23
UZP1 v19.8h, v22.8h, v22.8h
UZP2 v21.8h, v22.8h, v22.8h
- MOV v22.d[0], v19.d[0]
- MOV v23.d[0], v21.d[0]
+ MOV v22.d[0], v19.d[0]
+ MOV v23.d[0], v21.d[0]
- uMULL v8.4s, v24.4h, v18.4h
- uMULL v26.4s, v22.4h, v18.4h
+ uMULL v8.4s, v24.4h, v18.4h
+ uMULL v26.4s, v22.4h, v18.4h
- NEG v2.4s, v30.4s
+ NEG v2.4s, v30.4s
// VUZP.16 D30, D31
UZP1 v19.8h, v30.8h, v30.8h
UZP2 v21.8h, v30.8h, v30.8h
- MOV v30.d[0], v19.d[0]
- MOV v30.d[1], v21.d[0]
+ MOV v30.d[0], v19.d[0]
+ MOV v30.d[1], v21.d[0]
// VUZP.16 D2, D3
UZP1 v19.8h, v2.8h, v2.8h
UZP2 v21.8h, v2.8h, v2.8h
- MOV v2.d[0], v19.d[0]
- MOV v3.d[0], v21.d[0]
+ MOV v2.d[0], v19.d[0]
+ MOV v3.d[0], v21.d[0]
- uMULL v4.4s, v30.4h, v12.4h
- uMULL v6.4s, v2.4h, v13.4h
+ uMULL v4.4s, v30.4h, v12.4h
+ uMULL v6.4s, v2.4h, v13.4h
- ushR v8.4s, v8.4s,#16
- ushR v26.4s, v26.4s,#16
+ ushR v8.4s, v8.4s, #16
+ ushR v26.4s, v26.4s, #16
- sMLAL v8.4s, v25.4h, v18.4h
- sMLAL v26.4s, v23.4h, v18.4h
+ sMLAL v8.4s, v25.4h, v18.4h
+ sMLAL v26.4s, v23.4h, v18.4h
- ushR v4.4s, v4.4s,#16
- ushR v6.4s, v6.4s,#16
+ ushR v4.4s, v4.4s, #16
+ ushR v6.4s, v6.4s, #16
- MOV v19.d[0], v30.d[1]
+ MOV v19.d[0], v30.d[1]
- sMLAL v4.4s, v19.4h, v12.4h
- sMLAL v6.4s, v3.4h, v13.4h
+ sMLAL v4.4s, v19.4h, v12.4h
+ sMLAL v6.4s, v3.4h, v13.4h
- NEG v8.4s, v8.4s
- ADD v14.4s, v14.4s , v26.4s
- ADD v0.4s, v0.4s , v8.4s
+ NEG v8.4s, v8.4s
+ ADD v14.4s, v14.4s , v26.4s
+ ADD v0.4s, v0.4s , v8.4s
//LDR w11, [sp, #120]
//sxtw x11,w11
- MOV w11, w26
- dup v8.4s,w11
- SQADD v0.4s, v0.4s , v8.4s
+ MOV w11, w26
+ dup v8.4s, w11
+ SQADD v0.4s, v0.4s , v8.4s
//LDR w11, [sp, #116]
//sxtw x11,w11
- MOV w11, w25
- dup v26.4s,w11
- sQshL v0.4s, v0.4s, v26.4s
- mov v26.16b, v28.16b
-
- LD2 { v28.4s, v29.4s}, [x4]
- MOV v30.16b, v29.16b
- MOV v29.d[0], v28.d[1]
+ MOV w11, w25
+ dup v26.4s, w11
+ sQshL v0.4s, v0.4s, v26.4s
+ mov v26.16b, v28.16b
+
+ LD2 { v28.4s, v29.4s}, [x4]
+ MOV v30.16b, v29.16b
+ MOV v29.d[0], v28.d[1]
// VZIP.32 Q13, Q0
- ZIP1 v19.4s, v26.4s, v0.4s
- ZIP2 v0.4s, v26.4s, v0.4s
- MOV v26.16b, v19.16b
+ ZIP1 v19.4s, v26.4s, v0.4s
+ ZIP2 v0.4s, v26.4s, v0.4s
+ MOV v26.16b, v19.16b
- ST1 { v26.4s}, [x4]
- ADD x4, x4,#16
- ST1 { v0.4s}, [x4]
- ADD x4, x4,#16
+ ST1 { v26.4s}, [x4]
+ ADD x4, x4, #16
+ ST1 { v0.4s}, [x4]
+ ADD x4, x4, #16
- movi v1.2s, #0
+ movi v1.2s, #0
// VADDL.S16 Q0, D13, D1
- SADDL v0.4s, v13.4h, v1.4h
- MOV v1.d[0], v0.d[1]
-
- sMULL v26.2d, v28.2s, v0.2s
- Sqxtn v8.2s, v26.2d
- sMULL v26.2d, v29.2s, v1.2s
- Sqxtn v9.2s, v26.2d
- MOV v8.d[1], v9.d[0]
- movi v1.2s, #0
+ SADDL v0.4s, v13.4h, v1.4h
+ MOV v1.d[0], v0.d[1]
+
+ sMULL v26.2d, v28.2s, v0.2s
+ Sqxtn v8.2s, v26.2d
+ sMULL v26.2d, v29.2s, v1.2s
+ Sqxtn v9.2s, v26.2d
+ MOV v8.d[1], v9.d[0]
+ movi v1.2s, #0
//VADDL.S16 Q0, D12, D1
- SADDL v0.4s, v12.4h, v1.4h
- MOV v1.d[0], v0.d[1]
+ SADDL v0.4s, v12.4h, v1.4h
+ MOV v1.d[0], v0.d[1]
- sMULL v24.2d, v28.2s, v0.2s
- Sqxtn v26.2s, v24.2d
- sMULL v24.2d, v29.2s, v1.2s
- Sqxtn v27.2s, v24.2d
- MOV v26.d[1], v27.d[0]
- sQshL v4.4s, v4.4s, v16.4s
- sQshL v6.4s, v6.4s, v16.4s
+ sMULL v24.2d, v28.2s, v0.2s
+ Sqxtn v26.2s, v24.2d
+ sMULL v24.2d, v29.2s, v1.2s
+ Sqxtn v27.2s, v24.2d
+ MOV v26.d[1], v27.d[0]
+ sQshL v4.4s, v4.4s, v16.4s
+ sQshL v6.4s, v6.4s, v16.4s
- SQSUB v4.4s, v4.4s , v8.4s
- SQSUB v6.4s, v6.4s , v26.4s
+ SQSUB v4.4s, v4.4s , v8.4s
+ SQSUB v6.4s, v6.4s , v26.4s
- NEG v26.4s, v14.4s
+ NEG v26.4s, v14.4s
// VUZP.16 D26, D27
- UZP1 v19.8h, v26.8h, v26.8h
+ UZP1 v19.8h, v26.8h, v26.8h
UZP2 v21.8h, v26.8h, v26.8h
- MOV v26.d[0], v19.d[0]
- MOV v27.d[0], v21.d[0]
-
- movi v1.2s, #0
- //VADDL.S16 Q0, D10, D1
- SADDL v0.4s, v10.4h, v1.4h
- MOV v1.d[0], v0.d[1]
-
- sMULL v22.2d, v30.2s, v0.2s
- Sqxtn v24.2s, v22.2d
- sMULL2 v22.2d, v30.4s, v0.4s
- Sqxtn v25.2s, v22.2d
- MOV v24.d[1], v25.d[0]
- movi v1.2s, #0
+ MOV v26.d[0], v19.d[0]
+ MOV v27.d[0], v21.d[0]
+
+ movi v1.2s, #0
+ //VADDL.S16 Q0, D10, D1
+ SADDL v0.4s, v10.4h, v1.4h
+ MOV v1.d[0], v0.d[1]
+
+ sMULL v22.2d, v30.2s, v0.2s
+ Sqxtn v24.2s, v22.2d
+ sMULL2 v22.2d, v30.4s, v0.4s
+ Sqxtn v25.2s, v22.2d
+ MOV v24.d[1], v25.d[0]
+ movi v1.2s, #0
//VADDL.S16 Q0, D11, D1
- SADDL v0.4s, v11.4h, v1.4h
+ SADDL v0.4s, v11.4h, v1.4h
- sMULL v8.2d, v30.2s, v0.2s
- Sqxtn v22.2s, v8.2d
- sMULL2 v8.2d, v30.4s, v0.4s
- Sqxtn v23.2s, v8.2d
- MOV v22.d[1], v23.d[0]
+ sMULL v8.2d, v30.2s, v0.2s
+ Sqxtn v22.2s, v8.2d
+ sMULL2 v8.2d, v30.4s, v0.4s
+ Sqxtn v23.2s, v8.2d
+ MOV v22.d[1], v23.d[0]
// VUZP.16 D14, D15
UZP1 v19.8h, v14.8h, v14.8h
UZP2 v21.8h, v14.8h, v14.8h
- MOV v14.d[0], v19.d[0]
- MOV v15.d[0], v21.d[0]
+ MOV v14.d[0], v19.d[0]
+ MOV v15.d[0], v21.d[0]
- uMULL v8.4s, v26.4h, v11.4h
- uMULL v30.4s, v14.4h, v10.4h
+ uMULL v8.4s, v26.4h, v11.4h
+ uMULL v30.4s, v14.4h, v10.4h
- LD2 { v0.4s, v1.4s}, [x1]
- MOV v2.16b, v1.16b
- ADD X1, X1, x12
+ LD2 { v0.4s, v1.4s}, [x1]
+ MOV v2.16b, v1.16b
+ ADD X1, X1, x12
// VUZP.16 D0, D1
UZP1 v19.8h, v0.8h, v0.8h
UZP2 v21.8h, v0.8h, v0.8h
- MOV v0.d[0], v19.d[0]
- MOV v0.d[1], v21.d[0]
+ MOV v0.d[0], v19.d[0]
+ MOV v0.d[1], v21.d[0]
// VUZP.16 D2, D3
UZP1 v19.8h, v2.8h, v2.8h
UZP2 v21.8h, v2.8h, v2.8h
- MOV v2.d[0], v19.d[0]
- MOV v2.d[1], v21.d[0]
+ MOV v2.d[0], v19.d[0]
+ MOV v2.d[1], v21.d[0]
- ushR v8.4s, v8.4s,#16
+ ushR v8.4s, v8.4s, #16
- rev64 v0.8h, v0.8h
- MOV v1.d[0], v0.d[1]
- ushR v30.4s, v30.4s,#16
+ rev64 v0.8h, v0.8h
+ MOV v1.d[0], v0.d[1]
+ ushR v30.4s, v30.4s, #16
- rev64 v2.8h, v2.8h
- MOV v3.d[0], v2.d[1]
- sMLAL v8.4s, v27.4h, v11.4h
+ rev64 v2.8h, v2.8h
+ MOV v3.d[0], v2.d[1]
+ sMLAL v8.4s, v27.4h, v11.4h
- sMLAL v30.4s, v15.4h, v10.4h
+ sMLAL v30.4s, v15.4h, v10.4h
- LD2 { v10.4s, v11.4s}, [x6]
- add X6, x6, x12
- MOV v12.16b, v11.16b
- sQshL v4.4s, v4.4s,#2
+ LD2 { v10.4s, v11.4s}, [x6]
+ add X6, x6, x12
+ MOV v12.16b, v11.16b
+ sQshL v4.4s, v4.4s, #2
//VUZP.16 D10, D11
- UZP1 v19.8h, v10.8h, v10.8h
+ UZP1 v19.8h, v10.8h, v10.8h
UZP2 v21.8h, v10.8h, v10.8h
- MOV v10.d[0], v19.d[0]
- MOV v10.d[1], v21.d[0]
+ MOV v10.d[0], v19.d[0]
+ MOV v10.d[1], v21.d[0]
- sQshL v6.4s, v6.4s,#2
+ sQshL v6.4s, v6.4s, #2
// VUZP.16 D12, D13
UZP1 v19.8h, v12.8h, v12.8h
UZP2 v21.8h, v12.8h, v12.8h
- MOV v12.d[0], v19.d[0]
- MOV v12.d[1], v21.d[0]
+ MOV v12.d[0], v19.d[0]
+ MOV v12.d[1], v21.d[0]
- SQADD v14.4s, v4.4s , v20.4s
+ SQADD v14.4s, v4.4s , v20.4s
- rev64 v10.8h, v10.8h
- MOV v11.d[0], v10.d[1]
- SQADD v6.4s, v6.4s , v20.4s
+ rev64 v10.8h, v10.8h
+ MOV v11.d[0], v10.d[1]
+ SQADD v6.4s, v6.4s , v20.4s
- rev64 v12.8h, v12.8h
- MOV v13.d[0], v12.d[1]
- sshR v14.4s, v14.4s,#16
+ rev64 v12.8h, v12.8h
+ MOV v13.d[0], v12.d[1]
+ sshR v14.4s, v14.4s, #16
// VUZP.16 D14, D15
- UZP1 v19.8h, v14.8h, v14.8h
+ UZP1 v19.8h, v14.8h, v14.8h
UZP2 v21.8h, v14.8h, v14.8h
- MOV v14.d[0], v19.d[0]
- MOV v15.d[0], v21.d[0]
+ MOV v14.d[0], v19.d[0]
+ MOV v15.d[0], v21.d[0]
- sshR v6.4s, v6.4s,#16
+ sshR v6.4s, v6.4s, #16
// VUZP.16 D6, D7
UZP1 v19.8h, v6.8h, v6.8h
UZP2 v21.8h, v6.8h, v6.8h
- MOV v6.d[0], v19.d[0]
- MOV v7.d[0], v21.d[0]
+ MOV v6.d[0], v19.d[0]
+ MOV v7.d[0], v21.d[0]
- mov v15.8b, v6.8b
- sQshL v8.4s, v8.4s, v16.4s
+ mov v15.8b, v6.8b
+ sQshL v8.4s, v8.4s, v16.4s
- LD2 { v4.4s, v5.4s}, [x8]
- ADD x8, x8, #32
- MOV v6.16b, v5.16b
+ LD2 { v4.4s, v5.4s}, [x8]
+ ADD x8, x8, #32
+ MOV v6.16b, v5.16b
- sQshL v30.4s, v30.4s, v16.4s
+ sQshL v30.4s, v30.4s, v16.4s
// VUZP.16 D4, D5
- UZP1 v19.8h, v4.8h, v4.8h
+ UZP1 v19.8h, v4.8h, v4.8h
UZP2 v21.8h, v4.8h, v4.8h
- MOV v4.d[0], v19.d[0]
- MOV v5.d[0], v21.d[0]
+ MOV v4.d[0], v19.d[0]
+ MOV v5.d[0], v21.d[0]
- SQSUB v8.4s, v8.4s , v24.4s
+ SQSUB v8.4s, v8.4s , v24.4s
// VUZP.16 D6, D7
- UZP1 v19.8h, v6.8h, v6.8h
+ UZP1 v19.8h, v6.8h, v6.8h
UZP2 v21.8h, v6.8h, v6.8h
- MOV v6.d[0], v19.d[0]
- MOV v7.d[0], v21.d[0]
+ MOV v6.d[0], v19.d[0]
+ MOV v7.d[0], v21.d[0]
- SQSUB v22.4s, v30.4s , v22.4s
+ SQSUB v22.4s, v30.4s , v22.4s
- sQshL v30.4s, v8.4s,#2
+ sQshL v30.4s, v8.4s, #2
- LD2 {v8.4h, v9.4h}, [x2]
- ADD x2, x2,#16
- sQshL v22.4s, v22.4s,#2
+ LD2 {v8.4h, v9.4h}, [x2]
+ ADD x2, x2, #16
+ sQshL v22.4s, v22.4s, #2
- SQADD v30.4s, v30.4s , v20.4s
- SQADD v22.4s, v22.4s , v20.4s
+ SQADD v30.4s, v30.4s , v20.4s
+ SQADD v22.4s, v22.4s , v20.4s
- sshR v30.4s, v30.4s,#16
+ sshR v30.4s, v30.4s, #16
- // VUZP.16 D30, D31
+// VUZP.16 D30, D31
UZP1 v19.8h, v30.8h, v30.8h
UZP2 v21.8h, v30.8h, v30.8h
- MOV v30.d[0], v19.d[0]
- MOV v30.d[1], v21.d[0]
+ MOV v30.d[0], v19.d[0]
+ MOV v30.d[1], v21.d[0]
- sshR v22.4s, v22.4s,#16
+ sshR v22.4s, v22.4s, #16
// VUZP.16 D22, D23
- UZP1 v19.8h, v22.8h, v22.8h
+ UZP1 v19.8h, v22.8h, v22.8h
UZP2 v21.8h, v22.8h, v22.8h
- MOV v22.d[0], v19.d[0]
- MOV v23.d[0], v21.d[0]
+ MOV v22.d[0], v19.d[0]
+ MOV v23.d[0], v21.d[0]
- mov v23.8b, v30.8b
+ mov v23.8b, v30.8b
SUBS x3, x3, #1
BNE CORE_LOOP
@@ -1190,842 +1190,842 @@ CORE_LOOP:
EPILOGUE:
- ST1 {v14.h}[0],[x0]
- ADD x0, x0, x9
- uMULL v30.4s, v0.4h, v9.4h
+ ST1 {v14.h}[0], [x0]
+ ADD x0, x0, x9
+ uMULL v30.4s, v0.4h, v9.4h
- ST1 {v22.h}[0],[x0]
- ADD x0, x0, x9
- uMULL v28.4s, v2.4h, v8.4h
+ ST1 {v22.h}[0], [x0]
+ ADD x0, x0, x9
+ uMULL v28.4s, v2.4h, v8.4h
- ST1 {v14.h}[1],[x0]
- ADD x0, x0, x9
- uMULL v26.4s, v0.4h, v8.4h
+ ST1 {v14.h}[1], [x0]
+ ADD x0, x0, x9
+ uMULL v26.4s, v0.4h, v8.4h
- ST1 {v22.h}[1],[x0]
- ADD x0, x0, x9
- uMULL v24.4s, v2.4h, v9.4h
+ ST1 {v22.h}[1], [x0]
+ ADD x0, x0, x9
+ uMULL v24.4s, v2.4h, v9.4h
- ST1 {v14.h}[2],[x0]
- ADD x0, x0, x9
- ushR v30.4s, v30.4s,#16
+ ST1 {v14.h}[2], [x0]
+ ADD x0, x0, x9
+ ushR v30.4s, v30.4s, #16
- ST1 {v22.h}[2],[x0]
- ADD x0, x0, x9
- ushR v28.4s, v28.4s,#16
+ ST1 {v22.h}[2], [x0]
+ ADD x0, x0, x9
+ ushR v28.4s, v28.4s, #16
- ST1 {v14.h}[3],[x0]
- ADD x0, x0, x9
- sMLAL v30.4s, v1.4h, v9.4h
+ ST1 {v14.h}[3], [x0]
+ ADD x0, x0, x9
+ sMLAL v30.4s, v1.4h, v9.4h
- ST1 {v22.h}[3],[x0]
- ADD x0, x0, x9
- sMLAL v28.4s, v3.4h, v8.4h
+ ST1 {v22.h}[3], [x0]
+ ADD x0, x0, x9
+ sMLAL v28.4s, v3.4h, v8.4h
- ST1 {v15.h}[0],[x5]
- ADD x5, x5, x10
- ushR v26.4s, v26.4s,#16
+ ST1 {v15.h}[0], [x5]
+ ADD x5, x5, x10
+ ushR v26.4s, v26.4s, #16
- ST1 {v23.h}[0],[x5]
- ADD x5, x5, x10
- ushR v24.4s, v24.4s,#16
+ ST1 {v23.h}[0], [x5]
+ ADD x5, x5, x10
+ ushR v24.4s, v24.4s, #16
- ST1 {v15.h}[1],[x5]
- ADD x5, x5, x10
- sMLAL v26.4s, v1.4h, v8.4h
+ ST1 {v15.h}[1], [x5]
+ ADD x5, x5, x10
+ sMLAL v26.4s, v1.4h, v8.4h
- ST1 {v23.h}[1],[x5]
- ADD x5, x5, x10
- sMLAL v24.4s, v3.4h, v9.4h
+ ST1 {v23.h}[1], [x5]
+ ADD x5, x5, x10
+ sMLAL v24.4s, v3.4h, v9.4h
- ST1 {v15.h}[2],[x5]
- ADD x5, x5, x10
- ADD v30.4s, v30.4s , v28.4s
+ ST1 {v15.h}[2], [x5]
+ ADD x5, x5, x10
+ ADD v30.4s, v30.4s , v28.4s
- ST1 {v23.h}[2],[x5]
- ADD x5, x5, x10
- NEG v30.4s, v30.4s
+ ST1 {v23.h}[2], [x5]
+ ADD x5, x5, x10
+ NEG v30.4s, v30.4s
- ST1 {v15.h}[3],[x5]
- ADD x5, x5, x10
+ ST1 {v15.h}[3], [x5]
+ ADD x5, x5, x10
- ST1 {v23.h}[3],[x5]
- ADD x5, x5, x10
- SUB v28.4s, v24.4s , v26.4s
+ ST1 {v23.h}[3], [x5]
+ ADD x5, x5, x10
+ SUB v28.4s, v24.4s , v26.4s
- uMULL v22.4s, v4.4h, v8.4h
- mov v26.16b, v30.16b
- mov v24.16b, v28.16b
+ uMULL v22.4s, v4.4h, v8.4h
+ mov v26.16b, v30.16b
+ mov v24.16b, v28.16b
- mov v26.16b, v30.16b
- mov v24.16b, v28.16b
+ mov v26.16b, v30.16b
+ mov v24.16b, v28.16b
//VUZP.16 D26, D27
UZP1 v19.8h, v26.8h, v26.8h
UZP2 v21.8h, v26.8h, v26.8h
- MOV v26.d[0], v19.d[0]
- MOV v27.d[0], v21.d[0]
+ MOV v26.d[0], v19.d[0]
+ MOV v27.d[0], v21.d[0]
// VUZP.16 D24, D25
- UZP1 v19.8h, v24.8h, v24.8h
+ UZP1 v19.8h, v24.8h, v24.8h
UZP2 v21.8h, v24.8h, v24.8h
- MOV v24.d[0], v19.d[0]
- MOV v25.d[0], v21.d[0]
+ MOV v24.d[0], v19.d[0]
+ MOV v25.d[0], v21.d[0]
- uMULL v2.4s, v24.4h, v18.4h
- uMULL v0.4s, v26.4h, v18.4h
+ uMULL v2.4s, v24.4h, v18.4h
+ uMULL v0.4s, v26.4h, v18.4h
- ushR v22.4s, v22.4s,#16
- sMLAL v22.4s, v5.4h, v8.4h
+ ushR v22.4s, v22.4s, #16
+ sMLAL v22.4s, v5.4h, v8.4h
- ushR v2.4s, v2.4s,#16
- ushR v0.4s, v0.4s,#16
- sMLAL v2.4s, v25.4h, v18.4h
- sMLAL v0.4s, v27.4h, v18.4h
+ ushR v2.4s, v2.4s, #16
+ ushR v0.4s, v0.4s, #16
+ sMLAL v2.4s, v25.4h, v18.4h
+ sMLAL v0.4s, v27.4h, v18.4h
- uMULL v24.4s, v4.4h, v9.4h
- uMULL v26.4s, v6.4h, v8.4h
+ uMULL v24.4s, v4.4h, v9.4h
+ uMULL v26.4s, v6.4h, v8.4h
- NEG v2.4s, v2.4s
- ADD v28.4s, v28.4s , v0.4s
- ADD v30.4s, v30.4s , v2.4s
+ NEG v2.4s, v2.4s
+ ADD v28.4s, v28.4s , v0.4s
+ ADD v30.4s, v30.4s , v2.4s
- uMULL v0.4s, v6.4h, v9.4h
- sshR v24.4s, v24.4s,#16
- sMLAL v24.4s, v5.4h, v9.4h
- sshR v26.4s, v26.4s,#16
- sshR v0.4s, v0.4s,#16
- sMLAL v26.4s, v7.4h, v8.4h
- sMLAL v0.4s, v7.4h, v9.4h
+ uMULL v0.4s, v6.4h, v9.4h
+ sshR v24.4s, v24.4s, #16
+ sMLAL v24.4s, v5.4h, v9.4h
+ sshR v26.4s, v26.4s, #16
+ sshR v0.4s, v0.4s, #16
+ sMLAL v26.4s, v7.4h, v8.4h
+ sMLAL v0.4s, v7.4h, v9.4h
- ADD v22.4s, v22.4s , v0.4s
- NEG v22.4s, v22.4s
- SUB v24.4s, v26.4s , v24.4s
+ ADD v22.4s, v22.4s , v0.4s
+ NEG v22.4s, v22.4s
+ SUB v24.4s, v26.4s , v24.4s
//LDR w11, [sp, #120]
//sxtw x11,w11
- MOV w11, w26
- dup v14.4s,w11
- SQADD v28.4s, v28.4s , v14.4s
+ MOV w11, w26
+ dup v14.4s, w11
+ SQADD v28.4s, v28.4s , v14.4s
//LDR w11, [sp, #116]
//sxtw x11,w11
- MOV w11, w25
- dup v0.4s,w11
- sQshL v28.4s, v28.4s, v0.4s
+ MOV w11, w25
+ dup v0.4s, w11
+ sQshL v28.4s, v28.4s, v0.4s
- mov v0.16b, v22.16b
- mov v14.16b, v24.16b
+ mov v0.16b, v22.16b
+ mov v14.16b, v24.16b
// VUZP.16 D22, D23
UZP1 v19.8h, v22.8h, v22.8h
UZP2 v21.8h, v22.8h, v22.8h
- MOV v22.d[0], v19.d[0]
- MOV v23.d[0], v21.d[0]
+ MOV v22.d[0], v19.d[0]
+ MOV v23.d[0], v21.d[0]
// VUZP.16 D24, D25
- UZP1 v19.8h, v24.8h, v24.8h
+ UZP1 v19.8h, v24.8h, v24.8h
UZP2 v21.8h, v24.8h, v24.8h
- MOV v24.d[0], v19.d[0]
- MOV v25.d[0], v21.d[0]
+ MOV v24.d[0], v19.d[0]
+ MOV v25.d[0], v21.d[0]
- uMULL v8.4s, v24.4h, v18.4h
- uMULL v26.4s, v22.4h, v18.4h
+ uMULL v8.4s, v24.4h, v18.4h
+ uMULL v26.4s, v22.4h, v18.4h
- NEG v2.4s, v30.4s
+ NEG v2.4s, v30.4s
// VUZP.16 D30, D31
UZP1 v19.8h, v30.8h, v30.8h
UZP2 v21.8h, v30.8h, v30.8h
- MOV v30.d[0], v19.d[0]
- MOV v30.d[1], v21.d[0]
+ MOV v30.d[0], v19.d[0]
+ MOV v30.d[1], v21.d[0]
// VUZP.16 D2, D3
UZP1 v19.8h, v2.8h, v2.8h
UZP2 v21.8h, v2.8h, v2.8h
- MOV v2.d[0], v19.d[0]
- MOV v3.d[0], v21.d[0]
+ MOV v2.d[0], v19.d[0]
+ MOV v3.d[0], v21.d[0]
- uMULL v4.4s, v30.4h, v12.4h
- uMULL v6.4s, v2.4h, v13.4h
+ uMULL v4.4s, v30.4h, v12.4h
+ uMULL v6.4s, v2.4h, v13.4h
- ushR v8.4s, v8.4s,#16
- ushR v26.4s, v26.4s,#16
+ ushR v8.4s, v8.4s, #16
+ ushR v26.4s, v26.4s, #16
- sMLAL v8.4s, v25.4h, v18.4h
- sMLAL v26.4s, v23.4h, v18.4h
+ sMLAL v8.4s, v25.4h, v18.4h
+ sMLAL v26.4s, v23.4h, v18.4h
- ushR v4.4s, v4.4s,#16
- ushR v6.4s, v6.4s,#16
+ ushR v4.4s, v4.4s, #16
+ ushR v6.4s, v6.4s, #16
- MOV v19.d[0], v30.d[1]
+ MOV v19.d[0], v30.d[1]
- sMLAL v4.4s, v19.4h, v12.4h
- sMLAL v6.4s, v3.4h, v13.4h
+ sMLAL v4.4s, v19.4h, v12.4h
+ sMLAL v6.4s, v3.4h, v13.4h
- NEG v8.4s, v8.4s
- ADD v14.4s, v14.4s , v26.4s
- ADD v0.4s, v0.4s , v8.4s
+ NEG v8.4s, v8.4s
+ ADD v14.4s, v14.4s , v26.4s
+ ADD v0.4s, v0.4s , v8.4s
//LDR w11, [sp, #120]
//sxtw x11,w11
- MOV w11, w26
- dup v8.4s,w11
- SQADD v0.4s, v0.4s , v8.4s
+ MOV w11, w26
+ dup v8.4s, w11
+ SQADD v0.4s, v0.4s , v8.4s
//LDR w11, [sp, #116]
//sxtw x11,w11
- MOV w11, w25
- dup v26.4s,w11
- sQshL v0.4s, v0.4s, v26.4s
+ MOV w11, w25
+ dup v26.4s, w11
+ sQshL v0.4s, v0.4s, v26.4s
- mov v26.16b, v28.16b
+ mov v26.16b, v28.16b
- LD2 { v28.4s, v29.4s}, [x4]
- MOV v30.16b, v29.16b
- MOV v29.d[0], v28.d[1]
+ LD2 { v28.4s, v29.4s}, [x4]
+ MOV v30.16b, v29.16b
+ MOV v29.d[0], v28.d[1]
// VZIP.32 Q13, Q0
- ZIP1 v19.4s, v26.4s, v0.4s
- ZIP2 v0.4s, v26.4s, v0.4s
- MOV v26.16b, v19.16b
+ ZIP1 v19.4s, v26.4s, v0.4s
+ ZIP2 v0.4s, v26.4s, v0.4s
+ MOV v26.16b, v19.16b
- ST1 { v26.4s}, [x4],#16
- ST1 { v0.4s}, [x4],#16
+ ST1 { v26.4s}, [x4], #16
+ ST1 { v0.4s}, [x4], #16
- movi v1.2s, #0
+ movi v1.2s, #0
// VADDL.S16 Q0, D13, D1
- SADDL v0.4s, v13.4h, v1.4h
- MOV v1.d[0], v0.d[1]
-
- sMULL v26.2d, v28.2s, v0.2s
- Sqxtn v8.2s, v26.2d
- sMULL v26.2d, v29.2s, v1.2s
- Sqxtn v9.2s, v26.2d
- MOV v8.d[1], v9.d[0]
- movi v1.2s, #0
+ SADDL v0.4s, v13.4h, v1.4h
+ MOV v1.d[0], v0.d[1]
+
+ sMULL v26.2d, v28.2s, v0.2s
+ Sqxtn v8.2s, v26.2d
+ sMULL v26.2d, v29.2s, v1.2s
+ Sqxtn v9.2s, v26.2d
+ MOV v8.d[1], v9.d[0]
+ movi v1.2s, #0
// VADDL.S16 Q0, D12, D1
- SADDL v0.4s, v12.4h, v1.4h
- MOV v1.d[0], v0.d[1]
+ SADDL v0.4s, v12.4h, v1.4h
+ MOV v1.d[0], v0.d[1]
- sMULL v24.2d, v28.2s, v0.2s
- Sqxtn v26.2s, v24.2d
- sMULL v24.2d, v29.2s, v1.2s
- Sqxtn v27.2s, v24.2d
- MOV v26.d[1], v27.d[0]
+ sMULL v24.2d, v28.2s, v0.2s
+ Sqxtn v26.2s, v24.2d
+ sMULL v24.2d, v29.2s, v1.2s
+ Sqxtn v27.2s, v24.2d
+ MOV v26.d[1], v27.d[0]
- sQshL v4.4s, v4.4s, v16.4s
- sQshL v6.4s, v6.4s, v16.4s
+ sQshL v4.4s, v4.4s, v16.4s
+ sQshL v6.4s, v6.4s, v16.4s
- SQSUB v4.4s, v4.4s , v8.4s
- SQSUB v6.4s, v6.4s , v26.4s
+ SQSUB v4.4s, v4.4s , v8.4s
+ SQSUB v6.4s, v6.4s , v26.4s
- NEG v26.4s, v14.4s
+ NEG v26.4s, v14.4s
// VUZP.16 D14, D15
UZP1 v19.8h, v14.8h, v14.8h
UZP2 v21.8h, v14.8h, v14.8h
- MOV v14.d[0], v19.d[0]
- MOV v15.d[0], v21.d[0]
+ MOV v14.d[0], v19.d[0]
+ MOV v15.d[0], v21.d[0]
- // VUZP.16 D26, D27
+// VUZP.16 D26, D27
UZP1 v19.8h, v26.8h, v26.8h
UZP2 v21.8h, v26.8h, v26.8h
- MOV v26.d[0], v19.d[0]
- MOV v27.d[0], v21.d[0]
+ MOV v26.d[0], v19.d[0]
+ MOV v27.d[0], v21.d[0]
- movi v1.2s, #0
+ movi v1.2s, #0
//VADDL.S16 Q0, D10, D1
- SADDL v0.4s, v10.4h, v1.4h
- MOV v1.d[0], v0.d[1]
-
- sMULL v22.2d, v30.2s, v0.2s
- Sqxtn v24.2s, v22.2d
- sMULL2 v22.2d, v30.4s, v0.4s
- Sqxtn v25.2s, v22.2d
- MOV v24.d[1], v25.d[0]
- movi v1.2s, #0
+ SADDL v0.4s, v10.4h, v1.4h
+ MOV v1.d[0], v0.d[1]
+
+ sMULL v22.2d, v30.2s, v0.2s
+ Sqxtn v24.2s, v22.2d
+ sMULL2 v22.2d, v30.4s, v0.4s
+ Sqxtn v25.2s, v22.2d
+ MOV v24.d[1], v25.d[0]
+ movi v1.2s, #0
//VADDL.S16 Q0, D11, D1
- SADDL v0.4s, v11.4h, v1.4h
- MOV v1.d[0], v0.d[1]
+ SADDL v0.4s, v11.4h, v1.4h
+ MOV v1.d[0], v0.d[1]
- sMULL v8.2d, v30.2s, v0.2s
- Sqxtn v22.2s, v8.2d
- sMULL2 v8.2d, v30.4s, v0.4s
- Sqxtn v23.2s, v8.2d
- MOV v22.d[1], v23.d[0]
+ sMULL v8.2d, v30.2s, v0.2s
+ Sqxtn v22.2s, v8.2d
+ sMULL2 v8.2d, v30.4s, v0.4s
+ Sqxtn v23.2s, v8.2d
+ MOV v22.d[1], v23.d[0]
- uMULL v8.4s, v26.4h, v11.4h
- uMULL v30.4s, v14.4h, v10.4h
+ uMULL v8.4s, v26.4h, v11.4h
+ uMULL v30.4s, v14.4h, v10.4h
- ushR v8.4s, v8.4s,#16
+ ushR v8.4s, v8.4s, #16
- ushR v30.4s, v30.4s,#16
+ ushR v30.4s, v30.4s, #16
- sMLAL v8.4s, v27.4h, v11.4h
+ sMLAL v8.4s, v27.4h, v11.4h
- sMLAL v30.4s, v15.4h, v10.4h
+ sMLAL v30.4s, v15.4h, v10.4h
- sQshL v4.4s, v4.4s,#2
+ sQshL v4.4s, v4.4s, #2
- sQshL v6.4s, v6.4s,#2
+ sQshL v6.4s, v6.4s, #2
- SQADD v14.4s, v4.4s , v20.4s
+ SQADD v14.4s, v4.4s , v20.4s
- SQADD v6.4s, v6.4s , v20.4s
+ SQADD v6.4s, v6.4s , v20.4s
- sshR v14.4s, v14.4s,#16
+ sshR v14.4s, v14.4s, #16
// VUZP.16 D14, D15
UZP1 v19.8h, v14.8h, v14.8h
UZP2 v21.8h, v14.8h, v14.8h
- MOV v14.d[0], v19.d[0]
- MOV v15.d[0], v21.d[0]
+ MOV v14.d[0], v19.d[0]
+ MOV v15.d[0], v21.d[0]
- sshR v6.4s, v6.4s,#16
+ sshR v6.4s, v6.4s, #16
// VUZP.16 D6, D7
UZP1 v19.8h, v6.8h, v6.8h
UZP2 v21.8h, v6.8h, v6.8h
- MOV v6.d[0], v19.d[0]
- MOV v7.d[0], v21.d[0]
+ MOV v6.d[0], v19.d[0]
+ MOV v7.d[0], v21.d[0]
- mov v15.8b, v6.8b
- sQshL v8.4s, v8.4s, v16.4s
+ mov v15.8b, v6.8b
+ sQshL v8.4s, v8.4s, v16.4s
- sQshL v30.4s, v30.4s, v16.4s
+ sQshL v30.4s, v30.4s, v16.4s
- SQSUB v8.4s, v8.4s , v24.4s
+ SQSUB v8.4s, v8.4s , v24.4s
- SQSUB v22.4s, v30.4s , v22.4s
+ SQSUB v22.4s, v30.4s , v22.4s
- sQshL v30.4s, v8.4s,#2
+ sQshL v30.4s, v8.4s, #2
- sQshL v22.4s, v22.4s,#2
+ sQshL v22.4s, v22.4s, #2
- SQADD v30.4s, v30.4s , v20.4s
- SQADD v22.4s, v22.4s , v20.4s
+ SQADD v30.4s, v30.4s , v20.4s
+ SQADD v22.4s, v22.4s , v20.4s
- sshR v30.4s, v30.4s,#16
+ sshR v30.4s, v30.4s, #16
//VUZP.16 D30, D31
UZP1 v19.8h, v30.8h, v30.8h
UZP2 v21.8h, v30.8h, v30.8h
- MOV v30.d[0], v19.d[0]
- MOV v30.d[1], v21.d[0]
+ MOV v30.d[0], v19.d[0]
+ MOV v30.d[1], v21.d[0]
- sshR v22.4s, v22.4s,#16
+ sshR v22.4s, v22.4s, #16
// VUZP.16 D22, D23
UZP1 v19.8h, v22.8h, v22.8h
UZP2 v21.8h, v22.8h, v22.8h
- MOV v22.d[0], v19.d[0]
- MOV v23.d[0], v21.d[0]
-
- mov v23.8b, v30.8b
-
-
-
-
- ST1 {v14.h}[0],[x0]
- ADD x0, x0, x9
- ST1 {v22.h}[0],[x0]
- ADD x0, x0, x9
- ST1 {v14.h}[1],[x0]
- ADD x0, x0, x9
- ST1 {v22.h}[1],[x0]
- ADD x0, x0, x9
- ST1 {v14.h}[2],[x0]
- ADD x0, x0, x9
- ST1 {v22.h}[2],[x0]
- ADD x0, x0, x9
- ST1 {v14.h}[3],[x0]
- ADD x0, x0, x9
- ST1 {v22.h}[3],[x0]
- ADD x0, x0, x9
- ST1 {v15.h}[0],[x5]
- ADD x5, x5, x10
- ST1 {v23.h}[0],[x5]
- ADD x5, x5, x10
- ST1 {v15.h}[1],[x5]
- ADD x5, x5, x10
- ST1 {v23.h}[1],[x5]
- ADD x5, x5, x10
- ST1 {v15.h}[2],[x5]
- ADD x5, x5, x10
- ST1 {v23.h}[2],[x5]
- ADD x5, x5, x10
- ST1 {v15.h}[3],[x5]
- ADD x5, x5, x10
- ST1 {v23.h}[3],[x5]
- ADD x5, x5, x10
+ MOV v22.d[0], v19.d[0]
+ MOV v23.d[0], v21.d[0]
+
+ mov v23.8b, v30.8b
+
+
+
+
+ ST1 {v14.h}[0], [x0]
+ ADD x0, x0, x9
+ ST1 {v22.h}[0], [x0]
+ ADD x0, x0, x9
+ ST1 {v14.h}[1], [x0]
+ ADD x0, x0, x9
+ ST1 {v22.h}[1], [x0]
+ ADD x0, x0, x9
+ ST1 {v14.h}[2], [x0]
+ ADD x0, x0, x9
+ ST1 {v22.h}[2], [x0]
+ ADD x0, x0, x9
+ ST1 {v14.h}[3], [x0]
+ ADD x0, x0, x9
+ ST1 {v22.h}[3], [x0]
+ ADD x0, x0, x9
+ ST1 {v15.h}[0], [x5]
+ ADD x5, x5, x10
+ ST1 {v23.h}[0], [x5]
+ ADD x5, x5, x10
+ ST1 {v15.h}[1], [x5]
+ ADD x5, x5, x10
+ ST1 {v23.h}[1], [x5]
+ ADD x5, x5, x10
+ ST1 {v15.h}[2], [x5]
+ ADD x5, x5, x10
+ ST1 {v23.h}[2], [x5]
+ ADD x5, x5, x10
+ ST1 {v15.h}[3], [x5]
+ ADD x5, x5, x10
+ ST1 {v23.h}[3], [x5]
+ ADD x5, x5, x10
ARM_EPILOGUE:
ARM_LOOP:
- LD2 { v0.4s, v1.4s}, [x1]
- MOV v2.16b, v1.16b
+ LD2 { v0.4s, v1.4s}, [x1]
+ MOV v2.16b, v1.16b
//VUZP.16 D0, D1
UZP1 v19.8h, v0.8h, v0.8h
UZP2 v21.8h, v0.8h, v0.8h
- MOV v0.d[0], v19.d[0]
- MOV v0.d[1], v21.d[0]
+ MOV v0.d[0], v19.d[0]
+ MOV v0.d[1], v21.d[0]
//VUZP.16 D2, D3
UZP1 v19.8h, v2.8h, v2.8h
UZP2 v21.8h, v2.8h, v2.8h
- MOV v2.d[0], v19.d[0]
- MOV v2.d[1], v21.d[0]
+ MOV v2.d[0], v19.d[0]
+ MOV v2.d[1], v21.d[0]
- rev64 v0.8h, v0.8h
- MOV v1.d[0], v0.d[1]
- rev64 v2.8h, v2.8h
- MOV v3.d[0], v2.d[1]
+ rev64 v0.8h, v0.8h
+ MOV v1.d[0], v0.d[1]
+ rev64 v2.8h, v2.8h
+ MOV v3.d[0], v2.d[1]
- LD2 {v8.4h, v9.4h}, [x2]
- ADD x2, x2,#16
+ LD2 {v8.4h, v9.4h}, [x2]
+ ADD x2, x2, #16
- LD2 {v4.2s, v5.2s}, [x8]
- ADD x8, x8,#16
- MOV v6.16b, v5.16b
- movi v5.2s, #0x00000000
- movi v7.2s, #0x00000000
+ LD2 {v4.2s, v5.2s}, [x8]
+ ADD x8, x8, #16
+ MOV v6.16b, v5.16b
+ movi v5.2s, #0x00000000
+ movi v7.2s, #0x00000000
- LD1 {v5.s}[0],[x8],#4
- LD1 {v7.s}[0],[x8]
+ LD1 {v5.s}[0], [x8], #4
+ LD1 {v7.s}[0], [x8]
MOV x12, #16
- MOV v4.d[1], v5.d[0]
- MOV v6.d[1], v7.d[0]
+ MOV v4.d[1], v5.d[0]
+ MOV v6.d[1], v7.d[0]
// VUZP.16 D4, D5
UZP1 v19.8h, v4.8h, v4.8h
UZP2 v21.8h, v4.8h, v4.8h
- MOV v4.d[0], v19.d[0]
- MOV v5.d[0], v21.d[0]
+ MOV v4.d[0], v19.d[0]
+ MOV v5.d[0], v21.d[0]
// VUZP.16 D6, D7
UZP1 v19.8h, v6.8h, v6.8h
UZP2 v21.8h, v6.8h, v6.8h
- MOV v6.d[0], v19.d[0]
- MOV v7.d[0], v21.d[0]
+ MOV v6.d[0], v19.d[0]
+ MOV v7.d[0], v21.d[0]
ADD x6, x6, #16
MOV x12, #-4
- LD2 {v11.2s, v12.2s}, [x6]
- ADD x6, x6, x12
- MOV v13.16b, v12.16b
+ LD2 {v11.2s, v12.2s}, [x6]
+ ADD x6, x6, x12
+ MOV v13.16b, v12.16b
- movi v10.2s, #0x00000000
+ movi v10.2s, #0x00000000
- LD1 {v12.s}[1],[x6]
- ADD x6, x6, x12
- LD1 {v10.s}[1],[x6]
- ADD x6, x6, x12
- LD1 {v12.s}[0],[x6]
- ADD x6, x6, x12
+ LD1 {v12.s}[1], [x6]
+ ADD x6, x6, x12
+ LD1 {v10.s}[1], [x6]
+ ADD x6, x6, x12
+ LD1 {v12.s}[0], [x6]
+ ADD x6, x6, x12
- MOV v10.d[1], v11.d[0]
- MOV v12.d[1], v13.d[0]
+ MOV v10.d[1], v11.d[0]
+ MOV v12.d[1], v13.d[0]
//VUZP.16 D10, D11
UZP1 v19.8h, v10.8h, v10.8h
UZP2 v21.8h, v10.8h, v10.8h
- MOV v10.d[0], v19.d[0]
- MOV v10.d[1], v21.d[0]
+ MOV v10.d[0], v19.d[0]
+ MOV v10.d[1], v21.d[0]
//VUZP.16 D12, D13
UZP1 v19.8h, v12.8h, v12.8h
UZP2 v21.8h, v12.8h, v12.8h
- MOV v12.d[0], v19.d[0]
- MOV v12.d[1], v21.d[0]
+ MOV v12.d[0], v19.d[0]
+ MOV v12.d[1], v21.d[0]
- rev64 v10.8h, v10.8h
- MOV v11.d[0], v10.d[1]
- rev64 v12.8h, v12.8h
- MOV v13.d[0], v12.d[1]
+ rev64 v10.8h, v10.8h
+ MOV v11.d[0], v10.d[1]
+ rev64 v12.8h, v12.8h
+ MOV v13.d[0], v12.d[1]
- uMULL v30.4s, v0.4h, v9.4h
- uMULL v28.4s, v2.4h, v8.4h
- uMULL v26.4s, v0.4h, v8.4h
- uMULL v24.4s, v2.4h, v9.4h
+ uMULL v30.4s, v0.4h, v9.4h
+ uMULL v28.4s, v2.4h, v8.4h
+ uMULL v26.4s, v0.4h, v8.4h
+ uMULL v24.4s, v2.4h, v9.4h
- ushR v30.4s, v30.4s,#16
- ushR v28.4s, v28.4s,#16
+ ushR v30.4s, v30.4s, #16
+ ushR v28.4s, v28.4s, #16
- sMLAL v30.4s, v1.4h, v9.4h
- sMLAL v28.4s, v3.4h, v8.4h
+ sMLAL v30.4s, v1.4h, v9.4h
+ sMLAL v28.4s, v3.4h, v8.4h
- ushR v26.4s, v26.4s,#16
- ushR v24.4s, v24.4s,#16
+ ushR v26.4s, v26.4s, #16
+ ushR v24.4s, v24.4s, #16
- sMLAL v26.4s, v1.4h, v8.4h
- sMLAL v24.4s, v3.4h, v9.4h
+ sMLAL v26.4s, v1.4h, v8.4h
+ sMLAL v24.4s, v3.4h, v9.4h
- ADD v30.4s, v30.4s , v28.4s
- NEG v30.4s, v30.4s
+ ADD v30.4s, v30.4s , v28.4s
+ NEG v30.4s, v30.4s
- uMULL v22.4s, v4.4h, v8.4h
+ uMULL v22.4s, v4.4h, v8.4h
- SUB v28.4s, v24.4s , v26.4s
+ SUB v28.4s, v24.4s , v26.4s
- mov v26.16b, v30.16b
- mov v24.16b, v28.16b
+ mov v26.16b, v30.16b
+ mov v24.16b, v28.16b
// VUZP.16 D26, D27
UZP1 v19.8h, v26.8h, v26.8h
UZP2 v21.8h, v26.8h, v26.8h
- MOV v26.d[0], v19.d[0]
- MOV v27.d[0], v21.d[0]
+ MOV v26.d[0], v19.d[0]
+ MOV v27.d[0], v21.d[0]
//VUZP.16 D24, D25
UZP1 v19.8h, v24.8h, v24.8h
UZP2 v21.8h, v24.8h, v24.8h
- MOV v24.d[0], v19.d[0]
- MOV v25.d[0], v21.d[0]
+ MOV v24.d[0], v19.d[0]
+ MOV v25.d[0], v21.d[0]
- uMULL v2.4s, v24.4h, v18.4h
- uMULL v0.4s, v26.4h, v18.4h
+ uMULL v2.4s, v24.4h, v18.4h
+ uMULL v0.4s, v26.4h, v18.4h
- ushR v22.4s, v22.4s,#16
- sMLAL v22.4s, v5.4h, v8.4h
+ ushR v22.4s, v22.4s, #16
+ sMLAL v22.4s, v5.4h, v8.4h
- ushR v2.4s, v2.4s,#16
- ushR v0.4s, v0.4s,#16
- sMLAL v2.4s, v25.4h, v18.4h
- sMLAL v0.4s, v27.4h, v18.4h
+ ushR v2.4s, v2.4s, #16
+ ushR v0.4s, v0.4s, #16
+ sMLAL v2.4s, v25.4h, v18.4h
+ sMLAL v0.4s, v27.4h, v18.4h
- uMULL v24.4s, v4.4h, v9.4h
- uMULL v26.4s, v6.4h, v8.4h
+ uMULL v24.4s, v4.4h, v9.4h
+ uMULL v26.4s, v6.4h, v8.4h
- NEG v2.4s, v2.4s
- ADD v28.4s, v28.4s , v0.4s
- ADD v30.4s, v30.4s , v2.4s
+ NEG v2.4s, v2.4s
+ ADD v28.4s, v28.4s , v0.4s
+ ADD v30.4s, v30.4s , v2.4s
- uMULL v0.4s, v6.4h, v9.4h
- sshR v24.4s, v24.4s,#16
- sMLAL v24.4s, v5.4h, v9.4h
- sshR v26.4s, v26.4s,#16
- sshR v0.4s, v0.4s,#16
- sMLAL v26.4s, v7.4h, v8.4h
- sMLAL v0.4s, v7.4h, v9.4h
+ uMULL v0.4s, v6.4h, v9.4h
+ sshR v24.4s, v24.4s, #16
+ sMLAL v24.4s, v5.4h, v9.4h
+ sshR v26.4s, v26.4s, #16
+ sshR v0.4s, v0.4s, #16
+ sMLAL v26.4s, v7.4h, v8.4h
+ sMLAL v0.4s, v7.4h, v9.4h
- ADD v22.4s, v22.4s , v0.4s
- NEG v22.4s, v22.4s
- SUB v24.4s, v26.4s , v24.4s
+ ADD v22.4s, v22.4s , v0.4s
+ NEG v22.4s, v22.4s
+ SUB v24.4s, v26.4s , v24.4s
//LDR w11, [sp, #120]
//sxtw x11,w11
- MOV w11, w26
- dup v14.4s,w11
- SQADD v28.4s, v28.4s , v14.4s
+ MOV w11, w26
+ dup v14.4s, w11
+ SQADD v28.4s, v28.4s , v14.4s
//LDR w11, [sp, #116]
//sxtw x11,w11
- MOV w11, w25
- dup v0.4s,w11
- sQshL v28.4s, v28.4s, v0.4s
+ MOV w11, w25
+ dup v0.4s, w11
+ sQshL v28.4s, v28.4s, v0.4s
- mov v0.16b, v22.16b
- mov v14.16b, v24.16b
+ mov v0.16b, v22.16b
+ mov v14.16b, v24.16b
// VUZP.16 D22, D23
UZP1 v19.8h, v22.8h, v22.8h
UZP2 v21.8h, v22.8h, v22.8h
- MOV v22.d[0], v19.d[0]
- MOV v23.d[0], v21.d[0]
+ MOV v22.d[0], v19.d[0]
+ MOV v23.d[0], v21.d[0]
- // VUZP.16 D24, D25
+// VUZP.16 D24, D25
UZP1 v19.8h, v24.8h, v24.8h
UZP2 v21.8h, v24.8h, v24.8h
- MOV v24.d[0], v19.d[0]
- MOV v25.d[0], v21.d[0]
+ MOV v24.d[0], v19.d[0]
+ MOV v25.d[0], v21.d[0]
- uMULL v8.4s, v24.4h, v18.4h
- uMULL v26.4s, v22.4h, v18.4h
+ uMULL v8.4s, v24.4h, v18.4h
+ uMULL v26.4s, v22.4h, v18.4h
- NEG v2.4s, v30.4s
+ NEG v2.4s, v30.4s
// VUZP.16 D30, D31
UZP1 v19.8h, v30.8h, v30.8h
UZP2 v21.8h, v30.8h, v30.8h
- MOV v30.d[0], v19.d[0]
- MOV v30.d[1], v21.d[0]
+ MOV v30.d[0], v19.d[0]
+ MOV v30.d[1], v21.d[0]
// VUZP.16 D2, D3
UZP1 v19.8h, v2.8h, v2.8h
UZP2 v21.8h, v2.8h, v2.8h
- MOV v2.d[0], v19.d[0]
- MOV v3.d[0], v21.d[0]
+ MOV v2.d[0], v19.d[0]
+ MOV v3.d[0], v21.d[0]
- uMULL v4.4s, v30.4h, v12.4h
- uMULL v6.4s, v2.4h, v13.4h
+ uMULL v4.4s, v30.4h, v12.4h
+ uMULL v6.4s, v2.4h, v13.4h
- ushR v8.4s, v8.4s,#16
- ushR v26.4s, v26.4s,#16
+ ushR v8.4s, v8.4s, #16
+ ushR v26.4s, v26.4s, #16
- sMLAL v8.4s, v25.4h, v18.4h
- sMLAL v26.4s, v23.4h, v18.4h
+ sMLAL v8.4s, v25.4h, v18.4h
+ sMLAL v26.4s, v23.4h, v18.4h
- ushR v4.4s, v4.4s,#16
- ushR v6.4s, v6.4s,#16
+ ushR v4.4s, v4.4s, #16
+ ushR v6.4s, v6.4s, #16
- MOV v19.d[0], v30.d[1]
+ MOV v19.d[0], v30.d[1]
- sMLAL v4.4s, v19.4h, v12.4h
- sMLAL v6.4s, v3.4h, v13.4h
+ sMLAL v4.4s, v19.4h, v12.4h
+ sMLAL v6.4s, v3.4h, v13.4h
- NEG v8.4s, v8.4s
- ADD v14.4s, v14.4s , v26.4s
- ADD v0.4s, v0.4s , v8.4s
+ NEG v8.4s, v8.4s
+ ADD v14.4s, v14.4s , v26.4s
+ ADD v0.4s, v0.4s , v8.4s
//LDR w11, [sp, #120]
//sxtw x11,w11
- MOV w11, w26
- dup v8.4s,w11
- SQADD v0.4s, v0.4s , v8.4s
+ MOV w11, w26
+ dup v8.4s, w11
+ SQADD v0.4s, v0.4s , v8.4s
//LDR w11, [sp, #116]
//sxtw x11,w11
- MOV w11, w25
- dup v26.4s,w11
- sQshL v0.4s, v0.4s, v26.4s
+ MOV w11, w25
+ dup v26.4s, w11
+ sQshL v0.4s, v0.4s, v26.4s
- mov v26.16b, v28.16b
+ mov v26.16b, v28.16b
MOV x6, x4
- LD1 {v28.2s, v29.2s}, [x4],#16
- movi v19.2s, #0x00000000
- LD1 {v30.s}[0],[x4],#4
- LD1 {v30.s}[1],[x4],#4
- LD1 {v19.s}[0],[x4],#4
+ LD1 {v28.2s, v29.2s}, [x4], #16
+ movi v19.2s, #0x00000000
+ LD1 {v30.s}[0], [x4], #4
+ LD1 {v30.s}[1], [x4], #4
+ LD1 {v19.s}[0], [x4], #4
- MOV v28.d[1], v29.d[0]
- MOV v30.d[1], v19.d[0]
+ MOV v28.d[1], v29.d[0]
+ MOV v30.d[1], v19.d[0]
//VUZP.32 Q14, Q15
UZP1 v19.4s, v28.4s, v30.4s
UZP2 v30.4s, v28.4s, v30.4s
- MOV v28.16b, v19.16b
- MOV v29.d[0], v28.d[1]
-
- ST1 {v26.s}[0],[x6],#4
- ST1 {v0.s}[0],[x6],#4
- ST1 {v26.s}[1],[x6],#4
- ST1 {v0.s}[1],[x6],#4
- ST1 {v26.s}[2],[x6],#4
- ST1 {v0.s}[2],[x6],#4
- ST1 {v26.s}[3],[x6],#4
-
- movi v1.2s, #0
+ MOV v28.16b, v19.16b
+ MOV v29.d[0], v28.d[1]
+
+ ST1 {v26.s}[0], [x6], #4
+ ST1 {v0.s}[0], [x6], #4
+ ST1 {v26.s}[1], [x6], #4
+ ST1 {v0.s}[1], [x6], #4
+ ST1 {v26.s}[2], [x6], #4
+ ST1 {v0.s}[2], [x6], #4
+ ST1 {v26.s}[3], [x6], #4
+
+ movi v1.2s, #0
//VADDL.S16 Q0, D13, D1
- SADDL v0.4s, v13.4h, v1.4h
- MOV v1.d[0], v0.d[1]
-
- sMULL v26.2d, v28.2s, v0.2s
- Sqxtn v8.2s, v26.2d
- sMULL v26.2d, v29.2s, v1.2s
- Sqxtn v9.2s, v26.2d
- MOV v8.d[1], v9.d[0]
- movi v1.2s, #0
+ SADDL v0.4s, v13.4h, v1.4h
+ MOV v1.d[0], v0.d[1]
+
+ sMULL v26.2d, v28.2s, v0.2s
+ Sqxtn v8.2s, v26.2d
+ sMULL v26.2d, v29.2s, v1.2s
+ Sqxtn v9.2s, v26.2d
+ MOV v8.d[1], v9.d[0]
+ movi v1.2s, #0
//VADDL.S16 Q0, D12, D1
- SADDL v0.4s, v12.4h, v1.4h
- MOV v1.d[0], v0.d[1]
+ SADDL v0.4s, v12.4h, v1.4h
+ MOV v1.d[0], v0.d[1]
- sMULL v24.2d, v28.2s, v0.2s
- Sqxtn v26.2s, v24.2d
- sMULL v24.2d, v29.2s, v1.2s
- Sqxtn v27.2s, v24.2d
- MOV v26.d[1], v27.d[0]
+ sMULL v24.2d, v28.2s, v0.2s
+ Sqxtn v26.2s, v24.2d
+ sMULL v24.2d, v29.2s, v1.2s
+ Sqxtn v27.2s, v24.2d
+ MOV v26.d[1], v27.d[0]
- sQshL v4.4s, v4.4s, v16.4s
- sQshL v6.4s, v6.4s, v16.4s
+ sQshL v4.4s, v4.4s, v16.4s
+ sQshL v6.4s, v6.4s, v16.4s
- SQSUB v4.4s, v4.4s , v8.4s
- SQSUB v6.4s, v6.4s , v26.4s
+ SQSUB v4.4s, v4.4s , v8.4s
+ SQSUB v6.4s, v6.4s , v26.4s
- NEG v26.4s, v14.4s
+ NEG v26.4s, v14.4s
//VUZP.16 D14, D15
UZP1 v19.8h, v14.8h, v14.8h
UZP2 v21.8h, v14.8h, v14.8h
- MOV v14.d[0], v19.d[0]
- MOV v15.d[0], v21.d[0]
+ MOV v14.d[0], v19.d[0]
+ MOV v15.d[0], v21.d[0]
// VUZP.16 D26, D27
UZP1 v19.8h, v26.8h, v26.8h
UZP2 v21.8h, v26.8h, v26.8h
- MOV v26.d[0], v19.d[0]
- MOV v27.d[0], v21.d[0]
+ MOV v26.d[0], v19.d[0]
+ MOV v27.d[0], v21.d[0]
- movi v1.2s, #0
+ movi v1.2s, #0
//VADDL.S16 Q0, D10, D1
- SADDL v0.4s, v10.4h, v1.4h
- MOV v1.d[0], v0.d[1]
+ SADDL v0.4s, v10.4h, v1.4h
+ MOV v1.d[0], v0.d[1]
- sMULL v22.2d, v30.2s, v0.2s
- Sqxtn v24.2s, v22.2d
- sMULL2 v22.2d, v30.4s, v0.4s
- Sqxtn v25.2s, v22.2d
- MOV v24.d[1], v25.d[0]
+ sMULL v22.2d, v30.2s, v0.2s
+ Sqxtn v24.2s, v22.2d
+ sMULL2 v22.2d, v30.4s, v0.4s
+ Sqxtn v25.2s, v22.2d
+ MOV v24.d[1], v25.d[0]
- movi v1.2s, #0
+ movi v1.2s, #0
// VADDL.S16 Q0, D11, D1
- SADDL v0.4s, v11.4h, v1.4h
- MOV v1.d[0], v0.d[1]
+ SADDL v0.4s, v11.4h, v1.4h
+ MOV v1.d[0], v0.d[1]
- sMULL v8.2d, v30.2s, v0.2s
- Sqxtn v22.2s, v8.2d
- sMULL2 v8.2d, v30.4s, v0.4s
- Sqxtn v23.2s, v8.2d
- MOV v22.d[1], v23.d[0]
+ sMULL v8.2d, v30.2s, v0.2s
+ Sqxtn v22.2s, v8.2d
+ sMULL2 v8.2d, v30.4s, v0.4s
+ Sqxtn v23.2s, v8.2d
+ MOV v22.d[1], v23.d[0]
- uMULL v8.4s, v26.4h, v11.4h
- uMULL v30.4s, v14.4h, v10.4h
+ uMULL v8.4s, v26.4h, v11.4h
+ uMULL v30.4s, v14.4h, v10.4h
- ushR v8.4s, v8.4s,#16
+ ushR v8.4s, v8.4s, #16
- ushR v30.4s, v30.4s,#16
+ ushR v30.4s, v30.4s, #16
- sMLAL v8.4s, v27.4h, v11.4h
+ sMLAL v8.4s, v27.4h, v11.4h
- sMLAL v30.4s, v15.4h, v10.4h
+ sMLAL v30.4s, v15.4h, v10.4h
- sQshL v4.4s, v4.4s,#2
+ sQshL v4.4s, v4.4s, #2
- sQshL v6.4s, v6.4s,#2
+ sQshL v6.4s, v6.4s, #2
- SQADD v14.4s, v4.4s , v20.4s
+ SQADD v14.4s, v4.4s , v20.4s
- SQADD v6.4s, v6.4s , v20.4s
+ SQADD v6.4s, v6.4s , v20.4s
- sshR v14.4s, v14.4s,#16
+ sshR v14.4s, v14.4s, #16
// VUZP.16 D14, D15
UZP1 v19.8h, v14.8h, v14.8h
UZP2 v21.8h, v14.8h, v14.8h
- MOV v14.d[0], v19.d[0]
- MOV v15.d[0], v21.d[0]
+ MOV v14.d[0], v19.d[0]
+ MOV v15.d[0], v21.d[0]
- sshR v6.4s, v6.4s,#16
+ sshR v6.4s, v6.4s, #16
//VUZP.16 D6, D7
UZP1 v19.8h, v6.8h, v6.8h
UZP2 v21.8h, v6.8h, v6.8h
- MOV v6.d[0], v19.d[0]
- MOV v7.d[0], v21.d[0]
+ MOV v6.d[0], v19.d[0]
+ MOV v7.d[0], v21.d[0]
- mov v15.8b, v6.8b
- sQshL v8.4s, v8.4s, v16.4s
+ mov v15.8b, v6.8b
+ sQshL v8.4s, v8.4s, v16.4s
- sQshL v30.4s, v30.4s, v16.4s
+ sQshL v30.4s, v30.4s, v16.4s
- SQSUB v8.4s, v8.4s , v24.4s
+ SQSUB v8.4s, v8.4s , v24.4s
- SQSUB v22.4s, v30.4s , v22.4s
+ SQSUB v22.4s, v30.4s , v22.4s
- sQshL v30.4s, v8.4s,#2
+ sQshL v30.4s, v8.4s, #2
- sQshL v22.4s, v22.4s,#2
+ sQshL v22.4s, v22.4s, #2
- SQADD v30.4s, v30.4s , v20.4s
- SQADD v22.4s, v22.4s , v20.4s
+ SQADD v30.4s, v30.4s , v20.4s
+ SQADD v22.4s, v22.4s , v20.4s
- sshR v30.4s, v30.4s,#16
+ sshR v30.4s, v30.4s, #16
// VUZP.16 D30, D31
UZP1 v19.8h, v30.8h, v30.8h
UZP2 v21.8h, v30.8h, v30.8h
- MOV v30.d[0], v19.d[0]
- MOV v30.d[1], v21.d[0]
+ MOV v30.d[0], v19.d[0]
+ MOV v30.d[1], v21.d[0]
- sshR v22.4s, v22.4s,#16
+ sshR v22.4s, v22.4s, #16
// VUZP.16 D22, D23
UZP1 v19.8h, v22.8h, v22.8h
UZP2 v21.8h, v22.8h, v22.8h
- MOV v22.d[0], v19.d[0]
- MOV v23.d[0], v21.d[0]
-
- mov v23.8b, v30.8b
-
-
-
-
- ST1 {v14.h}[0],[x0]
- ADD x0, x0, x9
- ST1 {v22.h}[0],[x0]
- ADD x0, x0, x9
- ST1 {v14.h}[1],[x0]
- ADD x0, x0, x9
- ST1 {v22.h}[1],[x0]
- ADD x0, x0, x9
- ST1 {v14.h}[2],[x0]
- ADD x0, x0, x9
- ST1 {v22.h}[2],[x0]
- ADD x0, x0, x9
- ST1 {v14.h}[3],[x0]
- ADD x0, x0, x9
-
- ST1 {v15.h}[0],[x5]
- ADD x5, x5, x10
- ST1 {v23.h}[0],[x5]
- ADD x5, x5, x10
- ST1 {v15.h}[1],[x5]
- ADD x5, x5, x10
- ST1 {v23.h}[1],[x5]
- ADD x5, x5, x10
- ST1 {v15.h}[2],[x5]
- ADD x5, x5, x10
- ST1 {v23.h}[2],[x5]
- ADD x5, x5, x10
- ST1 {v15.h}[3],[x5]
- ADD x5, x5, x10
-
- // VPOP {d8 - d15}
+ MOV v22.d[0], v19.d[0]
+ MOV v23.d[0], v21.d[0]
+
+ mov v23.8b, v30.8b
+
+
+
+
+ ST1 {v14.h}[0], [x0]
+ ADD x0, x0, x9
+ ST1 {v22.h}[0], [x0]
+ ADD x0, x0, x9
+ ST1 {v14.h}[1], [x0]
+ ADD x0, x0, x9
+ ST1 {v22.h}[1], [x0]
+ ADD x0, x0, x9
+ ST1 {v14.h}[2], [x0]
+ ADD x0, x0, x9
+ ST1 {v22.h}[2], [x0]
+ ADD x0, x0, x9
+ ST1 {v14.h}[3], [x0]
+ ADD x0, x0, x9
+
+ ST1 {v15.h}[0], [x5]
+ ADD x5, x5, x10
+ ST1 {v23.h}[0], [x5]
+ ADD x5, x5, x10
+ ST1 {v15.h}[1], [x5]
+ ADD x5, x5, x10
+ ST1 {v23.h}[1], [x5]
+ ADD x5, x5, x10
+ ST1 {v15.h}[2], [x5]
+ ADD x5, x5, x10
+ ST1 {v23.h}[2], [x5]
+ ADD x5, x5, x10
+ ST1 {v15.h}[3], [x5]
+ ADD x5, x5, x10
+
+ // VPOP {d8 - d15}
// LDMFD sp!, {x4-x12}
//ldp x19, x20,[sp],#16
pop_v_regs
diff --git a/decoder/armv8/ixheaacd_qmf_dec_armv8.c b/decoder/armv8/ixheaacd_qmf_dec_armv8.c
index ac1a300..a4b89c5 100644
--- a/decoder/armv8/ixheaacd_qmf_dec_armv8.c
+++ b/decoder/armv8/ixheaacd_qmf_dec_armv8.c
@@ -472,8 +472,8 @@ VOID ixheaacd_cplx_anal_qmffilt(const WORD16 *time_sample_buf,
}
VOID ixheaacd_inv_modulation_lp(WORD32 *qmf_real, WORD16 *filter_states,
- ia_sbr_qmf_filter_bank_struct *syn_qmf,
- ia_qmf_dec_tables_struct *qmf_dec_tables_ptr) {
+ ia_sbr_qmf_filter_bank_struct *syn_qmf,
+ ia_qmf_dec_tables_struct *qmf_dec_tables_ptr) {
WORD32 L = syn_qmf->no_channels;
const WORD32 M = (L >> 1);
WORD32 *dct_in = qmf_real;
@@ -490,9 +490,9 @@ VOID ixheaacd_inv_modulation_lp(WORD32 *qmf_real, WORD16 *filter_states,
filter_states[3 * M] = 0;
}
-VOID ixheaacd_inv_emodulation(
- WORD32 *qmf_real, ia_sbr_qmf_filter_bank_struct *syn_qmf,
- ia_qmf_dec_tables_struct *qmf_dec_tables_ptr) {
+VOID ixheaacd_inv_emodulation(WORD32 *qmf_real,
+ ia_sbr_qmf_filter_bank_struct *syn_qmf,
+ ia_qmf_dec_tables_struct *qmf_dec_tables_ptr) {
ixheaacd_cos_sin_mod(qmf_real, syn_qmf, (WORD16 *)qmf_dec_tables_ptr->w1024,
(WORD32 *)qmf_dec_tables_ptr->dig_rev_table2_128);
}
@@ -1103,7 +1103,6 @@ VOID ixheaacd_esbr_cos_sin_mod(WORD32 *subband,
}
}
-
VOID ixheaacd_esbr_fwd_modulation(
const WORD32 *time_sample_buf, WORD32 *real_subband, WORD32 *imag_subband,
ia_sbr_qmf_filter_bank_struct *qmf_bank,
@@ -1344,6 +1343,3 @@ VOID ixheaacd_radix4bfly(const WORD16 *w, WORD32 *x, WORD32 index1,
w_ptr = w_ptr - fft_jmp;
}
}
-
-
-
diff --git a/decoder/armv8/ixheaacd_shiftrountine_with_round.s b/decoder/armv8/ixheaacd_shiftrountine_with_round.s
index 95b480c..e6a160d 100644
--- a/decoder/armv8/ixheaacd_shiftrountine_with_round.s
+++ b/decoder/armv8/ixheaacd_shiftrountine_with_round.s
@@ -48,10 +48,10 @@ S_WITH_R_L5:
ADD w7, w10, w14 //qmfImag[j] = add32(i1, x1)
SUB w4, w10, w14 //*qmfReal++ = sub32(i1, x1)
- MOV v1.s[0], W4 //QADD x4, x4, x9
- MOV v1.s[1], W5 //QADD x4, x4, x9
- MOV v1.s[2], W6 //QADD x4, x4, x9
- MOV v1.s[3], W7 //QADD x4, x4, x9
+ MOV v1.s[0], W4 //QADD x4, x4, x9
+ MOV v1.s[1], W5 //QADD x4, x4, x9
+ MOV v1.s[2], W6 //QADD x4, x4, x9
+ MOV v1.s[3], W7 //QADD x4, x4, x9
lsl w14, w3, #1
SQSHL v1.4s, v1.4s, v3.4s
diff --git a/decoder/armv8/ixheaacd_shiftrountine_with_round_eld.s b/decoder/armv8/ixheaacd_shiftrountine_with_round_eld.s
index cdbd822..ef5313b 100644
--- a/decoder/armv8/ixheaacd_shiftrountine_with_round_eld.s
+++ b/decoder/armv8/ixheaacd_shiftrountine_with_round_eld.s
@@ -54,10 +54,10 @@ S_WITH_R_L5:
- MOV v1.s[0], W4 //QADD x4, x4, x9
- MOV v1.s[1], W5 //QADD x4, x4, x9
- MOV v1.s[2], W6 //QADD x4, x4, x9
- MOV v1.s[3], W7 //QADD x4, x4, x9
+ MOV v1.s[0], W4 //QADD x4, x4, x9
+ MOV v1.s[1], W5 //QADD x4, x4, x9
+ MOV v1.s[2], W6 //QADD x4, x4, x9
+ MOV v1.s[3], W7 //QADD x4, x4, x9
lsl w14, w3, #1
SQSHL v1.4s, v1.4s, v3.4s
diff --git a/decoder/drc_src/impd_apicmd_standards.h b/decoder/drc_src/impd_apicmd_standards.h
index 7d511f2..3ebe762 100644
--- a/decoder/drc_src/impd_apicmd_standards.h
+++ b/decoder/drc_src/impd_apicmd_standards.h
@@ -24,86 +24,84 @@
/*****************************************************************************/
/* Ittiam standard API commands */
/*****************************************************************************/
-#define IA_API_CMD_GET_LIB_ID_STRINGS 0x0001
-
-#define IA_API_CMD_GET_API_SIZE 0x0002
-#define IA_API_CMD_INIT 0x0003
-
-#define IA_API_CMD_SET_CONFIG_PARAM 0x0004
-#define IA_API_CMD_GET_CONFIG_PARAM 0x0005
-
-#define IA_API_CMD_GET_MEMTABS_SIZE 0x0006
-#define IA_API_CMD_SET_MEMTABS_PTR 0x0007
-#define IA_API_CMD_GET_N_MEMTABS 0x0008
-
-#define IA_API_CMD_EXECUTE 0x0009
-
-#define IA_API_CMD_PUT_INPUT_QUERY 0x000A
-#define IA_API_CMD_GET_CURIDX_INPUT_BUF 0x000B
-#define IA_API_CMD_SET_INPUT_BYTES 0x000C
-#define IA_API_CMD_GET_OUTPUT_BYTES 0x000D
-#define IA_API_CMD_INPUT_OVER 0x000E
-
-
-#define IA_API_CMD_RESET 0x0010
-
-#define IA_API_CMD_GET_MEM_INFO_SIZE 0x0011
-#define IA_API_CMD_GET_MEM_INFO_ALIGNMENT 0x0012
-#define IA_API_CMD_GET_MEM_INFO_TYPE 0x0013
-#define IA_API_CMD_GET_MEM_INFO_PLACEMENT 0x0014
-#define IA_API_CMD_GET_MEM_INFO_PRIORITY 0x0015
-#define IA_API_CMD_SET_MEM_PTR 0x0016
-#define IA_API_CMD_SET_MEM_INFO_SIZE 0x0017
-#define IA_API_CMD_SET_MEM_PLACEMENT 0x0018
-
-#define IA_API_CMD_GET_N_TABLES 0x0019
-#define IA_API_CMD_GET_TABLE_INFO_SIZE 0x001A
-#define IA_API_CMD_GET_TABLE_INFO_ALIGNMENT 0x001B
-#define IA_API_CMD_GET_TABLE_INFO_PRIORITY 0x001C
-#define IA_API_CMD_SET_TABLE_PTR 0x001D
-#define IA_API_CMD_GET_TABLE_PTR 0x001E
-
-
-#define IA_API_CMD_INPUT_OVER_BS 0x0021
-#define IA_API_CMD_INPUT_OVER_IC_BS 0x0022
-#define IA_API_CMD_INPUT_OVER_IG_BS 0x0023
-#define IA_API_CMD_INPUT_OVER_IL_BS 0x0024
-#define IA_API_CMD_INPUT_OVER_IN_BS 0x0025
-
-#define IA_API_CMD_SET_INPUT_BYTES_BS 0x0026
-#define IA_API_CMD_SET_INPUT_BYTES_IC_BS 0x0027
-#define IA_API_CMD_SET_INPUT_BYTES_IG_BS 0x0028
-#define IA_API_CMD_SET_INPUT_BYTES_IL_BS 0x0029
-#define IA_API_CMD_SET_INPUT_BYTES_IN_BS 0x002A
+#define IA_API_CMD_GET_LIB_ID_STRINGS 0x0001
+
+#define IA_API_CMD_GET_API_SIZE 0x0002
+#define IA_API_CMD_INIT 0x0003
+
+#define IA_API_CMD_SET_CONFIG_PARAM 0x0004
+#define IA_API_CMD_GET_CONFIG_PARAM 0x0005
+
+#define IA_API_CMD_GET_MEMTABS_SIZE 0x0006
+#define IA_API_CMD_SET_MEMTABS_PTR 0x0007
+#define IA_API_CMD_GET_N_MEMTABS 0x0008
+
+#define IA_API_CMD_EXECUTE 0x0009
+
+#define IA_API_CMD_PUT_INPUT_QUERY 0x000A
+#define IA_API_CMD_GET_CURIDX_INPUT_BUF 0x000B
+#define IA_API_CMD_SET_INPUT_BYTES 0x000C
+#define IA_API_CMD_GET_OUTPUT_BYTES 0x000D
+#define IA_API_CMD_INPUT_OVER 0x000E
+
+#define IA_API_CMD_RESET 0x0010
+
+#define IA_API_CMD_GET_MEM_INFO_SIZE 0x0011
+#define IA_API_CMD_GET_MEM_INFO_ALIGNMENT 0x0012
+#define IA_API_CMD_GET_MEM_INFO_TYPE 0x0013
+#define IA_API_CMD_GET_MEM_INFO_PLACEMENT 0x0014
+#define IA_API_CMD_GET_MEM_INFO_PRIORITY 0x0015
+#define IA_API_CMD_SET_MEM_PTR 0x0016
+#define IA_API_CMD_SET_MEM_INFO_SIZE 0x0017
+#define IA_API_CMD_SET_MEM_PLACEMENT 0x0018
+
+#define IA_API_CMD_GET_N_TABLES 0x0019
+#define IA_API_CMD_GET_TABLE_INFO_SIZE 0x001A
+#define IA_API_CMD_GET_TABLE_INFO_ALIGNMENT 0x001B
+#define IA_API_CMD_GET_TABLE_INFO_PRIORITY 0x001C
+#define IA_API_CMD_SET_TABLE_PTR 0x001D
+#define IA_API_CMD_GET_TABLE_PTR 0x001E
+
+#define IA_API_CMD_INPUT_OVER_BS 0x0021
+#define IA_API_CMD_INPUT_OVER_IC_BS 0x0022
+#define IA_API_CMD_INPUT_OVER_IG_BS 0x0023
+#define IA_API_CMD_INPUT_OVER_IL_BS 0x0024
+#define IA_API_CMD_INPUT_OVER_IN_BS 0x0025
+
+#define IA_API_CMD_SET_INPUT_BYTES_BS 0x0026
+#define IA_API_CMD_SET_INPUT_BYTES_IC_BS 0x0027
+#define IA_API_CMD_SET_INPUT_BYTES_IG_BS 0x0028
+#define IA_API_CMD_SET_INPUT_BYTES_IL_BS 0x0029
+#define IA_API_CMD_SET_INPUT_BYTES_IN_BS 0x002A
/*****************************************************************************/
/* Ittiam standard API command indices */
/*****************************************************************************/
/* IA_API_CMD_GET_LIB_ID_STRINGS indices */
-#define IA_CMD_TYPE_LIB_NAME 0x0100
-#define IA_CMD_TYPE_LIB_VERSION 0x0200
-#define IA_CMD_TYPE_API_VERSION 0x0300
+#define IA_CMD_TYPE_LIB_NAME 0x0100
+#define IA_CMD_TYPE_LIB_VERSION 0x0200
+#define IA_CMD_TYPE_API_VERSION 0x0300
/* IA_API_CMD_INIT indices */
-#define IA_CMD_TYPE_INIT_API_PRE_CONFIG_PARAMS 0x0100
+#define IA_CMD_TYPE_INIT_API_PRE_CONFIG_PARAMS 0x0100
#define IA_CMD_TYPE_INIT_API_POST_CONFIG_PARAMS 0x0200
-#define IA_CMD_TYPE_INIT_PROCESS 0x0300
-#define IA_CMD_TYPE_INIT_DONE_QUERY 0x0400
-
-#define IA_CMD_TYPE_INIT_CPY_BSF_BUFF 0x0201
-#define IA_CMD_TYPE_INIT_CPY_IC_BSF_BUFF 0x0202
-#define IA_CMD_TYPE_INIT_CPY_IL_BSF_BUFF 0x0203
-#define IA_CMD_TYPE_INIT_CPY_IG_BSF_BUFF 0x0204
-#define IA_CMD_TYPE_INIT_CPY_IN_BSF_BUFF 0x0205
-
-#define IA_CMD_TYPE_INIT_CPY_BSF_BUFF_OVER_QUERY 0x0206
-#define IA_CMD_TYPE_INIT_CPY_IC_BSF_BUFF_OVER_QUERY 0x0207
-#define IA_CMD_TYPE_INIT_CPY_IL_BSF_BUFF_OVER_QUERY 0x0208
-#define IA_CMD_TYPE_INIT_CPY_IG_BSF_BUFF_OVER_QUERY 0x0209
-#define IA_CMD_TYPE_INIT_CPY_IN_BSF_BUFF_OVER_QUERY 0x020A
-#define IA_CMD_TYPE_INIT_SET_BUFF_PTR 0x020B
+#define IA_CMD_TYPE_INIT_PROCESS 0x0300
+#define IA_CMD_TYPE_INIT_DONE_QUERY 0x0400
+
+#define IA_CMD_TYPE_INIT_CPY_BSF_BUFF 0x0201
+#define IA_CMD_TYPE_INIT_CPY_IC_BSF_BUFF 0x0202
+#define IA_CMD_TYPE_INIT_CPY_IL_BSF_BUFF 0x0203
+#define IA_CMD_TYPE_INIT_CPY_IG_BSF_BUFF 0x0204
+#define IA_CMD_TYPE_INIT_CPY_IN_BSF_BUFF 0x0205
+
+#define IA_CMD_TYPE_INIT_CPY_BSF_BUFF_OVER_QUERY 0x0206
+#define IA_CMD_TYPE_INIT_CPY_IC_BSF_BUFF_OVER_QUERY 0x0207
+#define IA_CMD_TYPE_INIT_CPY_IL_BSF_BUFF_OVER_QUERY 0x0208
+#define IA_CMD_TYPE_INIT_CPY_IG_BSF_BUFF_OVER_QUERY 0x0209
+#define IA_CMD_TYPE_INIT_CPY_IN_BSF_BUFF_OVER_QUERY 0x020A
+#define IA_CMD_TYPE_INIT_SET_BUFF_PTR 0x020B
/* IA_API_CMD_EXECUTE indices */
-#define IA_CMD_TYPE_DO_EXECUTE 0x0100
-#define IA_CMD_TYPE_DONE_QUERY 0x0200
+#define IA_CMD_TYPE_DO_EXECUTE 0x0100
+#define IA_CMD_TYPE_DONE_QUERY 0x0200
#endif
diff --git a/decoder/drc_src/impd_drc_api.c b/decoder/drc_src/impd_drc_api.c
index e16cb58..0b40d94 100644
--- a/decoder/drc_src/impd_drc_api.c
+++ b/decoder/drc_src/impd_drc_api.c
@@ -25,7 +25,6 @@
#include "impd_apicmd_standards.h"
#include "impd_memory_standards.h"
-
#include "impd_drc_bitbuffer.h"
#include "impd_drc_extr_delta_coded_info.h"
#include "impd_drc_common.h"
@@ -52,15 +51,12 @@ WORD32 impd_init_process_audio_main_qmf(ia_drc_api_struct *p_obj_drc);
WORD32 impd_init_process_audio_main_stft(ia_drc_api_struct *p_obj_drc);
WORD32 impd_init_process_audio_main_td_qmf(ia_drc_api_struct *p_obj_drc);
-IA_ERRORCODE impd_drc_mem_api(ia_drc_api_struct *p_obj_drc,
- WORD32 i_cmd, WORD32 i_idx, pVOID pv_value);
+IA_ERRORCODE impd_drc_mem_api(ia_drc_api_struct *p_obj_drc, WORD32 i_cmd,
+ WORD32 i_idx, pVOID pv_value);
IA_ERRORCODE impd_drc_fill_mem_tables(ia_drc_api_struct *p_obj_drc);
-
-
-VOID impd_drc_set_default_config_params(ia_drc_config_struct* ptr_config);
-
+VOID impd_drc_set_default_config_params(ia_drc_config_struct *ptr_config);
IA_ERRORCODE impd_drc_process_frame(ia_drc_api_struct *p_obj_drc);
IA_ERRORCODE impd_drc_init(ia_drc_api_struct *p_obj_drc);
@@ -68,648 +64,535 @@ IA_ERRORCODE impd_drc_set_default_config(ia_drc_api_struct *p_obj_drc);
IA_ERRORCODE impd_drc_set_struct_pointer(ia_drc_api_struct *p_obj_drc);
IA_ERRORCODE impd_process_time_domain(ia_drc_api_struct *p_obj_drc);
-#define NUM_DRC_TABLES 4
-#define SCRATCH_MEM_SIZE 1024*256*64
-
+#define NUM_DRC_TABLES 4
+#define SCRATCH_MEM_SIZE 1024 * 256 * 64
+IA_ERRORCODE ia_drc_dec_api(pVOID p_ia_drc_dec_obj, WORD32 i_cmd, WORD32 i_idx,
+ pVOID pv_value) {
+ ia_drc_api_struct *p_obj_drc = p_ia_drc_dec_obj;
+ IA_ERRORCODE error_code = IA_NO_ERROR;
+ LOOPIDX i;
-IA_ERRORCODE ia_drc_dec_api(pVOID p_ia_drc_dec_obj,
- WORD32 i_cmd,
- WORD32 i_idx,
- pVOID pv_value)
-{
- ia_drc_api_struct *p_obj_drc = p_ia_drc_dec_obj;
- IA_ERRORCODE error_code=IA_NO_ERROR;
- LOOPIDX i;
+ pUWORD32 pui_value = pv_value;
+ pUWORD32 pus_value = pv_value;
+ pWORD8 pb_value = pv_value;
+ SIZE_T *ps_value = pv_value;
- pUWORD32 pui_value = pv_value;
- pUWORD32 pus_value = pv_value;
- pWORD8 pb_value = pv_value;
- SIZE_T *ps_value = pv_value;
-
- switch(i_cmd)
- {
+ switch (i_cmd) {
case IA_API_CMD_GET_MEM_INFO_SIZE:
case IA_API_CMD_GET_MEM_INFO_ALIGNMENT:
case IA_API_CMD_GET_MEM_INFO_TYPE:
case IA_API_CMD_GET_MEM_INFO_PLACEMENT:
case IA_API_CMD_GET_MEM_INFO_PRIORITY:
case IA_API_CMD_SET_MEM_PTR:
- case IA_API_CMD_SET_MEM_PLACEMENT:
- {
- return impd_drc_mem_api(p_ia_drc_dec_obj, i_cmd, i_idx, pv_value);
- }
- };
-
- switch(i_cmd)
- {
- case IA_API_CMD_GET_LIB_ID_STRINGS:
- {
- switch(i_idx)
- {
- case IA_CMD_TYPE_LIB_NAME:
- {
- WORD8 lib_name[] = LIBNAME;
- for(i = 0; i < IA_API_STR_LEN && lib_name[i -1] != 0; i++)
- {
- pb_value[i] = lib_name[i];
- }
- break;
- }
- case IA_CMD_TYPE_LIB_VERSION:
- {
- break;
- }
-
- case IA_CMD_TYPE_API_VERSION:
- {
-
- }
- default:
- {
- return -1;
- }
- };
- break;
- }
- case IA_API_CMD_GET_API_SIZE:
- {
- *pui_value = sizeof(ia_drc_api_struct)+(sizeof(ia_drc_state_struct)+8)+8080*1024;
-
- break;
- }
- case IA_API_CMD_INIT:
- {
- switch(i_idx)
- {
- case IA_CMD_TYPE_INIT_SET_BUFF_PTR:
- {
- p_obj_drc->p_state->persistant_ptr=p_obj_drc->pp_mem[IA_DRC_PERSIST_IDX];
- impd_drc_set_struct_pointer(p_obj_drc);
-
- break;
- }
- case IA_CMD_TYPE_INIT_API_PRE_CONFIG_PARAMS:
- {
- impd_drc_set_default_config(p_obj_drc);
- break;
- }
- case IA_CMD_TYPE_INIT_API_POST_CONFIG_PARAMS:
- {
- p_obj_drc->p_state=(ia_drc_state_struct *)((SIZE_T)p_obj_drc+8000*1024);
- p_obj_drc->p_mem_info=(ia_mem_info_struct *)((SIZE_T)p_obj_drc+8002*1024);
- p_obj_drc->pp_mem=(pVOID)((SIZE_T)p_obj_drc+8006*1024);
- impd_drc_fill_mem_tables(p_obj_drc);
- break;
- }
- case IA_CMD_TYPE_INIT_PROCESS:
- {
- IA_ERRORCODE Error=0;
-
- if(p_obj_drc->pp_mem[IA_DRC_PERSIST_IDX] == 0)
- {
- return(-1);
- }
-
-
- Error = impd_drc_init(p_obj_drc);
- if(Error)
- return Error;
- p_obj_drc->p_state->ui_init_done = 1;
- return Error;
- break;
- }
- case IA_CMD_TYPE_INIT_DONE_QUERY:
- {
-
- if(p_obj_drc->p_state->ui_init_done == 1)
- {
- *pui_value = 1;
- }
- else
- {
- *pui_value = 0;
- }
- break;
- }
-
- case IA_CMD_TYPE_INIT_CPY_BSF_BUFF_OVER_QUERY:
- {
- *pui_value = p_obj_drc->str_bit_handler.cpy_over;
- break;
- }
- case IA_CMD_TYPE_INIT_CPY_IC_BSF_BUFF_OVER_QUERY:
- {
- *pui_value = p_obj_drc->str_bit_handler.cpy_over_ic;
- break;
- }
-
- case IA_CMD_TYPE_INIT_CPY_IL_BSF_BUFF_OVER_QUERY:
- {
- *pui_value = p_obj_drc->str_bit_handler.cpy_over_il;
- break;
- }
- case IA_CMD_TYPE_INIT_CPY_IN_BSF_BUFF_OVER_QUERY:
- {
- *pui_value = p_obj_drc->str_bit_handler.cpy_over_in;
- break;
- }
- case IA_CMD_TYPE_INIT_CPY_BSF_BUFF:
- {
- memcpy(p_obj_drc->str_bit_handler.it_bit_buf+p_obj_drc->str_bit_handler.num_bytes_bs, p_obj_drc->pp_mem[2],p_obj_drc->str_bit_handler.num_byts_cur);
- p_obj_drc->str_bit_handler.num_bytes_bs=p_obj_drc->str_bit_handler.num_bytes_bs+p_obj_drc->str_bit_handler.num_byts_cur;
- break;
-
- }
- case IA_CMD_TYPE_INIT_CPY_IC_BSF_BUFF:
- {
- memcpy(p_obj_drc->str_bit_handler.bitstream_drc_config+p_obj_drc->str_bit_handler.num_bytes_bs_drc_config, p_obj_drc->pp_mem[2],p_obj_drc->str_bit_handler.num_byts_cur_ic);
- p_obj_drc->str_bit_handler.num_bytes_bs_drc_config=p_obj_drc->str_bit_handler.num_bytes_bs_drc_config+p_obj_drc->str_bit_handler.num_byts_cur_ic;
- break;
-
- }
- case IA_CMD_TYPE_INIT_CPY_IL_BSF_BUFF:
- {
- memcpy(p_obj_drc->str_bit_handler.bitstream_loudness_info+p_obj_drc->str_bit_handler.num_bytes_bs_loudness_info, p_obj_drc->pp_mem[2],p_obj_drc->str_bit_handler.num_byts_cur_il);
- p_obj_drc->str_bit_handler.num_bytes_bs_loudness_info=p_obj_drc->str_bit_handler.num_bytes_bs_loudness_info+p_obj_drc->str_bit_handler.num_byts_cur_il;
- break;
-
- }
- case IA_CMD_TYPE_INIT_CPY_IN_BSF_BUFF:
- {
- memcpy(p_obj_drc->str_bit_handler.bitstream_unidrc_interface+p_obj_drc->str_bit_handler.num_bytes_bs_unidrc_interface, p_obj_drc->pp_mem[2],p_obj_drc->str_bit_handler.num_byts_cur_in);
- p_obj_drc->str_bit_handler.num_bytes_bs_unidrc_interface=p_obj_drc->str_bit_handler.num_bytes_bs_unidrc_interface+p_obj_drc->str_bit_handler.num_byts_cur_in;
- break;
-
- }
- default:
- {
- return -1;
- }
- };
- break;
- }
- case IA_API_CMD_GET_CONFIG_PARAM:
- {
- switch(i_idx)
- {
-
- case IA_DRC_DEC_CONFIG_PARAM_SAMP_FREQ:
- {
-
- *pus_value=p_obj_drc->str_config.sampling_rate;
- break;
- }
-
- case IA_DRC_DEC_CONFIG_PARAM_NUM_CHANNELS:
- {
-
- *pus_value=p_obj_drc->str_config.num_ch_out;
- break;
- }
- case IA_DRC_DEC_CONFIG_PROC_OUT_PTR:
- {
-
- *ps_value=(SIZE_T)p_obj_drc->str_payload.pstr_drc_sel_proc_output;
- break;
- }
-
- }
- break;
- }
- case IA_API_CMD_SET_CONFIG_PARAM:
- {
- switch(i_idx)
- {
- case IA_DRC_DEC_CONFIG_PARAM_DEC_TYPE:
- {
- if(*pus_value==1){
- p_obj_drc->str_config.dec_type = DEC_TYPE_TD_QMF64;
- p_obj_drc->str_config.sub_band_domain_mode = SUBBAND_DOMAIN_MODE_QMF64;
- p_obj_drc->str_config.sub_band_down_sampling_factor = AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64;
- p_obj_drc->str_config.sub_band_count = AUDIO_CODEC_SUBBAND_COUNT_QMF64;
- }
- else if(*pus_value==2){
- p_obj_drc->str_config.dec_type = DEC_TYPE_QMF64;
- p_obj_drc->str_config.sub_band_domain_mode = SUBBAND_DOMAIN_MODE_QMF64;
- p_obj_drc->str_config.sub_band_down_sampling_factor = AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64;
- p_obj_drc->str_config.sub_band_count = AUDIO_CODEC_SUBBAND_COUNT_QMF64;
- }
- else if(*pus_value==3){
- p_obj_drc->str_config.dec_type = DEC_TYPE_STFT256;
- p_obj_drc->str_config.sub_band_domain_mode = SUBBAND_DOMAIN_MODE_STFT256;
- p_obj_drc->str_config.sub_band_down_sampling_factor = AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_STFT256;
- p_obj_drc->str_config.sub_band_count = AUDIO_CODEC_SUBBAND_COUNT_STFT256;
- }
- else{
- p_obj_drc->str_config.dec_type = DEC_TYPE_TD;
- p_obj_drc->str_config.sub_band_domain_mode = SUBBAND_DOMAIN_MODE_OFF;
- }
-
- if(*pus_value<0 || *pus_value >3)
- {
- return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_DECODE_TYPE;
- }
- break;
- }
- case IA_DRC_DEC_CONFIG_PARAM_CTRL_PARAM:
- {
- if(*pus_value<1 || *pus_value>39)
- {
- return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_CTRL_PARAM_IDX;
- }
- p_obj_drc->str_config.control_parameter_index = *pus_value;
- break;
- }
- case IA_DRC_DEC_CONFIG_PARAM_PEAK_LIMITER:
- {
- if(*pus_value<0 || *pus_value>1)
- {
- return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_PEAK_LIM_FLAG;
- }
- p_obj_drc->str_config.peak_limiter = *pus_value;
- break;
- }
-
- case IA_DRC_DEC_CONFIG_PARAM_VER_MODE:
- {
- break;
- }
- case IA_DRC_DEC_CONFIG_PARAM_SAMP_FREQ:
- {
- if(*pus_value<8000 || *pus_value>96000)
- {
- return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_SAMP_FREQ;
- }
- p_obj_drc->str_config.sampling_rate = *pus_value;
- break;
- }
- case IA_DRC_DEC_CONFIG_PARAM_NUM_CHANNELS:
- {
- p_obj_drc->str_config.num_ch_in = *pus_value;
- if(*pus_value < 1 || *pus_value > MAX_CHANNEL_COUNT)
- {
- return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_NUM_OF_CHANNELS;
- }
- break;
- }
-
- case IA_DRC_DEC_CONFIG_PARAM_PCM_WDSZ:
- {
- if((*pus_value!=16) && (*pus_value!=32))
- {
- return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_PCM_SIZE;
- }
-
- p_obj_drc->str_config.pcm_size = *pus_value;
-
-
- break;
- }
-
- case IA_DRC_DEC_CONFIG_PARAM_BITS_FORMAT:
- {
- if((*pus_value!=1)&&(*pus_value!=0))
- {
- return -1;
- }
- p_obj_drc->str_config.bitstream_file_format = *pus_value;
-
- break;
- }
- case IA_DRC_DEC_CONFIG_PARAM_INT_PRESENT:
- {
- if((*pus_value!=1)&&(*pus_value!=0))
- {
- return -1;
- }
- p_obj_drc->str_config.interface_bitstream_present = *pus_value;
-
- break;
- }
- case IA_DRC_DEC_CONFIG_PARAM_DELAY_MODE:
- {
- if((*pus_value!=1)&&(*pus_value!=0))
- {
- return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_DELAY_MODE;
- }
- p_obj_drc->str_config.delay_mode = *pus_value;
-
- break;
- }
- case IA_DRC_DEC_CONFIG_PARAM_GAIN_DELAY:
- {
- if ((*pus_value > MAX_SIGNAL_DELAY) || (*pus_value < 0))
- {
- return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_GAIN_DELAY;
- }
-
- p_obj_drc->str_config.gain_delay_samples = *pus_value;
-
-
- break;
- }
-
- /*Sujith: introduce error*/
- case IA_DRC_DEC_CONFIG_PARAM_AUDIO_DELAY:
- {
- break;
- }
- case IA_DRC_DEC_CONFIG_PARAM_CON_DELAY_MODE:
- {
- if(*pus_value<0 || *pus_value>1)
- {
- return IA_DRC_DEC_CONFIG_PARAM_CON_DELAY_MODE;
- }
- p_obj_drc->str_config.constant_delay_on = *pus_value;
-
- break;
- }
- case IA_DRC_DEC_CONFIG_PARAM_ABSO_DELAY_OFF:
- {
- p_obj_drc->str_config.absorb_delay_on = *pus_value;
-
- break;
- }
- case IA_DRC_DEC_CONFIG_PARAM_FRAME_SIZE:
- {
- if(*pus_value<1 || *pus_value>4096)
- {
- return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_FRAME_SIZE;
- }
-
- p_obj_drc->str_config.frame_size = *pus_value;
-
-
- break;
- }
- case IA_DRC_DEC_CONFIG_GAIN_STREAM_FLAG:
- {
- p_obj_drc->str_bit_handler.gain_stream_flag = *pus_value;
- break;
- }
-
- case IA_DRC_DEC_CONFIG_DRC_EFFECT_TYPE:
- {
- p_obj_drc->str_config.effect_type = *pus_value;
- break;
- }
- case IA_DRC_DEC_CONFIG_DRC_TARGET_LOUDNESS:
- {
- p_obj_drc->str_config.target_loudness = *pus_value;
- break;
- }
- case IA_DRC_DEC_CONFIG_DRC_LOUD_NORM:
- {
- p_obj_drc->str_config.loud_norm_flag = *pus_value;
- break;
- }
-
- default:
- {
- return -1;
- }
- }
- break;
- }
- case IA_API_CMD_GET_MEMTABS_SIZE:
- {
-
- break;
- }
- case IA_API_CMD_SET_MEMTABS_PTR:
- {
-
- break;
- }
- case IA_API_CMD_GET_N_MEMTABS:
- {
-
- *pui_value = NUM_DRC_TABLES;
- break;
- }
- case IA_API_CMD_GET_N_TABLES:
- {
-
- break;
- }
-
- case IA_API_CMD_EXECUTE:
- {
- switch(i_idx)
- {
- case IA_CMD_TYPE_DO_EXECUTE:
- {
- if(p_obj_drc->str_config.dec_type==DEC_TYPE_TD){
- error_code=impd_process_time_domain(p_obj_drc);}
- else if(p_obj_drc->str_config.dec_type==DEC_TYPE_QMF64){
- error_code=impd_init_process_audio_main_qmf(p_obj_drc);
- }
- else if(p_obj_drc->str_config.dec_type==DEC_TYPE_STFT256){
- error_code=impd_init_process_audio_main_stft(p_obj_drc);
- }
- else if(p_obj_drc->str_config.dec_type==DEC_TYPE_TD_QMF64){
- error_code=impd_init_process_audio_main_td_qmf(p_obj_drc);
- }
- break;
- }
- case IA_CMD_TYPE_DONE_QUERY:
- {
-
- *pui_value = p_obj_drc->p_state->ui_exe_done;
- break;
- }
- default:
- {
- return -1;
- }
- };
- break;
- }
- case IA_API_CMD_PUT_INPUT_QUERY:
- {
+ case IA_API_CMD_SET_MEM_PLACEMENT: {
+ return impd_drc_mem_api(p_ia_drc_dec_obj, i_cmd, i_idx, pv_value);
+ }
+ };
+
+ switch (i_cmd) {
+ case IA_API_CMD_GET_LIB_ID_STRINGS: {
+ switch (i_idx) {
+ case IA_CMD_TYPE_LIB_NAME: {
+ WORD8 lib_name[] = LIBNAME;
+ for (i = 0; i < IA_API_STR_LEN && lib_name[i - 1] != 0; i++) {
+ pb_value[i] = lib_name[i];
+ }
+ break;
+ }
+ case IA_CMD_TYPE_LIB_VERSION: {
+ break;
+ }
+
+ case IA_CMD_TYPE_API_VERSION: {
+ }
+ default: { return -1; }
+ };
+ break;
+ }
+ case IA_API_CMD_GET_API_SIZE: {
+ *pui_value = sizeof(ia_drc_api_struct) +
+ (sizeof(ia_drc_state_struct) + 8) + 8080 * 1024;
+
+ break;
+ }
+ case IA_API_CMD_INIT: {
+ switch (i_idx) {
+ case IA_CMD_TYPE_INIT_SET_BUFF_PTR: {
+ p_obj_drc->p_state->persistant_ptr =
+ p_obj_drc->pp_mem[IA_DRC_PERSIST_IDX];
+ impd_drc_set_struct_pointer(p_obj_drc);
+
+ break;
+ }
+ case IA_CMD_TYPE_INIT_API_PRE_CONFIG_PARAMS: {
+ impd_drc_set_default_config(p_obj_drc);
+ break;
+ }
+ case IA_CMD_TYPE_INIT_API_POST_CONFIG_PARAMS: {
+ p_obj_drc->p_state =
+ (ia_drc_state_struct *)((SIZE_T)p_obj_drc + 8000 * 1024);
+ p_obj_drc->p_mem_info =
+ (ia_mem_info_struct *)((SIZE_T)p_obj_drc + 8002 * 1024);
+ p_obj_drc->pp_mem = (pVOID)((SIZE_T)p_obj_drc + 8006 * 1024);
+ impd_drc_fill_mem_tables(p_obj_drc);
+ break;
+ }
+ case IA_CMD_TYPE_INIT_PROCESS: {
+ IA_ERRORCODE Error = 0;
+
+ if (p_obj_drc->pp_mem[IA_DRC_PERSIST_IDX] == 0) {
+ return (-1);
+ }
+
+ Error = impd_drc_init(p_obj_drc);
+ if (Error) return Error;
+ p_obj_drc->p_state->ui_init_done = 1;
+ return Error;
+ break;
+ }
+ case IA_CMD_TYPE_INIT_DONE_QUERY: {
+ if (p_obj_drc->p_state->ui_init_done == 1) {
*pui_value = 1;
- break;
- }
- case IA_API_CMD_GET_CURIDX_INPUT_BUF:
- {
- UWORD32 ui_in_buf_size =
- p_obj_drc->p_mem_info[IA_DRC_INPUT_IDX].ui_size;
- UWORD32 ui_in_bytes = p_obj_drc->p_state->ui_in_bytes;
- *pui_value = ui_in_buf_size > ui_in_bytes ? ui_in_bytes : ui_in_buf_size;
- break;
- }
- case IA_API_CMD_SET_INPUT_BYTES:
- {
- p_obj_drc->p_state->ui_in_bytes = *pui_value;
- break;
- }
-
- case IA_API_CMD_GET_OUTPUT_BYTES:
- {
- *pui_value = p_obj_drc->p_state->ui_out_bytes;
- break;
- }
- case IA_API_CMD_INPUT_OVER:
- {
- p_obj_drc->p_state->ui_exe_done=1;
- break;
- }
- case IA_API_CMD_INPUT_OVER_BS:
- {
- p_obj_drc->str_bit_handler.cpy_over = 1;
- break;
- }
- case IA_API_CMD_INPUT_OVER_IC_BS:
- {
- p_obj_drc->str_bit_handler.cpy_over_ic = 1;
- break;
- }
- case IA_API_CMD_INPUT_OVER_IL_BS:
- {
- p_obj_drc->str_bit_handler.cpy_over_il = 1;
- break;
- }
- case IA_API_CMD_INPUT_OVER_IN_BS:
- {
- p_obj_drc->str_bit_handler.cpy_over_in = 1;
- break;
- }
- case IA_API_CMD_SET_INPUT_BYTES_BS:
- {
- p_obj_drc->str_bit_handler.num_byts_cur=*pus_value;
- break;
- }
- case IA_API_CMD_SET_INPUT_BYTES_IC_BS:
- {
- p_obj_drc->str_bit_handler.num_byts_cur_ic=*pus_value;
- break;
- }
- case IA_API_CMD_SET_INPUT_BYTES_IL_BS:
- {
- p_obj_drc->str_bit_handler.num_byts_cur_il=*pus_value;
- break;
- }
- case IA_API_CMD_SET_INPUT_BYTES_IN_BS:
- {
- p_obj_drc->str_bit_handler.num_byts_cur_in=*pus_value;
- break;
- }
- default:
- {
+ } else {
+ *pui_value = 0;
+ }
+ break;
+ }
+
+ case IA_CMD_TYPE_INIT_CPY_BSF_BUFF_OVER_QUERY: {
+ *pui_value = p_obj_drc->str_bit_handler.cpy_over;
+ break;
+ }
+ case IA_CMD_TYPE_INIT_CPY_IC_BSF_BUFF_OVER_QUERY: {
+ *pui_value = p_obj_drc->str_bit_handler.cpy_over_ic;
+ break;
+ }
+
+ case IA_CMD_TYPE_INIT_CPY_IL_BSF_BUFF_OVER_QUERY: {
+ *pui_value = p_obj_drc->str_bit_handler.cpy_over_il;
+ break;
+ }
+ case IA_CMD_TYPE_INIT_CPY_IN_BSF_BUFF_OVER_QUERY: {
+ *pui_value = p_obj_drc->str_bit_handler.cpy_over_in;
+ break;
+ }
+ case IA_CMD_TYPE_INIT_CPY_BSF_BUFF: {
+ memcpy(p_obj_drc->str_bit_handler.it_bit_buf +
+ p_obj_drc->str_bit_handler.num_bytes_bs,
+ p_obj_drc->pp_mem[2], p_obj_drc->str_bit_handler.num_byts_cur);
+ p_obj_drc->str_bit_handler.num_bytes_bs =
+ p_obj_drc->str_bit_handler.num_bytes_bs +
+ p_obj_drc->str_bit_handler.num_byts_cur;
+ break;
+ }
+ case IA_CMD_TYPE_INIT_CPY_IC_BSF_BUFF: {
+ memcpy(p_obj_drc->str_bit_handler.bitstream_drc_config +
+ p_obj_drc->str_bit_handler.num_bytes_bs_drc_config,
+ p_obj_drc->pp_mem[2],
+ p_obj_drc->str_bit_handler.num_byts_cur_ic);
+ p_obj_drc->str_bit_handler.num_bytes_bs_drc_config =
+ p_obj_drc->str_bit_handler.num_bytes_bs_drc_config +
+ p_obj_drc->str_bit_handler.num_byts_cur_ic;
+ break;
+ }
+ case IA_CMD_TYPE_INIT_CPY_IL_BSF_BUFF: {
+ memcpy(p_obj_drc->str_bit_handler.bitstream_loudness_info +
+ p_obj_drc->str_bit_handler.num_bytes_bs_loudness_info,
+ p_obj_drc->pp_mem[2],
+ p_obj_drc->str_bit_handler.num_byts_cur_il);
+ p_obj_drc->str_bit_handler.num_bytes_bs_loudness_info =
+ p_obj_drc->str_bit_handler.num_bytes_bs_loudness_info +
+ p_obj_drc->str_bit_handler.num_byts_cur_il;
+ break;
+ }
+ case IA_CMD_TYPE_INIT_CPY_IN_BSF_BUFF: {
+ memcpy(p_obj_drc->str_bit_handler.bitstream_unidrc_interface +
+ p_obj_drc->str_bit_handler.num_bytes_bs_unidrc_interface,
+ p_obj_drc->pp_mem[2],
+ p_obj_drc->str_bit_handler.num_byts_cur_in);
+ p_obj_drc->str_bit_handler.num_bytes_bs_unidrc_interface =
+ p_obj_drc->str_bit_handler.num_bytes_bs_unidrc_interface +
+ p_obj_drc->str_bit_handler.num_byts_cur_in;
+ break;
+ }
+ default: { return -1; }
+ };
+ break;
+ }
+ case IA_API_CMD_GET_CONFIG_PARAM: {
+ switch (i_idx) {
+ case IA_DRC_DEC_CONFIG_PARAM_SAMP_FREQ: {
+ *pus_value = p_obj_drc->str_config.sampling_rate;
+ break;
+ }
+
+ case IA_DRC_DEC_CONFIG_PARAM_NUM_CHANNELS: {
+ *pus_value = p_obj_drc->str_config.num_ch_out;
+ break;
+ }
+ case IA_DRC_DEC_CONFIG_PROC_OUT_PTR: {
+ *ps_value = (SIZE_T)p_obj_drc->str_payload.pstr_drc_sel_proc_output;
+ break;
+ }
+ }
+ break;
+ }
+ case IA_API_CMD_SET_CONFIG_PARAM: {
+ switch (i_idx) {
+ case IA_DRC_DEC_CONFIG_PARAM_DEC_TYPE: {
+ if (*pus_value == 1) {
+ p_obj_drc->str_config.dec_type = DEC_TYPE_TD_QMF64;
+ p_obj_drc->str_config.sub_band_domain_mode =
+ SUBBAND_DOMAIN_MODE_QMF64;
+ p_obj_drc->str_config.sub_band_down_sampling_factor =
+ AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64;
+ p_obj_drc->str_config.sub_band_count =
+ AUDIO_CODEC_SUBBAND_COUNT_QMF64;
+ } else if (*pus_value == 2) {
+ p_obj_drc->str_config.dec_type = DEC_TYPE_QMF64;
+ p_obj_drc->str_config.sub_band_domain_mode =
+ SUBBAND_DOMAIN_MODE_QMF64;
+ p_obj_drc->str_config.sub_band_down_sampling_factor =
+ AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64;
+ p_obj_drc->str_config.sub_band_count =
+ AUDIO_CODEC_SUBBAND_COUNT_QMF64;
+ } else if (*pus_value == 3) {
+ p_obj_drc->str_config.dec_type = DEC_TYPE_STFT256;
+ p_obj_drc->str_config.sub_band_domain_mode =
+ SUBBAND_DOMAIN_MODE_STFT256;
+ p_obj_drc->str_config.sub_band_down_sampling_factor =
+ AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_STFT256;
+ p_obj_drc->str_config.sub_band_count =
+ AUDIO_CODEC_SUBBAND_COUNT_STFT256;
+ } else {
+ p_obj_drc->str_config.dec_type = DEC_TYPE_TD;
+ p_obj_drc->str_config.sub_band_domain_mode =
+ SUBBAND_DOMAIN_MODE_OFF;
+ }
+
+ if (*pus_value < 0 || *pus_value > 3) {
+ return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_DECODE_TYPE;
+ }
+ break;
+ }
+ case IA_DRC_DEC_CONFIG_PARAM_CTRL_PARAM: {
+ if (*pus_value < 1 || *pus_value > 39) {
+ return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_CTRL_PARAM_IDX;
+ }
+ p_obj_drc->str_config.control_parameter_index = *pus_value;
+ break;
+ }
+ case IA_DRC_DEC_CONFIG_PARAM_PEAK_LIMITER: {
+ if (*pus_value < 0 || *pus_value > 1) {
+ return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_PEAK_LIM_FLAG;
+ }
+ p_obj_drc->str_config.peak_limiter = *pus_value;
+ break;
+ }
+
+ case IA_DRC_DEC_CONFIG_PARAM_VER_MODE: {
+ break;
+ }
+ case IA_DRC_DEC_CONFIG_PARAM_SAMP_FREQ: {
+ if (*pus_value < 8000 || *pus_value > 96000) {
+ return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_SAMP_FREQ;
+ }
+ p_obj_drc->str_config.sampling_rate = *pus_value;
+ break;
+ }
+ case IA_DRC_DEC_CONFIG_PARAM_NUM_CHANNELS: {
+ p_obj_drc->str_config.num_ch_in = *pus_value;
+ if (*pus_value < 1 || *pus_value > MAX_CHANNEL_COUNT) {
+ return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_NUM_OF_CHANNELS;
+ }
+ break;
+ }
+
+ case IA_DRC_DEC_CONFIG_PARAM_PCM_WDSZ: {
+ if ((*pus_value != 16) && (*pus_value != 32)) {
+ return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_PCM_SIZE;
+ }
+
+ p_obj_drc->str_config.pcm_size = *pus_value;
+
+ break;
+ }
+
+ case IA_DRC_DEC_CONFIG_PARAM_BITS_FORMAT: {
+ if ((*pus_value != 1) && (*pus_value != 0)) {
return -1;
+ }
+ p_obj_drc->str_config.bitstream_file_format = *pus_value;
+
+ break;
}
- };
- return error_code;
-}
+ case IA_DRC_DEC_CONFIG_PARAM_INT_PRESENT: {
+ if ((*pus_value != 1) && (*pus_value != 0)) {
+ return -1;
+ }
+ p_obj_drc->str_config.interface_bitstream_present = *pus_value;
+ break;
+ }
+ case IA_DRC_DEC_CONFIG_PARAM_DELAY_MODE: {
+ if ((*pus_value != 1) && (*pus_value != 0)) {
+ return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_DELAY_MODE;
+ }
+ p_obj_drc->str_config.delay_mode = *pus_value;
-IA_ERRORCODE impd_drc_mem_api(ia_drc_api_struct *p_obj_drc,
- WORD32 i_cmd, WORD32 i_idx, pVOID pv_value)
-{
- pUWORD32 pui_value = pv_value;
+ break;
+ }
+ case IA_DRC_DEC_CONFIG_PARAM_GAIN_DELAY: {
+ if ((*pus_value > MAX_SIGNAL_DELAY) || (*pus_value < 0)) {
+ return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_GAIN_DELAY;
+ }
- switch(i_cmd)
- {
- case IA_API_CMD_GET_MEM_INFO_SIZE:
- {
- *pui_value = p_obj_drc->p_mem_info[i_idx].ui_size;
- break;
+ p_obj_drc->str_config.gain_delay_samples = *pus_value;
+
+ break;
}
- case IA_API_CMD_GET_MEM_INFO_ALIGNMENT:
- {
- *pui_value = p_obj_drc->p_mem_info[i_idx].ui_alignment;
- break;
+
+ /*Sujith: introduce error*/
+ case IA_DRC_DEC_CONFIG_PARAM_AUDIO_DELAY: {
+ break;
}
- case IA_API_CMD_GET_MEM_INFO_TYPE:
- {
- *pui_value = p_obj_drc->p_mem_info[i_idx].ui_type;
- break;
+ case IA_DRC_DEC_CONFIG_PARAM_CON_DELAY_MODE: {
+ if (*pus_value < 0 || *pus_value > 1) {
+ return IA_DRC_DEC_CONFIG_PARAM_CON_DELAY_MODE;
+ }
+ p_obj_drc->str_config.constant_delay_on = *pus_value;
+
+ break;
}
- case IA_API_CMD_GET_MEM_INFO_PLACEMENT:
- {
- *pui_value = p_obj_drc->p_mem_info[i_idx].ui_placement[0];
- *(pui_value + 1) = p_obj_drc->p_mem_info[i_idx].ui_placement[1];
- break;
+ case IA_DRC_DEC_CONFIG_PARAM_ABSO_DELAY_OFF: {
+ p_obj_drc->str_config.absorb_delay_on = *pus_value;
+
+ break;
}
- case IA_API_CMD_GET_MEM_INFO_PRIORITY:
- {
- *pui_value = p_obj_drc->p_mem_info[i_idx].ui_priority;
- break;
+ case IA_DRC_DEC_CONFIG_PARAM_FRAME_SIZE: {
+ if (*pus_value < 1 || *pus_value > 4096) {
+ return IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_FRAME_SIZE;
+ }
+
+ p_obj_drc->str_config.frame_size = *pus_value;
+
+ break;
}
- case IA_API_CMD_SET_MEM_PTR:
- {
-
- pWORD8 pbtemp;
- UWORD32 sz;
- if(pv_value == 0)
- {
- return(-1);
- }
- if(((SIZE_T)pv_value % p_obj_drc->p_mem_info[i_idx].ui_alignment) != 0)
- {
- return(-1);
- }
- p_obj_drc->pp_mem[i_idx] = pv_value;
- pbtemp = p_obj_drc->pp_mem[i_idx];
- sz = p_obj_drc->p_mem_info[i_idx].ui_size;
-
- memset(pbtemp,0,sz);
- }
- case IA_API_CMD_SET_MEM_PLACEMENT:
- {
-
- }
- };
- return IA_NO_ERROR;
+ case IA_DRC_DEC_CONFIG_GAIN_STREAM_FLAG: {
+ p_obj_drc->str_bit_handler.gain_stream_flag = *pus_value;
+ break;
+ }
+
+ case IA_DRC_DEC_CONFIG_DRC_EFFECT_TYPE: {
+ p_obj_drc->str_config.effect_type = *pus_value;
+ break;
+ }
+ case IA_DRC_DEC_CONFIG_DRC_TARGET_LOUDNESS: {
+ p_obj_drc->str_config.target_loudness = *pus_value;
+ break;
+ }
+ case IA_DRC_DEC_CONFIG_DRC_LOUD_NORM: {
+ p_obj_drc->str_config.loud_norm_flag = *pus_value;
+ break;
+ }
+
+ default: { return -1; }
+ }
+ break;
+ }
+ case IA_API_CMD_GET_MEMTABS_SIZE: {
+ break;
+ }
+ case IA_API_CMD_SET_MEMTABS_PTR: {
+ break;
+ }
+ case IA_API_CMD_GET_N_MEMTABS: {
+ *pui_value = NUM_DRC_TABLES;
+ break;
+ }
+ case IA_API_CMD_GET_N_TABLES: {
+ break;
+ }
+
+ case IA_API_CMD_EXECUTE: {
+ switch (i_idx) {
+ case IA_CMD_TYPE_DO_EXECUTE: {
+ if (p_obj_drc->str_config.dec_type == DEC_TYPE_TD) {
+ error_code = impd_process_time_domain(p_obj_drc);
+ } else if (p_obj_drc->str_config.dec_type == DEC_TYPE_QMF64) {
+ error_code = impd_init_process_audio_main_qmf(p_obj_drc);
+ } else if (p_obj_drc->str_config.dec_type == DEC_TYPE_STFT256) {
+ error_code = impd_init_process_audio_main_stft(p_obj_drc);
+ } else if (p_obj_drc->str_config.dec_type == DEC_TYPE_TD_QMF64) {
+ error_code = impd_init_process_audio_main_td_qmf(p_obj_drc);
+ }
+ break;
+ }
+ case IA_CMD_TYPE_DONE_QUERY: {
+ *pui_value = p_obj_drc->p_state->ui_exe_done;
+ break;
+ }
+ default: { return -1; }
+ };
+ break;
+ }
+ case IA_API_CMD_PUT_INPUT_QUERY: {
+ *pui_value = 1;
+ break;
+ }
+ case IA_API_CMD_GET_CURIDX_INPUT_BUF: {
+ UWORD32 ui_in_buf_size = p_obj_drc->p_mem_info[IA_DRC_INPUT_IDX].ui_size;
+ UWORD32 ui_in_bytes = p_obj_drc->p_state->ui_in_bytes;
+ *pui_value = ui_in_buf_size > ui_in_bytes ? ui_in_bytes : ui_in_buf_size;
+ break;
+ }
+ case IA_API_CMD_SET_INPUT_BYTES: {
+ p_obj_drc->p_state->ui_in_bytes = *pui_value;
+ break;
+ }
+
+ case IA_API_CMD_GET_OUTPUT_BYTES: {
+ *pui_value = p_obj_drc->p_state->ui_out_bytes;
+ break;
+ }
+ case IA_API_CMD_INPUT_OVER: {
+ p_obj_drc->p_state->ui_exe_done = 1;
+ break;
+ }
+ case IA_API_CMD_INPUT_OVER_BS: {
+ p_obj_drc->str_bit_handler.cpy_over = 1;
+ break;
+ }
+ case IA_API_CMD_INPUT_OVER_IC_BS: {
+ p_obj_drc->str_bit_handler.cpy_over_ic = 1;
+ break;
+ }
+ case IA_API_CMD_INPUT_OVER_IL_BS: {
+ p_obj_drc->str_bit_handler.cpy_over_il = 1;
+ break;
+ }
+ case IA_API_CMD_INPUT_OVER_IN_BS: {
+ p_obj_drc->str_bit_handler.cpy_over_in = 1;
+ break;
+ }
+ case IA_API_CMD_SET_INPUT_BYTES_BS: {
+ p_obj_drc->str_bit_handler.num_byts_cur = *pus_value;
+ break;
+ }
+ case IA_API_CMD_SET_INPUT_BYTES_IC_BS: {
+ p_obj_drc->str_bit_handler.num_byts_cur_ic = *pus_value;
+ break;
+ }
+ case IA_API_CMD_SET_INPUT_BYTES_IL_BS: {
+ p_obj_drc->str_bit_handler.num_byts_cur_il = *pus_value;
+ break;
+ }
+ case IA_API_CMD_SET_INPUT_BYTES_IN_BS: {
+ p_obj_drc->str_bit_handler.num_byts_cur_in = *pus_value;
+ break;
+ }
+ default: { return -1; }
+ };
+ return error_code;
}
-IA_ERRORCODE impd_drc_fill_mem_tables(ia_drc_api_struct *p_obj_drc)
-{
- ia_mem_info_struct *p_mem_info;
- {
- p_mem_info = &p_obj_drc->p_mem_info[IA_DRC_PERSIST_IDX];
- p_mem_info->ui_size = 64*1024*1024;
- p_mem_info->ui_alignment = 8;
- p_mem_info->ui_type = IA_MEMTYPE_PERSIST;
- p_mem_info->ui_placement[0] = 0;
- p_mem_info->ui_placement[1] = 0;
- p_mem_info->ui_priority = IA_MEMPRIORITY_ANYWHERE;
- p_mem_info->ui_placed[0] = 0;
- p_mem_info->ui_placed[1] = 0;
+IA_ERRORCODE impd_drc_mem_api(ia_drc_api_struct *p_obj_drc, WORD32 i_cmd,
+ WORD32 i_idx, pVOID pv_value) {
+ pUWORD32 pui_value = pv_value;
+
+ switch (i_cmd) {
+ case IA_API_CMD_GET_MEM_INFO_SIZE: {
+ *pui_value = p_obj_drc->p_mem_info[i_idx].ui_size;
+ break;
+ }
+ case IA_API_CMD_GET_MEM_INFO_ALIGNMENT: {
+ *pui_value = p_obj_drc->p_mem_info[i_idx].ui_alignment;
+ break;
}
- {
- p_mem_info = &p_obj_drc->p_mem_info[IA_DRC_INPUT_IDX];
- p_mem_info->ui_size = p_obj_drc->str_config.frame_size*(p_obj_drc->str_config.pcm_size>>3)*p_obj_drc->str_config.num_ch_in;
- p_mem_info->ui_alignment = 4;
- p_mem_info->ui_type = IA_MEMTYPE_INPUT;
- p_mem_info->ui_placement[0] = 0;
- p_mem_info->ui_placement[1] = 0;
- p_mem_info->ui_priority = IA_MEMPRIORITY_ANYWHERE;
- p_mem_info->ui_placed[0] = 0;
- p_mem_info->ui_placed[1] = 0;
+ case IA_API_CMD_GET_MEM_INFO_TYPE: {
+ *pui_value = p_obj_drc->p_mem_info[i_idx].ui_type;
+ break;
}
- {
- p_mem_info = &p_obj_drc->p_mem_info[IA_DRC_OUTPUT_IDX];
- p_mem_info->ui_size = p_obj_drc->str_config.frame_size*(p_obj_drc->str_config.pcm_size>>3)*p_obj_drc->str_config.num_ch_in;
- p_mem_info->ui_alignment = 4;
- p_mem_info->ui_type = IA_MEMTYPE_OUTPUT;
- p_mem_info->ui_placement[0] = 0;
- p_mem_info->ui_placement[1] = 0;
- p_mem_info->ui_priority = IA_MEMPRIORITY_ANYWHERE;
- p_mem_info->ui_placed[0] = 0;
- p_mem_info->ui_placed[1] = 0;
+ case IA_API_CMD_GET_MEM_INFO_PLACEMENT: {
+ *pui_value = p_obj_drc->p_mem_info[i_idx].ui_placement[0];
+ *(pui_value + 1) = p_obj_drc->p_mem_info[i_idx].ui_placement[1];
+ break;
}
- {
- p_mem_info = &p_obj_drc->p_mem_info[IA_DRC_SCRATCH_IDX];
- p_mem_info->ui_size = SCRATCH_MEM_SIZE;
- p_mem_info->ui_alignment = 8;
- p_mem_info->ui_type = IA_MEMTYPE_SCRATCH;
- p_mem_info->ui_placement[0] = 0;
- p_mem_info->ui_placement[1] = 0;
- p_mem_info->ui_priority = IA_MEMPRIORITY_ANYWHERE;
- p_mem_info->ui_placed[0] = 0;
- p_mem_info->ui_placed[1] = 0;
+ case IA_API_CMD_GET_MEM_INFO_PRIORITY: {
+ *pui_value = p_obj_drc->p_mem_info[i_idx].ui_priority;
+ break;
}
- return IA_NO_ERROR;
+ case IA_API_CMD_SET_MEM_PTR: {
+ pWORD8 pbtemp;
+ UWORD32 sz;
+ if (pv_value == 0) {
+ return (-1);
+ }
+ if (((SIZE_T)pv_value % p_obj_drc->p_mem_info[i_idx].ui_alignment) != 0) {
+ return (-1);
+ }
+ p_obj_drc->pp_mem[i_idx] = pv_value;
+ pbtemp = p_obj_drc->pp_mem[i_idx];
+ sz = p_obj_drc->p_mem_info[i_idx].ui_size;
+
+ memset(pbtemp, 0, sz);
+ }
+ case IA_API_CMD_SET_MEM_PLACEMENT: {
+ }
+ };
+ return IA_NO_ERROR;
+}
+
+IA_ERRORCODE impd_drc_fill_mem_tables(ia_drc_api_struct *p_obj_drc) {
+ ia_mem_info_struct *p_mem_info;
+ {
+ p_mem_info = &p_obj_drc->p_mem_info[IA_DRC_PERSIST_IDX];
+ p_mem_info->ui_size = 64 * 1024 * 1024;
+ p_mem_info->ui_alignment = 8;
+ p_mem_info->ui_type = IA_MEMTYPE_PERSIST;
+ p_mem_info->ui_placement[0] = 0;
+ p_mem_info->ui_placement[1] = 0;
+ p_mem_info->ui_priority = IA_MEMPRIORITY_ANYWHERE;
+ p_mem_info->ui_placed[0] = 0;
+ p_mem_info->ui_placed[1] = 0;
+ }
+ {
+ p_mem_info = &p_obj_drc->p_mem_info[IA_DRC_INPUT_IDX];
+ p_mem_info->ui_size = p_obj_drc->str_config.frame_size *
+ (p_obj_drc->str_config.pcm_size >> 3) *
+ p_obj_drc->str_config.num_ch_in;
+ p_mem_info->ui_alignment = 4;
+ p_mem_info->ui_type = IA_MEMTYPE_INPUT;
+ p_mem_info->ui_placement[0] = 0;
+ p_mem_info->ui_placement[1] = 0;
+ p_mem_info->ui_priority = IA_MEMPRIORITY_ANYWHERE;
+ p_mem_info->ui_placed[0] = 0;
+ p_mem_info->ui_placed[1] = 0;
+ }
+ {
+ p_mem_info = &p_obj_drc->p_mem_info[IA_DRC_OUTPUT_IDX];
+ p_mem_info->ui_size = p_obj_drc->str_config.frame_size *
+ (p_obj_drc->str_config.pcm_size >> 3) *
+ p_obj_drc->str_config.num_ch_in;
+ p_mem_info->ui_alignment = 4;
+ p_mem_info->ui_type = IA_MEMTYPE_OUTPUT;
+ p_mem_info->ui_placement[0] = 0;
+ p_mem_info->ui_placement[1] = 0;
+ p_mem_info->ui_priority = IA_MEMPRIORITY_ANYWHERE;
+ p_mem_info->ui_placed[0] = 0;
+ p_mem_info->ui_placed[1] = 0;
+ }
+ {
+ p_mem_info = &p_obj_drc->p_mem_info[IA_DRC_SCRATCH_IDX];
+ p_mem_info->ui_size = SCRATCH_MEM_SIZE;
+ p_mem_info->ui_alignment = 8;
+ p_mem_info->ui_type = IA_MEMTYPE_SCRATCH;
+ p_mem_info->ui_placement[0] = 0;
+ p_mem_info->ui_placement[1] = 0;
+ p_mem_info->ui_priority = IA_MEMPRIORITY_ANYWHERE;
+ p_mem_info->ui_placed[0] = 0;
+ p_mem_info->ui_placed[1] = 0;
+ }
+ return IA_NO_ERROR;
}
diff --git a/decoder/drc_src/impd_drc_api_defs.h b/decoder/drc_src/impd_drc_api_defs.h
index 5885a45..3fba4d0 100644
--- a/decoder/drc_src/impd_drc_api_defs.h
+++ b/decoder/drc_src/impd_drc_api_defs.h
@@ -18,7 +18,6 @@
* Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
*/
-
#ifndef IMPD_API_DEFS_H
#define IMPD_API_DEFS_H
@@ -26,26 +25,25 @@
/* Constant hash defines */
/*****************************************************************************/
/* A constant to let API copy small strings to buffers outside */
-#define IA_API_STR_LEN 30
-#define IA_APIVERSION_MAJOR 1
-#define IA_APIVERSION_MINOR 10
+#define IA_API_STR_LEN 30
+#define IA_APIVERSION_MAJOR 1
+#define IA_APIVERSION_MINOR 10
/* last compatible version */
/* sometimes a new API version is just for a bugfix, or a added feature in */
/* this case it is better to use a newer version even though a library was */
/* made for an older version, library API can then be upgraded to newer API */
/* version after checking for compatibility or by adding features */
-#define IA_LASTCOMP_APIVERSION_MAJOR 1
-#define IA_LASTCOMP_APIVERSION_MINOR 10
+#define IA_LASTCOMP_APIVERSION_MAJOR 1
+#define IA_LASTCOMP_APIVERSION_MINOR 10
-#define IA_STR(str) #str
-#define IA_MAKE_VERSION_STR(maj, min) IA_STR(maj) "." IA_STR(min)
-#define IA_APIVERSION IA_MAKE_VERSION_STR(\
- IA_APIVERSION_MAJOR, \
- IA_APIVERSION_MINOR)
+#define IA_STR(str) #str
+#define IA_MAKE_VERSION_STR(maj, min) IA_STR(maj) "." IA_STR(min)
+#define IA_APIVERSION \
+ IA_MAKE_VERSION_STR(IA_APIVERSION_MAJOR, IA_APIVERSION_MINOR)
-#define IA_LAST_COMP_APIVERSION IA_MAKE_VERSION_STR(\
- IA_LASTCOMP_APIVERSION_MAJOR, \
- IA_LASTCOMP_APIVERSION_MINOR)
+#define IA_LAST_COMP_APIVERSION \
+ IA_MAKE_VERSION_STR(IA_LASTCOMP_APIVERSION_MAJOR, \
+ IA_LASTCOMP_APIVERSION_MINOR)
#endif
diff --git a/decoder/drc_src/impd_drc_api_struct_def.h b/decoder/drc_src/impd_drc_api_struct_def.h
index abe6cc3..a48cd68 100644
--- a/decoder/drc_src/impd_drc_api_struct_def.h
+++ b/decoder/drc_src/impd_drc_api_struct_def.h
@@ -24,110 +24,105 @@
/* structure definitions */
/****************************************************************************/
/* DRC Configuration */
-typedef struct ia_drc_config_struct
-{
- WORD32 bitstream_file_format;
- WORD32 dec_type;
- WORD32 sub_band_domain_mode;
- WORD32 num_ch_in;
- WORD32 num_ch_out;
- WORD32 sampling_rate;
- WORD32 control_parameter_index;
- WORD32 delay_mode;
- WORD32 absorb_delay_on;
- WORD32 gain_delay_samples;
- WORD32 subband_domain_io_flag;
- WORD32 frame_size;
- WORD32 sub_band_down_sampling_factor;
- WORD32 sub_band_count;
- WORD32 peak_limiter;
- WORD32 interface_bitstream_present;
- WORD32 pcm_size;
- WORD32 parametric_drc_delay_gain_dec_instance ;
- WORD32 parametric_drc_delay;
- WORD32 parametric_drc_delay_max;
- WORD32 eq_delay_gain_dec_instance;
- WORD32 eq_delay;
- WORD32 eq_delay_max;
- WORD32 delay_line_samples;
- WORD32 constant_delay_on;
- WORD32 audio_delay_samples;
+typedef struct ia_drc_config_struct {
+ WORD32 bitstream_file_format;
+ WORD32 dec_type;
+ WORD32 sub_band_domain_mode;
+ WORD32 num_ch_in;
+ WORD32 num_ch_out;
+ WORD32 sampling_rate;
+ WORD32 control_parameter_index;
+ WORD32 delay_mode;
+ WORD32 absorb_delay_on;
+ WORD32 gain_delay_samples;
+ WORD32 subband_domain_io_flag;
+ WORD32 frame_size;
+ WORD32 sub_band_down_sampling_factor;
+ WORD32 sub_band_count;
+ WORD32 peak_limiter;
+ WORD32 interface_bitstream_present;
+ WORD32 pcm_size;
+ WORD32 parametric_drc_delay_gain_dec_instance;
+ WORD32 parametric_drc_delay;
+ WORD32 parametric_drc_delay_max;
+ WORD32 eq_delay_gain_dec_instance;
+ WORD32 eq_delay;
+ WORD32 eq_delay_max;
+ WORD32 delay_line_samples;
+ WORD32 constant_delay_on;
+ WORD32 audio_delay_samples;
- WORD32 effect_type;
- WORD32 target_loudness;
- WORD32 loud_norm_flag;
+ WORD32 effect_type;
+ WORD32 target_loudness;
+ WORD32 loud_norm_flag;
-}ia_drc_config_struct;
+} ia_drc_config_struct;
/* DRC bitsteam handler */
-typedef struct bits_handler
-{
- UWORD8* bitstream_drc_config;
- UWORD8* bitstream_loudness_info ;
- UWORD8* bitstream_unidrc_interface ;
- UWORD8* it_bit_buf;
- WORD32 num_bytes_bs_drc_config;
- WORD32 num_bytes_bs_loudness_info;
- WORD32 num_bits_read_bs_unidrc_interface;
- WORD32 num_bytes_bs_unidrc_interface;
- WORD32 num_bits_read_bs;
- WORD32 num_bytes_read_bs;
- WORD32 num_bytes_bs;
- WORD32 num_bits_offset_bs;
- WORD32 byte_index_bs;
- WORD32 num_byts_cur;
- WORD32 num_byts_cur_ic;
- WORD32 num_byts_cur_il;
- WORD32 num_byts_cur_in;
- WORD32 cpy_over;
- WORD32 cpy_over_ic;
- WORD32 cpy_over_il;
- WORD32 cpy_over_in;
- WORD32 gain_stream_flag;
-}ia_drc_bits_handler_struct;
+typedef struct bits_handler {
+ UWORD8 *bitstream_drc_config;
+ UWORD8 *bitstream_loudness_info;
+ UWORD8 *bitstream_unidrc_interface;
+ UWORD8 *it_bit_buf;
+ WORD32 num_bytes_bs_drc_config;
+ WORD32 num_bytes_bs_loudness_info;
+ WORD32 num_bits_read_bs_unidrc_interface;
+ WORD32 num_bytes_bs_unidrc_interface;
+ WORD32 num_bits_read_bs;
+ WORD32 num_bytes_read_bs;
+ WORD32 num_bytes_bs;
+ WORD32 num_bits_offset_bs;
+ WORD32 byte_index_bs;
+ WORD32 num_byts_cur;
+ WORD32 num_byts_cur_ic;
+ WORD32 num_byts_cur_il;
+ WORD32 num_byts_cur_in;
+ WORD32 cpy_over;
+ WORD32 cpy_over_ic;
+ WORD32 cpy_over_il;
+ WORD32 cpy_over_in;
+ WORD32 gain_stream_flag;
+} ia_drc_bits_handler_struct;
-typedef struct
-{
- ia_drc_bits_dec_struct *pstr_bitstream_dec;
- ia_drc_gain_dec_struct *pstr_gain_dec[2];
- ia_drc_sel_pro_struct *pstr_selection_proc;
- ia_drc_config *pstr_drc_config;
- ia_drc_loudness_info_set_struct *pstr_loudness_info;
- ia_drc_gain_struct *pstr_drc_gain;
- ia_drc_interface_struct *pstr_drc_interface;
+typedef struct {
+ ia_drc_bits_dec_struct *pstr_bitstream_dec;
+ ia_drc_gain_dec_struct *pstr_gain_dec[2];
+ ia_drc_sel_pro_struct *pstr_selection_proc;
+ ia_drc_config *pstr_drc_config;
+ ia_drc_loudness_info_set_struct *pstr_loudness_info;
+ ia_drc_gain_struct *pstr_drc_gain;
+ ia_drc_interface_struct *pstr_drc_interface;
- ia_drc_peak_limiter_struct *pstr_peak_limiter;
- ia_drc_qmf_filt_struct *pstr_qmf_filter;
- ia_drc_sel_proc_params_struct *pstr_drc_sel_proc_params;
- ia_drc_sel_proc_output_struct *pstr_drc_sel_proc_output;
+ ia_drc_peak_limiter_struct *pstr_peak_limiter;
+ ia_drc_qmf_filt_struct *pstr_qmf_filter;
+ ia_drc_sel_proc_params_struct *pstr_drc_sel_proc_params;
+ ia_drc_sel_proc_output_struct *pstr_drc_sel_proc_output;
-}ia_drc_payload_struct;
+} ia_drc_payload_struct;
-typedef struct ia_drc_state_struct
-{
- UWORD32 ui_out_bytes;
- UWORD32 ui_in_bytes;
- UWORD32 ui_ir_bytes;
- UWORD32 total_num_out_samples;
- UWORD32 frame_no;
- UWORD32 out_size;
- UWORD32 ui_init_done;
- UWORD32 ui_exe_done;
- UWORD32 ui_ir_used;
- WORD32 delay_in_output;
- WORD32 delay_adjust_samples;
- pVOID persistant_ptr;
-}ia_drc_state_struct;
+typedef struct ia_drc_state_struct {
+ UWORD32 ui_out_bytes;
+ UWORD32 ui_in_bytes;
+ UWORD32 ui_ir_bytes;
+ UWORD32 total_num_out_samples;
+ UWORD32 frame_no;
+ UWORD32 out_size;
+ UWORD32 ui_init_done;
+ UWORD32 ui_exe_done;
+ UWORD32 ui_ir_used;
+ WORD32 delay_in_output;
+ WORD32 delay_adjust_samples;
+ pVOID persistant_ptr;
+} ia_drc_state_struct;
-typedef struct IA_PSM_API_Struct
-{
- ia_drc_state_struct *p_state;
- ia_drc_config_struct str_config;
- ia_drc_payload_struct str_payload;
- ia_drc_bits_handler_struct str_bit_handler;
- ia_mem_info_struct *p_mem_info;
- pVOID *pp_mem;
- struct ia_bit_buf_struct str_bit_buf, *pstr_bit_buf;
+typedef struct IA_PSM_API_Struct {
+ ia_drc_state_struct *p_state;
+ ia_drc_config_struct str_config;
+ ia_drc_payload_struct str_payload;
+ ia_drc_bits_handler_struct str_bit_handler;
+ ia_mem_info_struct *p_mem_info;
+ pVOID *pp_mem;
+ struct ia_bit_buf_struct str_bit_buf, *pstr_bit_buf;
} ia_drc_api_struct;
diff --git a/decoder/drc_src/impd_drc_bitbuffer.c b/decoder/drc_src/impd_drc_bitbuffer.c
index 2791192..de1f86d 100644
--- a/decoder/drc_src/impd_drc_bitbuffer.c
+++ b/decoder/drc_src/impd_drc_bitbuffer.c
@@ -30,262 +30,222 @@
#include "impd_drc_struct.h"
#include "impd_drc_parser.h"
+WORD32 impd_read_bits_buf(ia_bit_buf_struct* it_bit_buff, WORD no_of_bits) {
+ UWORD32 ret_val;
+ UWORD8* ptr_read_next = it_bit_buff->ptr_read_next;
+ WORD bit_pos = it_bit_buff->bit_pos;
+ it_bit_buff->error = 0;
+
+ if (it_bit_buff->cnt_bits <= 0) {
+ it_bit_buff->error = 1;
+ return -1;
+ }
+
+ if (no_of_bits == 0) {
+ return 0;
+ }
-WORD32 impd_read_bits_buf(ia_bit_buf_struct* it_bit_buff,
- WORD no_of_bits)
-{
-
- UWORD32 ret_val;
- UWORD8 *ptr_read_next = it_bit_buff->ptr_read_next;
- WORD bit_pos = it_bit_buff->bit_pos;
- it_bit_buff->error = 0;
+ it_bit_buff->cnt_bits -= no_of_bits;
+ ret_val = (UWORD32)*ptr_read_next;
- if(it_bit_buff->cnt_bits <= 0)
- {
- it_bit_buff->error = 1;
- return -1;
- }
+ bit_pos -= no_of_bits;
+ while (bit_pos < 0) {
+ bit_pos += 8;
+ ptr_read_next++;
- if (no_of_bits==0){
- return 0;
+ if (ptr_read_next > it_bit_buff->ptr_bit_buf_end) {
+ ptr_read_next = it_bit_buff->ptr_bit_buf_base;
}
- it_bit_buff->cnt_bits -= no_of_bits;
- ret_val = (UWORD32)*ptr_read_next;
-
- bit_pos -= no_of_bits;
- while (bit_pos < 0) {
- bit_pos += 8;
- ptr_read_next++;
-
- if(ptr_read_next > it_bit_buff->ptr_bit_buf_end) {
- ptr_read_next = it_bit_buff->ptr_bit_buf_base;
- }
+ ret_val <<= 8;
- ret_val <<= 8;
+ ret_val |= (UWORD32)*ptr_read_next;
+ }
- ret_val |= (UWORD32)*ptr_read_next;
- }
-
- ret_val = ret_val << ((31 - no_of_bits) - bit_pos) >> (32 - no_of_bits);
- it_bit_buff->ptr_read_next = ptr_read_next;
- it_bit_buff->bit_pos = (WORD16)bit_pos;
- return ret_val;
+ ret_val = ret_val << ((31 - no_of_bits) - bit_pos) >> (32 - no_of_bits);
+ it_bit_buff->ptr_read_next = ptr_read_next;
+ it_bit_buff->bit_pos = (WORD16)bit_pos;
+ return ret_val;
}
ia_bit_buf_struct* impd_create_bit_buf(ia_bit_buf_struct* it_bit_buff,
- UWORD8 *ptr_bit_buf_base,
- WORD32 bit_buf_size)
-{
+ UWORD8* ptr_bit_buf_base,
+ WORD32 bit_buf_size) {
+ it_bit_buff->ptr_bit_buf_base = ptr_bit_buf_base;
+ it_bit_buff->ptr_bit_buf_end = ptr_bit_buf_base + bit_buf_size - 1;
- it_bit_buff->ptr_bit_buf_base = ptr_bit_buf_base;
- it_bit_buff->ptr_bit_buf_end = ptr_bit_buf_base + bit_buf_size - 1;
+ it_bit_buff->ptr_read_next = ptr_bit_buf_base;
+ it_bit_buff->bit_pos = 7;
- it_bit_buff->ptr_read_next = ptr_bit_buf_base;
- it_bit_buff->bit_pos = 7;
+ it_bit_buff->cnt_bits = 0;
+ it_bit_buff->size = bit_buf_size << 3;
- it_bit_buff->cnt_bits = 0;
- it_bit_buff->size = bit_buf_size << 3;
-
- return it_bit_buff;
+ return it_bit_buff;
}
ia_bit_buf_struct* impd_create_init_bit_buf(ia_bit_buf_struct* it_bit_buff,
- UWORD8 *ptr_bit_buf_base,
- WORD32 bit_buf_size)
-{
- impd_create_bit_buf(it_bit_buff,ptr_bit_buf_base,bit_buf_size);
- it_bit_buff->cnt_bits = (bit_buf_size << 3);
- return (it_bit_buff);
+ UWORD8* ptr_bit_buf_base,
+ WORD32 bit_buf_size) {
+ impd_create_bit_buf(it_bit_buff, ptr_bit_buf_base, bit_buf_size);
+ it_bit_buff->cnt_bits = (bit_buf_size << 3);
+ return (it_bit_buff);
}
WORD32 impd_init_drc_bitstream_dec(ia_drc_bits_dec_struct* p_drc_bs_dec_struct,
- WORD32 sample_rate,
- WORD32 frame_size,
- WORD32 delay_mode,
- WORD32 lfe_channel_map_count,
- WORD32* lfe_channel_map)
-{
- WORD32 i, err_code = 0;
-
- ia_drc_params_bs_dec_struct* ia_drc_params_struct = &p_drc_bs_dec_struct->ia_drc_params_struct;
- ia_drc_params_struct->drc_frame_size = frame_size;
- ia_drc_params_struct->delta_tmin_default = impd_get_delta_tmin(sample_rate);
- ia_drc_params_struct->num_gain_values_max_default = ia_drc_params_struct->drc_frame_size / ia_drc_params_struct->delta_tmin_default;
- ia_drc_params_struct->delay_mode = delay_mode;
-
- if ((frame_size < 1)||(frame_size > AUDIO_CODEC_FRAME_SIZE_MAX)||(ia_drc_params_struct->drc_frame_size < 0.001f * sample_rate))
- {
- return -1;
- }
- if (sample_rate < 1000)
- {
- return -1;
+ WORD32 sample_rate, WORD32 frame_size,
+ WORD32 delay_mode,
+ WORD32 lfe_channel_map_count,
+ WORD32* lfe_channel_map) {
+ WORD32 i, err_code = 0;
+
+ ia_drc_params_bs_dec_struct* ia_drc_params_struct =
+ &p_drc_bs_dec_struct->ia_drc_params_struct;
+ ia_drc_params_struct->drc_frame_size = frame_size;
+ ia_drc_params_struct->delta_tmin_default = impd_get_delta_tmin(sample_rate);
+ ia_drc_params_struct->num_gain_values_max_default =
+ ia_drc_params_struct->drc_frame_size /
+ ia_drc_params_struct->delta_tmin_default;
+ ia_drc_params_struct->delay_mode = delay_mode;
+
+ if ((frame_size < 1) || (frame_size > AUDIO_CODEC_FRAME_SIZE_MAX) ||
+ (ia_drc_params_struct->drc_frame_size < 0.001f * sample_rate)) {
+ return -1;
+ }
+ if (sample_rate < 1000) {
+ return -1;
+ }
+
+ if (ia_drc_params_struct->delta_tmin_default >
+ ia_drc_params_struct->drc_frame_size) {
+ return -1;
+ }
+
+ if (lfe_channel_map_count >= 0) {
+ if ((lfe_channel_map == NULL) ||
+ (lfe_channel_map_count > MAX_CHANNEL_COUNT)) {
+ return (-1);
}
- if (ia_drc_params_struct->delta_tmin_default > ia_drc_params_struct->drc_frame_size)
- {
- return -1;
- }
-
- if (lfe_channel_map_count >= 0)
- {
- if ((lfe_channel_map == NULL) || (lfe_channel_map_count > MAX_CHANNEL_COUNT))
- {
- return(-1);
- }
+ ia_drc_params_struct->lfe_channel_map_count = lfe_channel_map_count;
- ia_drc_params_struct->lfe_channel_map_count = lfe_channel_map_count;
-
- for (i=0; i<lfe_channel_map_count; i++)
- {
- ia_drc_params_struct->lfe_channel_map[i] = lfe_channel_map[i];
- }
+ for (i = 0; i < lfe_channel_map_count; i++) {
+ ia_drc_params_struct->lfe_channel_map[i] = lfe_channel_map[i];
}
- else
- {
- ia_drc_params_struct->lfe_channel_map_count = -1;
-
- for (i=0; i<MAX_CHANNEL_COUNT; i++)
- {
- ia_drc_params_struct->lfe_channel_map[i] = 0;
- }
+ } else {
+ ia_drc_params_struct->lfe_channel_map_count = -1;
+
+ for (i = 0; i < MAX_CHANNEL_COUNT; i++) {
+ ia_drc_params_struct->lfe_channel_map[i] = 0;
}
+ }
- err_code = impd_init_tbls(ia_drc_params_struct->num_gain_values_max_default, &p_drc_bs_dec_struct->tables_default);
+ err_code = impd_init_tbls(ia_drc_params_struct->num_gain_values_max_default,
+ &p_drc_bs_dec_struct->tables_default);
- return err_code;
+ return err_code;
}
+WORD32 impd_process_drc_bitstream_dec(
+ ia_drc_bits_dec_struct* p_drc_bs_dec_struct, ia_bit_buf_struct* it_bit_buff,
+ ia_drc_config* pstr_drc_config,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ UWORD8* bitstream_config, WORD32 num_bytes, WORD32 num_bits_offset,
+ WORD32* num_bits_read) {
+ WORD32 err_code = 0;
-WORD32 impd_process_drc_bitstream_dec(ia_drc_bits_dec_struct* p_drc_bs_dec_struct,
- ia_bit_buf_struct* it_bit_buff,
- ia_drc_config *pstr_drc_config,
- ia_drc_loudness_info_set_struct *pstr_loudness_info,
- UWORD8* bitstream_config,
- WORD32 num_bytes,
- WORD32 num_bits_offset,
- WORD32* num_bits_read)
-{
- WORD32 err_code = 0;
-
- WORD32 loudness_info_set_present, drc_config_present, dummy;
+ WORD32 loudness_info_set_present, drc_config_present, dummy;
+ if (bitstream_config == NULL) {
+ *num_bits_read = 0;
+ } else {
+ it_bit_buff =
+ impd_create_init_bit_buf(it_bit_buff, bitstream_config, num_bytes);
- if (bitstream_config == NULL)
- {
- *num_bits_read = 0;
- }
- else
- {
-
- it_bit_buff = impd_create_init_bit_buf(it_bit_buff, bitstream_config, num_bytes);
-
- dummy = impd_read_bits_buf(it_bit_buff, num_bits_offset);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- loudness_info_set_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if (loudness_info_set_present)
- {
- drc_config_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ dummy = impd_read_bits_buf(it_bit_buff, num_bits_offset);
+ if (it_bit_buff->error) return it_bit_buff->error;
- if (drc_config_present)
- {
- err_code = impd_parse_drc_config(it_bit_buff, &p_drc_bs_dec_struct->ia_drc_params_struct, pstr_drc_config);
+ loudness_info_set_present = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
- if (err_code)
- return (err_code);
+ if (loudness_info_set_present) {
+ drc_config_present = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
- }
+ if (drc_config_present) {
+ err_code = impd_parse_drc_config(
+ it_bit_buff, &p_drc_bs_dec_struct->ia_drc_params_struct,
+ pstr_drc_config);
- err_code = impd_parse_loudness_info_set(it_bit_buff, pstr_loudness_info);
+ if (err_code) return (err_code);
+ }
- if (err_code)
- return (err_code);
- }
+ err_code = impd_parse_loudness_info_set(it_bit_buff, pstr_loudness_info);
- *num_bits_read = it_bit_buff->size - it_bit_buff->cnt_bits;
+ if (err_code) return (err_code);
}
- return err_code;
-}
+ *num_bits_read = it_bit_buff->size - it_bit_buff->cnt_bits;
+ }
+ return err_code;
+}
-WORD32 impd_process_drc_bitstream_dec_config(ia_drc_bits_dec_struct* p_drc_bs_dec_struct,
- ia_bit_buf_struct* it_bit_buff,
- ia_drc_config *pstr_drc_config,
- UWORD8* bitstream_config,
- WORD32 num_bytes)
-{
- WORD32 err_code = 0;
+WORD32 impd_process_drc_bitstream_dec_config(
+ ia_drc_bits_dec_struct* p_drc_bs_dec_struct, ia_bit_buf_struct* it_bit_buff,
+ ia_drc_config* pstr_drc_config, UWORD8* bitstream_config,
+ WORD32 num_bytes) {
+ WORD32 err_code = 0;
- it_bit_buff = impd_create_init_bit_buf(it_bit_buff, bitstream_config, num_bytes);
+ it_bit_buff =
+ impd_create_init_bit_buf(it_bit_buff, bitstream_config, num_bytes);
- err_code = impd_parse_drc_config( it_bit_buff, &p_drc_bs_dec_struct->ia_drc_params_struct, pstr_drc_config);
- if (err_code) return (err_code);
+ err_code = impd_parse_drc_config(
+ it_bit_buff, &p_drc_bs_dec_struct->ia_drc_params_struct, pstr_drc_config);
+ if (err_code) return (err_code);
- return err_code;
+ return err_code;
}
+WORD32 impd_process_drc_bitstream_dec_gain(
+ ia_drc_bits_dec_struct* p_drc_bs_dec_struct, ia_bit_buf_struct* it_bit_buff,
+ ia_drc_config* pstr_drc_config, ia_drc_gain_struct* pstr_drc_gain,
+ UWORD8* bitstream_gain, WORD32 num_bytes, WORD32 num_bits_offset,
+ WORD32* num_bits_read) {
+ WORD32 err_code = 0;
-WORD32 impd_process_drc_bitstream_dec_gain(ia_drc_bits_dec_struct* p_drc_bs_dec_struct,
- ia_bit_buf_struct* it_bit_buff,
- ia_drc_config *pstr_drc_config,
- ia_drc_gain_struct *pstr_drc_gain,
- UWORD8* bitstream_gain,
- WORD32 num_bytes,
- WORD32 num_bits_offset,
- WORD32* num_bits_read)
-{
- WORD32 err_code = 0;
+ WORD32 dummy;
- WORD32 dummy;
+ it_bit_buff =
+ impd_create_init_bit_buf(it_bit_buff, bitstream_gain, num_bytes);
- it_bit_buff = impd_create_init_bit_buf(it_bit_buff, bitstream_gain, num_bytes);
+ dummy = impd_read_bits_buf(it_bit_buff, num_bits_offset);
+ if (it_bit_buff->error) return it_bit_buff->error;
- dummy = impd_read_bits_buf(it_bit_buff, num_bits_offset);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- err_code = impd_drc_uni_gain_read(
- it_bit_buff,
- p_drc_bs_dec_struct,
- pstr_drc_config,
- pstr_drc_gain);
+ err_code = impd_drc_uni_gain_read(it_bit_buff, p_drc_bs_dec_struct,
+ pstr_drc_config, pstr_drc_gain);
- if (err_code > PROC_COMPLETE)
- return (err_code);
+ if (err_code > PROC_COMPLETE) return (err_code);
- *num_bits_read = (it_bit_buff->size) - it_bit_buff->cnt_bits;
+ *num_bits_read = (it_bit_buff->size) - it_bit_buff->cnt_bits;
- if (err_code == PROC_COMPLETE)
- {
- return err_code;
- }
+ if (err_code == PROC_COMPLETE) {
+ return err_code;
+ }
- return 0;
+ return 0;
}
+WORD32 impd_process_drc_bitstream_dec_loudness_info_set(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ UWORD8* bit_stream_loudness, WORD32 num_bytes_loudness) {
+ WORD32 err_code = 0;
-WORD32 impd_process_drc_bitstream_dec_loudness_info_set(ia_bit_buf_struct* it_bit_buff,
- ia_drc_loudness_info_set_struct *pstr_loudness_info,
- UWORD8* bit_stream_loudness,
- WORD32 num_bytes_loudness)
-{
- WORD32 err_code = 0;
-
- it_bit_buff = impd_create_init_bit_buf(it_bit_buff, bit_stream_loudness, num_bytes_loudness);
+ it_bit_buff = impd_create_init_bit_buf(it_bit_buff, bit_stream_loudness,
+ num_bytes_loudness);
- err_code = impd_parse_loudness_info_set(it_bit_buff, pstr_loudness_info);
- if (err_code)
- return(err_code);
+ err_code = impd_parse_loudness_info_set(it_bit_buff, pstr_loudness_info);
+ if (err_code) return (err_code);
-
- return 0;
+ return 0;
}
diff --git a/decoder/drc_src/impd_drc_bitbuffer.h b/decoder/drc_src/impd_drc_bitbuffer.h
index 89e7044..f42e24a 100644
--- a/decoder/drc_src/impd_drc_bitbuffer.h
+++ b/decoder/drc_src/impd_drc_bitbuffer.h
@@ -20,34 +20,28 @@
#ifndef IMPD_DRC_BITBUFFER_H
#define IMPD_DRC_BITBUFFER_H
+typedef struct ia_bit_buf_struct {
+ UWORD8 *ptr_bit_buf_base;
+ UWORD8 *ptr_bit_buf_end;
-typedef struct ia_bit_buf_struct
-{
- UWORD8 *ptr_bit_buf_base;
- UWORD8 *ptr_bit_buf_end;
+ UWORD8 *ptr_read_next;
- UWORD8 *ptr_read_next;
+ WORD32 bit_pos;
+ WORD32 cnt_bits;
- WORD32 bit_pos;
- WORD32 cnt_bits;
+ WORD32 size;
+ WORD32 error;
- WORD32 size;
- WORD32 error;
+} ia_bit_buf_struct;
+ia_bit_buf_struct *impd_create_bit_buf(ia_bit_buf_struct *it_bit_buff,
+ UWORD8 *ptr_bit_buf_base,
+ WORD32 bit_buf_size);
-}ia_bit_buf_struct;
-
-
-ia_bit_buf_struct * impd_create_bit_buf(ia_bit_buf_struct* it_bit_buff,
- UWORD8 *ptr_bit_buf_base,
- WORD32 bit_buf_size);
-
-ia_bit_buf_struct * impd_create_init_bit_buf(ia_bit_buf_struct* it_bit_buff,
- UWORD8 *ptr_bit_buf_base,
- WORD32 bit_buf_size);
-
-WORD32 impd_read_bits_buf(ia_bit_buf_struct* it_bit_buff,
- WORD no_of_bits);
+ia_bit_buf_struct *impd_create_init_bit_buf(ia_bit_buf_struct *it_bit_buff,
+ UWORD8 *ptr_bit_buf_base,
+ WORD32 bit_buf_size);
+WORD32 impd_read_bits_buf(ia_bit_buf_struct *it_bit_buff, WORD no_of_bits);
#endif
diff --git a/decoder/drc_src/impd_drc_bitstream_dec_api.h b/decoder/drc_src/impd_drc_bitstream_dec_api.h
index f4e45fb..25773d5 100644
--- a/decoder/drc_src/impd_drc_bitstream_dec_api.h
+++ b/decoder/drc_src/impd_drc_bitstream_dec_api.h
@@ -20,44 +20,31 @@
#ifndef IMPD_DRC_BITSTREAM_DEC_API_H
#define IMPD_DRC_BITSTREAM_DEC_API_H
-
-WORD32 impd_init_drc_bitstream_dec(ia_drc_bits_dec_struct* p_uni_drc_bs_dec_struct,
- WORD32 sample_rate,
- WORD32 frame_size,
- WORD32 delay_mode,
- WORD32 lfe_channel_map_count,
- WORD32* lfe_channel_map);
-
-WORD32 impd_process_drc_bitstream_dec(ia_drc_bits_dec_struct* p_uni_drc_bs_dec_struct,
- ia_bit_buf_struct* it_bit_buff,
- ia_drc_config* pstr_drc_config,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- UWORD8* bitstream_config,
- WORD32 num_bytes,
- WORD32 num_bits_offset,
- WORD32* num_bits_read);
-
-WORD32 impd_process_drc_bitstream_dec_config(ia_drc_bits_dec_struct* p_uni_drc_bs_dec_struct,
- ia_bit_buf_struct* it_bit_buff,
- ia_drc_config* pstr_drc_config,
- UWORD8* bitstream_config,
- WORD32 num_bytes);
-
-WORD32 impd_process_drc_bitstream_dec_gain(ia_drc_bits_dec_struct* p_uni_drc_bs_dec_struct,
- ia_bit_buf_struct* it_bit_buff,
- ia_drc_config* pstr_drc_config,
- ia_drc_gain_struct* pstr_drc_gain,
- UWORD8* bitstream_gain,
- WORD32 num_bytes,
- WORD32 num_bits_offset,
- WORD32* num_bits_read);
-
-WORD32 impd_process_drc_bitstream_dec_loudness_info_set(ia_bit_buf_struct* it_bit_buff,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- UWORD8* bitstream_loudness,
- WORD32 num_bytes_loudness
- );
+WORD32 impd_init_drc_bitstream_dec(
+ ia_drc_bits_dec_struct* p_uni_drc_bs_dec_struct, WORD32 sample_rate,
+ WORD32 frame_size, WORD32 delay_mode, WORD32 lfe_channel_map_count,
+ WORD32* lfe_channel_map);
+
+WORD32 impd_process_drc_bitstream_dec(
+ ia_drc_bits_dec_struct* p_uni_drc_bs_dec_struct,
+ ia_bit_buf_struct* it_bit_buff, ia_drc_config* pstr_drc_config,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ UWORD8* bitstream_config, WORD32 num_bytes, WORD32 num_bits_offset,
+ WORD32* num_bits_read);
+
+WORD32 impd_process_drc_bitstream_dec_config(
+ ia_drc_bits_dec_struct* p_uni_drc_bs_dec_struct,
+ ia_bit_buf_struct* it_bit_buff, ia_drc_config* pstr_drc_config,
+ UWORD8* bitstream_config, WORD32 num_bytes);
+
+WORD32 impd_process_drc_bitstream_dec_gain(
+ ia_drc_bits_dec_struct* p_uni_drc_bs_dec_struct,
+ ia_bit_buf_struct* it_bit_buff, ia_drc_config* pstr_drc_config,
+ ia_drc_gain_struct* pstr_drc_gain, UWORD8* bitstream_gain, WORD32 num_bytes,
+ WORD32 num_bits_offset, WORD32* num_bits_read);
+
+WORD32 impd_process_drc_bitstream_dec_loudness_info_set(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ UWORD8* bitstream_loudness, WORD32 num_bytes_loudness);
#endif
-
-
-
diff --git a/decoder/drc_src/impd_drc_common.h b/decoder/drc_src/impd_drc_common.h
index 79bdbcf..dd0e621 100644
--- a/decoder/drc_src/impd_drc_common.h
+++ b/decoder/drc_src/impd_drc_common.h
@@ -21,161 +21,155 @@
#define IMPD_DRC_COMMON_H
#ifdef __cplusplus
-extern "C"
-{
+extern "C" {
#endif
-
-#define EQ_IS_SUPPORTED 1
-
-#define MEASURE_AVERAGE_BITRATE 0
-
-#define ENABLE_ADDITIONAL_TESTS 1
-
-#define SPEAKER_POS_COUNT_MAX 128
-#define DOWNMIX_COEFF_COUNT_MAX 32*32
-#define MAX_CHANNEL_COUNT 128
-#define BAND_COUNT_MAX 8
-#define SEQUENCE_COUNT_MAX 24
-#define GAIN_SET_COUNT_MAX SEQUENCE_COUNT_MAX
-#define MEASUREMENT_COUNT_MAX 16
-#define DOWNMIX_INSTRUCTION_COUNT_MAX 16
-#define DRC_COEFF_COUNT_MAX 8
-#define DRC_INSTRUCTIONS_COUNT_MAX (DOWNMIX_INSTRUCTION_COUNT_MAX + 20)
-#define LOUDNESS_INFO_COUNT_MAX (DOWNMIX_INSTRUCTION_COUNT_MAX + 20)
-#define AUDIO_CODEC_FRAME_SIZE_MAX 4096
-#define DRC_CODEC_FRAME_SIZE_MAX (AUDIO_CODEC_FRAME_SIZE_MAX/8)
-#define NODE_COUNT_MAX DRC_CODEC_FRAME_SIZE_MAX
-#define CHANNEL_GROUP_COUNT_MAX SEQUENCE_COUNT_MAX
-#define SUB_DRC_COUNT 4
-#define SEL_DRC_COUNT 3
-#define DOWNMIX_ID_COUNT_MAX 8
-#define MAX_SIGNAL_DELAY 4500
-
-#define DRC_BAND_COUNT_MAX BAND_COUNT_MAX
-#define SPLIT_CHARACTERISTIC_COUNT_MAX 8
-#define GAIN_SET_COUNT_MAX SEQUENCE_COUNT_MAX
-#define SHAPE_FILTER_COUNT_MAX 8
-#define DRC_SET_ID_COUNT_MAX 16
-#define EQ_SET_ID_COUNT_MAX 8
+#define EQ_IS_SUPPORTED 1
+
+#define MEASURE_AVERAGE_BITRATE 0
+
+#define ENABLE_ADDITIONAL_TESTS 1
+
+#define SPEAKER_POS_COUNT_MAX 128
+#define DOWNMIX_COEFF_COUNT_MAX 32 * 32
+#define MAX_CHANNEL_COUNT 128
+#define BAND_COUNT_MAX 8
+#define SEQUENCE_COUNT_MAX 24
+#define GAIN_SET_COUNT_MAX SEQUENCE_COUNT_MAX
+#define MEASUREMENT_COUNT_MAX 16
+#define DOWNMIX_INSTRUCTION_COUNT_MAX 16
+#define DRC_COEFF_COUNT_MAX 8
+#define DRC_INSTRUCTIONS_COUNT_MAX (DOWNMIX_INSTRUCTION_COUNT_MAX + 20)
+#define LOUDNESS_INFO_COUNT_MAX (DOWNMIX_INSTRUCTION_COUNT_MAX + 20)
+#define AUDIO_CODEC_FRAME_SIZE_MAX 4096
+#define DRC_CODEC_FRAME_SIZE_MAX (AUDIO_CODEC_FRAME_SIZE_MAX / 8)
+#define NODE_COUNT_MAX DRC_CODEC_FRAME_SIZE_MAX
+#define CHANNEL_GROUP_COUNT_MAX SEQUENCE_COUNT_MAX
+#define SUB_DRC_COUNT 4
+#define SEL_DRC_COUNT 3
+#define DOWNMIX_ID_COUNT_MAX 8
+#define MAX_SIGNAL_DELAY 4500
+
+#define DRC_BAND_COUNT_MAX BAND_COUNT_MAX
+#define SPLIT_CHARACTERISTIC_COUNT_MAX 8
+#define GAIN_SET_COUNT_MAX SEQUENCE_COUNT_MAX
+#define SHAPE_FILTER_COUNT_MAX 8
+#define DRC_SET_ID_COUNT_MAX 16
+#define EQ_SET_ID_COUNT_MAX 8
#define LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX 4
-#define FILTER_ELEMENT_COUNT_MAX 16
-#define REAL_ZERO_RADIUS_ONE_COUNT_MAX 14
-#define REAL_ZERO_COUNT_MAX 64
-#define COMPLEX_ZERO_COUNT_MAX 64
-#define REAL_POLE_COUNT_MAX 16
-#define COMPLEX_POLE_COUNT_MAX 16
-#define FIR_ORDER_MAX 128
-#define EQ_NODE_COUNT_MAX 33
-#define EQ_SUBBAND_GAIN_COUNT_MAX 135
-#define UNIQUE_SUBBAND_GAIN_COUNT_MAX 16
-#define FILTER_BLOCK_COUNT_MAX 16
-#define FILTER_ELEMENT_COUNT_MAX 16
-#define UNIQUE_SUBBAND_GAINS_COUNT_MAX 8
-#define EQ_CHANNEL_GROUP_COUNT_MAX 4
-#define EQ_FILTER_BLOCK_COUNT_MAX 4
-#define LOUD_EQ_INSTRUCTIONS_COUNT_MAX 8
-#define EQ_INSTRUCTIONS_COUNT_MAX 8
-#define SELECTED_EQ_SET_COUNT_MAX 2
-#define SUB_EQ_COUNT 2
-
-#define DELAY_MODE_REGULAR_DELAY 0
-#define DELAY_MODE_LOW_DELAY 1
-#define DELAY_MODE_DEFAULT DELAY_MODE_REGULAR_DELAY
-
-#define FEATURE_REQUEST_COUNT_MAX 10
-#define EFFECT_TYPE_REQUEST_COUNT_MAX 10
-
-#define SELECTION_CANDIDATE_COUNT_MAX 32
-
-#define PROC_COMPLETE 1
-#define UNEXPECTED_ERROR 2
-#define PARAM_ERROR 3
-#define EXTERNAL_ERROR 4
-#define ERRORHANDLING 5
-#define BITSTREAM_ERROR 6
-
-#define UNDEFINED_LOUDNESS_VALUE 1000.0f
-#define ID_FOR_BASE_LAYOUT 0x0
-#define ID_FOR_ANY_DOWNMIX 0x7F
-#define ID_FOR_NO_DRC 0x0
-#define ID_FOR_ANY_DRC 0x3F
-#define ID_FOR_ANY_EQ 0x3F
-
-#define LOCATION_MP4_INSTREAM_UNIDRC 0x1
-#define LOCATION_MP4_DYN_RANGE_INFO 0x2
-#define LOCATION_MP4_COMPRESSION_VALUE 0x3
-#define LOCATION_SELECTED LOCATION_MP4_INSTREAM_UNIDRC
-
-#define AUDIO_CODEC_SUBBAND_COUNT_MAX 256
-
-#define SUBBAND_DOMAIN_MODE_OFF 0
-#define SUBBAND_DOMAIN_MODE_QMF64 1
-#define SUBBAND_DOMAIN_MODE_QMF71 2
-#define SUBBAND_DOMAIN_MODE_STFT256 3
-
-#define AUDIO_CODEC_SUBBAND_COUNT_QMF64 64
-#define AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64 64
-#define AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_QMF64 320
-
-#define AUDIO_CODEC_SUBBAND_COUNT_QMF71 71
-#define AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF71 64
-#define AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_QMF71 320+384
-
-#define AUDIO_CODEC_SUBBAND_COUNT_STFT256 256
-#define AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_STFT256 256
-#define AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_STFT256 256
-
-#define MAX_NUM_DOWNMIX_ID_REQUESTS 15
-#define MAX_NUM_DRC_FEATURE_REQUESTS 7
-#define MAX_NUM_DRC_EFFECT_TYPE_REQUESTS 15
+#define FILTER_ELEMENT_COUNT_MAX 16
+#define REAL_ZERO_RADIUS_ONE_COUNT_MAX 14
+#define REAL_ZERO_COUNT_MAX 64
+#define COMPLEX_ZERO_COUNT_MAX 64
+#define REAL_POLE_COUNT_MAX 16
+#define COMPLEX_POLE_COUNT_MAX 16
+#define FIR_ORDER_MAX 128
+#define EQ_NODE_COUNT_MAX 33
+#define EQ_SUBBAND_GAIN_COUNT_MAX 135
+#define UNIQUE_SUBBAND_GAIN_COUNT_MAX 16
+#define FILTER_BLOCK_COUNT_MAX 16
+#define FILTER_ELEMENT_COUNT_MAX 16
+#define UNIQUE_SUBBAND_GAINS_COUNT_MAX 8
+#define EQ_CHANNEL_GROUP_COUNT_MAX 4
+#define EQ_FILTER_BLOCK_COUNT_MAX 4
+#define LOUD_EQ_INSTRUCTIONS_COUNT_MAX 8
+#define EQ_INSTRUCTIONS_COUNT_MAX 8
+#define SELECTED_EQ_SET_COUNT_MAX 2
+#define SUB_EQ_COUNT 2
+
+#define DELAY_MODE_REGULAR_DELAY 0
+#define DELAY_MODE_LOW_DELAY 1
+#define DELAY_MODE_DEFAULT DELAY_MODE_REGULAR_DELAY
+
+#define FEATURE_REQUEST_COUNT_MAX 10
+#define EFFECT_TYPE_REQUEST_COUNT_MAX 10
+
+#define SELECTION_CANDIDATE_COUNT_MAX 32
+
+#define PROC_COMPLETE 1
+#define UNEXPECTED_ERROR 2
+#define PARAM_ERROR 3
+#define EXTERNAL_ERROR 4
+#define ERRORHANDLING 5
+#define BITSTREAM_ERROR 6
+
+#define UNDEFINED_LOUDNESS_VALUE 1000.0f
+#define ID_FOR_BASE_LAYOUT 0x0
+#define ID_FOR_ANY_DOWNMIX 0x7F
+#define ID_FOR_NO_DRC 0x0
+#define ID_FOR_ANY_DRC 0x3F
+#define ID_FOR_ANY_EQ 0x3F
+
+#define LOCATION_MP4_INSTREAM_UNIDRC 0x1
+#define LOCATION_MP4_DYN_RANGE_INFO 0x2
+#define LOCATION_MP4_COMPRESSION_VALUE 0x3
+#define LOCATION_SELECTED LOCATION_MP4_INSTREAM_UNIDRC
+
+#define AUDIO_CODEC_SUBBAND_COUNT_MAX 256
+
+#define SUBBAND_DOMAIN_MODE_OFF 0
+#define SUBBAND_DOMAIN_MODE_QMF64 1
+#define SUBBAND_DOMAIN_MODE_QMF71 2
+#define SUBBAND_DOMAIN_MODE_STFT256 3
+
+#define AUDIO_CODEC_SUBBAND_COUNT_QMF64 64
+#define AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64 64
+#define AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_QMF64 320
+
+#define AUDIO_CODEC_SUBBAND_COUNT_QMF71 71
+#define AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF71 64
+#define AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_QMF71 320 + 384
+
+#define AUDIO_CODEC_SUBBAND_COUNT_STFT256 256
+#define AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_STFT256 256
+#define AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_STFT256 256
+
+#define MAX_NUM_DOWNMIX_ID_REQUESTS 15
+#define MAX_NUM_DRC_FEATURE_REQUESTS 7
+#define MAX_NUM_DRC_EFFECT_TYPE_REQUESTS 15
#define MAX_SIGNATURE_DATA_LENGTH_PLUS_ONE 256
-#define EXT_COUNT_MAX 2
-#define UNIDRCGAINEXT_TERM 0x0
-#define UNIDRCLOUDEXT_TERM 0x0
-#define UNIDRCCONFEXT_TERM 0x0
-#define UNIDRCINTERFACEEXT_TERM 0x0
-
+#define EXT_COUNT_MAX 2
+#define UNIDRCGAINEXT_TERM 0x0
+#define UNIDRCLOUDEXT_TERM 0x0
+#define UNIDRCCONFEXT_TERM 0x0
+#define UNIDRCINTERFACEEXT_TERM 0x0
-#define UNIDRCCONFEXT_PARAM_DRC 0x1
+#define UNIDRCCONFEXT_PARAM_DRC 0x1
#define PARAM_DRC_INSTRUCTIONS_COUNT_MAX 8
-#define PARAM_DRC_INSTANCE_COUNT_MAX 8
+#define PARAM_DRC_INSTANCE_COUNT_MAX 8
-#define PARAM_DRC_TYPE_FF 0x0
+#define PARAM_DRC_TYPE_FF 0x0
#define PARAM_DRC_TYPE_FF_NODE_COUNT_MAX 9
#define PARAM_DRC_TYPE_FF_LEVEL_ESTIM_FRAME_COUNT_MAX 64
-#define PARAM_DRC_TYPE_LIM 0x1
-#define PARAM_DRC_TYPE_LIM_THRESHOLD_DEFAULT (-1.f)
-#define PARAM_DRC_TYPE_LIM_ATTACK_DEFAULT 5
-#define PARAM_DRC_TYPE_LIM_RELEASE_DEFAULT 50
-
-
-#define UNIDRCCONFEXT_V1 0x2
-#define UNIDRCLOUDEXT_EQ 0x1
-#define UNIDRCINTERFACEEXT_EQ 0x1
-
-#define LOUD_EQ_REQUEST_OFF 0x0
-#define LOUD_EQ_REQUEST_LIGHT 0x1
-#define LOUD_EQ_REQUEST_REGULAR 0x2
-#define LOUD_EQ_REQUEST_HEAVY 0x3
+#define PARAM_DRC_TYPE_LIM 0x1
+#define PARAM_DRC_TYPE_LIM_THRESHOLD_DEFAULT (-1.f)
+#define PARAM_DRC_TYPE_LIM_ATTACK_DEFAULT 5
+#define PARAM_DRC_TYPE_LIM_RELEASE_DEFAULT 50
-#define EQ_PURPOSE_EQ_OFF 0
-#define EQ_PURPOSE_DEFAULT (1<<0)
-#define EQ_PURPOSE_LARGE_ROOM (1<<1)
-#define EQ_PURPOSE_SMALL_SPACE (1<<2)
-#define EQ_PURPOSE_AVERAGE_ROOM (1<<3)
-#define EQ_PURPOSE_CAR_CABIN (1<<4)
-#define EQ_PURPOSE_HEADPHONES (1<<5)
-#define EQ_PURPOSE_LATE_NIGHT (1<<6)
+#define UNIDRCCONFEXT_V1 0x2
+#define UNIDRCLOUDEXT_EQ 0x1
+#define UNIDRCINTERFACEEXT_EQ 0x1
+#define LOUD_EQ_REQUEST_OFF 0x0
+#define LOUD_EQ_REQUEST_LIGHT 0x1
+#define LOUD_EQ_REQUEST_REGULAR 0x2
+#define LOUD_EQ_REQUEST_HEAVY 0x3
+#define EQ_PURPOSE_EQ_OFF 0
+#define EQ_PURPOSE_DEFAULT (1 << 0)
+#define EQ_PURPOSE_LARGE_ROOM (1 << 1)
+#define EQ_PURPOSE_SMALL_SPACE (1 << 2)
+#define EQ_PURPOSE_AVERAGE_ROOM (1 << 3)
+#define EQ_PURPOSE_CAR_CABIN (1 << 4)
+#define EQ_PURPOSE_HEADPHONES (1 << 5)
+#define EQ_PURPOSE_LATE_NIGHT (1 << 6)
-#define MAXPACKETLOSSTIME 2.5f
+#define MAXPACKETLOSSTIME 2.5f
-#define SLOPE_FACTOR_DB_TO_LINEAR 0.1151f
+#define SLOPE_FACTOR_DB_TO_LINEAR 0.1151f
#ifndef min
#define min(a, b) ((a) < (b) ? (a) : (b))
@@ -188,31 +182,29 @@ extern "C"
#define bool WORD32
#endif
-typedef struct ia_drc_sel_proc_output_struct
-{
- FLOAT32 output_peak_level_db;
- FLOAT32 loudness_normalization_gain_db;
- FLOAT32 output_loudness;
-
- WORD32 sel_drc_set_ids[SUB_DRC_COUNT];
- WORD32 sel_downmix_ids[SUB_DRC_COUNT];
- WORD32 num_sel_drc_sets;
-
- WORD32 active_downmix_id;
- WORD32 base_channel_count;
- WORD32 target_channel_count;
- WORD32 target_layout;
- WORD32 downmix_matrix_present;
- FLOAT32 downmix_matrix[MAX_CHANNEL_COUNT][MAX_CHANNEL_COUNT];
-
- FLOAT32 boost;
- FLOAT32 compress;
- WORD32 drc_characteristic_target;
-
-
- FLOAT32 mixing_level;
- WORD32 sel_eq_set_ids[SELECTED_EQ_SET_COUNT_MAX];
- WORD32 sel_loud_eq_id;
+typedef struct ia_drc_sel_proc_output_struct {
+ FLOAT32 output_peak_level_db;
+ FLOAT32 loudness_normalization_gain_db;
+ FLOAT32 output_loudness;
+
+ WORD32 sel_drc_set_ids[SUB_DRC_COUNT];
+ WORD32 sel_downmix_ids[SUB_DRC_COUNT];
+ WORD32 num_sel_drc_sets;
+
+ WORD32 active_downmix_id;
+ WORD32 base_channel_count;
+ WORD32 target_channel_count;
+ WORD32 target_layout;
+ WORD32 downmix_matrix_present;
+ FLOAT32 downmix_matrix[MAX_CHANNEL_COUNT][MAX_CHANNEL_COUNT];
+
+ FLOAT32 boost;
+ FLOAT32 compress;
+ WORD32 drc_characteristic_target;
+
+ FLOAT32 mixing_level;
+ WORD32 sel_eq_set_ids[SELECTED_EQ_SET_COUNT_MAX];
+ WORD32 sel_loud_eq_id;
} ia_drc_sel_proc_output_struct;
#ifdef __cplusplus
diff --git a/decoder/drc_src/impd_drc_config_params.h b/decoder/drc_src/impd_drc_config_params.h
index b23ed36..e83385a 100644
--- a/decoder/drc_src/impd_drc_config_params.h
+++ b/decoder/drc_src/impd_drc_config_params.h
@@ -21,25 +21,24 @@
#ifndef IMPD_DRC_CONFIG_PARAMS_H
#define IMPD_DRC_CONFIG_PARAMS_H
-
-#define IA_DRC_DEC_CONFIG_PARAM_PCM_WDSZ 0x0000
-#define IA_DRC_DEC_CONFIG_PARAM_SAMP_FREQ 0x0001
-#define IA_DRC_DEC_CONFIG_PARAM_NUM_CHANNELS 0x0002
-#define IA_DRC_DEC_CONFIG_PARAM_DEC_TYPE 0x0003
-#define IA_DRC_DEC_CONFIG_PARAM_PEAK_LIMITER 0x0004
-#define IA_DRC_DEC_CONFIG_PARAM_CTRL_PARAM 0x0005
-#define IA_DRC_DEC_CONFIG_PARAM_VER_MODE 0x0006
-#define IA_DRC_DEC_CONFIG_PARAM_BITS_FORMAT 0x0007
-#define IA_DRC_DEC_CONFIG_PARAM_INT_PRESENT 0x0008
-#define IA_DRC_DEC_CONFIG_PARAM_DELAY_MODE 0x0009
-#define IA_DRC_DEC_CONFIG_PARAM_GAIN_DELAY 0x000A
-#define IA_DRC_DEC_CONFIG_PARAM_AUDIO_DELAY 0x000B
-#define IA_DRC_DEC_CONFIG_PARAM_CON_DELAY_MODE 0x000C
-#define IA_DRC_DEC_CONFIG_PARAM_ABSO_DELAY_OFF 0x000D
-#define IA_DRC_DEC_CONFIG_PARAM_FRAME_SIZE 0x000E
-#define IA_DRC_DEC_CONFIG_PROC_OUT_PTR 0x000F
-#define IA_DRC_DEC_CONFIG_GAIN_STREAM_FLAG 0x0010
-#define IA_DRC_DEC_CONFIG_DRC_EFFECT_TYPE 0x0011
-#define IA_DRC_DEC_CONFIG_DRC_TARGET_LOUDNESS 0x0012
-#define IA_DRC_DEC_CONFIG_DRC_LOUD_NORM 0x0013
+#define IA_DRC_DEC_CONFIG_PARAM_PCM_WDSZ 0x0000
+#define IA_DRC_DEC_CONFIG_PARAM_SAMP_FREQ 0x0001
+#define IA_DRC_DEC_CONFIG_PARAM_NUM_CHANNELS 0x0002
+#define IA_DRC_DEC_CONFIG_PARAM_DEC_TYPE 0x0003
+#define IA_DRC_DEC_CONFIG_PARAM_PEAK_LIMITER 0x0004
+#define IA_DRC_DEC_CONFIG_PARAM_CTRL_PARAM 0x0005
+#define IA_DRC_DEC_CONFIG_PARAM_VER_MODE 0x0006
+#define IA_DRC_DEC_CONFIG_PARAM_BITS_FORMAT 0x0007
+#define IA_DRC_DEC_CONFIG_PARAM_INT_PRESENT 0x0008
+#define IA_DRC_DEC_CONFIG_PARAM_DELAY_MODE 0x0009
+#define IA_DRC_DEC_CONFIG_PARAM_GAIN_DELAY 0x000A
+#define IA_DRC_DEC_CONFIG_PARAM_AUDIO_DELAY 0x000B
+#define IA_DRC_DEC_CONFIG_PARAM_CON_DELAY_MODE 0x000C
+#define IA_DRC_DEC_CONFIG_PARAM_ABSO_DELAY_OFF 0x000D
+#define IA_DRC_DEC_CONFIG_PARAM_FRAME_SIZE 0x000E
+#define IA_DRC_DEC_CONFIG_PROC_OUT_PTR 0x000F
+#define IA_DRC_DEC_CONFIG_GAIN_STREAM_FLAG 0x0010
+#define IA_DRC_DEC_CONFIG_DRC_EFFECT_TYPE 0x0011
+#define IA_DRC_DEC_CONFIG_DRC_TARGET_LOUDNESS 0x0012
+#define IA_DRC_DEC_CONFIG_DRC_LOUD_NORM 0x0013
#endif
diff --git a/decoder/drc_src/impd_drc_dec.c b/decoder/drc_src/impd_drc_dec.c
index 0e32e46..32da663 100644
--- a/decoder/drc_src/impd_drc_dec.c
+++ b/decoder/drc_src/impd_drc_dec.c
@@ -27,352 +27,341 @@
#include "impd_drc_filter_bank.h"
#include "impd_drc_multi_band.h"
+WORD32 impd_init_drc_params(WORD32 frame_size, WORD32 sample_rate,
+ WORD32 gain_delay_samples, WORD32 delay_mode,
+ WORD32 sub_band_domain_mode,
+ ia_drc_params_struct* ia_drc_params_struct) {
+ WORD32 k;
+ if (frame_size < 1 || frame_size > AUDIO_CODEC_FRAME_SIZE_MAX) {
+ return -1;
+ }
-WORD32 impd_init_drc_params(WORD32 frame_size,
- WORD32 sample_rate,
- WORD32 gain_delay_samples,
- WORD32 delay_mode,
- WORD32 sub_band_domain_mode,
- ia_drc_params_struct* ia_drc_params_struct)
-{
- WORD32 k;
- if (frame_size < 1|| frame_size > AUDIO_CODEC_FRAME_SIZE_MAX)
- {
- return -1;
- }
+ if (sample_rate < 1000) {
+ return -1;
+ }
- if (sample_rate < 1000)
- {
- return -1;
- }
+ ia_drc_params_struct->drc_frame_size = frame_size;
- ia_drc_params_struct->drc_frame_size = frame_size;
+ if (ia_drc_params_struct->drc_frame_size < 0.001f * sample_rate) {
+ return -1;
+ }
- if (ia_drc_params_struct->drc_frame_size < 0.001f * sample_rate)
- {
- return -1;
- }
+ ia_drc_params_struct->sample_rate = sample_rate;
- ia_drc_params_struct->sample_rate = sample_rate;
+ ia_drc_params_struct->delta_tmin_default = impd_get_delta_tmin(sample_rate);
- ia_drc_params_struct->delta_tmin_default = impd_get_delta_tmin(sample_rate);
+ if (ia_drc_params_struct->delta_tmin_default >
+ ia_drc_params_struct->drc_frame_size) {
+ return -1;
+ }
- if (ia_drc_params_struct->delta_tmin_default > ia_drc_params_struct->drc_frame_size)
- {
- return -1;
- }
+ if ((delay_mode != DELAY_MODE_REGULAR_DELAY) &&
+ (delay_mode != DELAY_MODE_LOW_DELAY)) {
+ return -1;
+ }
- if ((delay_mode != DELAY_MODE_REGULAR_DELAY) && (delay_mode != DELAY_MODE_LOW_DELAY))
- {
- return -1;
- }
+ ia_drc_params_struct->delay_mode = delay_mode;
- ia_drc_params_struct->delay_mode = delay_mode;
+ ia_drc_params_struct->drc_set_counter = 0;
+ ia_drc_params_struct->multiband_sel_drc_idx = -1;
- ia_drc_params_struct->drc_set_counter = 0;
- ia_drc_params_struct->multiband_sel_drc_idx = -1;
+ for (k = 0; k < SEL_DRC_COUNT; k++) {
+ ia_drc_params_struct->sel_drc_array[k].drc_instructions_index = -1;
+ ia_drc_params_struct->sel_drc_array[k].dwnmix_instructions_index = -1;
+ ia_drc_params_struct->sel_drc_array[k].drc_coeff_idx = -1;
+ }
- for (k = 0; k < SEL_DRC_COUNT; k++)
- {
- ia_drc_params_struct->sel_drc_array[k].drc_instructions_index = -1;
- ia_drc_params_struct->sel_drc_array[k].dwnmix_instructions_index = -1;
- ia_drc_params_struct->sel_drc_array[k].drc_coeff_idx = -1;
- }
+ if ((gain_delay_samples > MAX_SIGNAL_DELAY) || (gain_delay_samples < 0)) {
+ return -1;
+ } else {
+ ia_drc_params_struct->gain_delay_samples = gain_delay_samples;
+ }
- if ((gain_delay_samples > MAX_SIGNAL_DELAY) || (gain_delay_samples < 0))
- {
- return -1;
- }
- else
- {
- ia_drc_params_struct->gain_delay_samples = gain_delay_samples;
- }
-
- switch (sub_band_domain_mode)
- {
+ switch (sub_band_domain_mode) {
case SUBBAND_DOMAIN_MODE_OFF:
case SUBBAND_DOMAIN_MODE_QMF64:
case SUBBAND_DOMAIN_MODE_QMF71:
case SUBBAND_DOMAIN_MODE_STFT256:
- ia_drc_params_struct->sub_band_domain_mode = sub_band_domain_mode;
- break;
+ ia_drc_params_struct->sub_band_domain_mode = sub_band_domain_mode;
+ break;
default:
- return -1;
- break;
- }
+ return -1;
+ break;
+ }
- ia_drc_params_struct->parametric_drc_delay = 0;
- ia_drc_params_struct->eq_delay = 0;
+ ia_drc_params_struct->parametric_drc_delay = 0;
+ ia_drc_params_struct->eq_delay = 0;
- return 0;
+ return 0;
}
-
-WORD32 impd_select_drc_coefficients(ia_drc_config* drc_config,
- ia_uni_drc_coeffs_struct** drc_coefficients_drc,
- WORD32* drc_coefficients_selected)
-{
- WORD32 i;
- WORD32 cof1 = -1;
- WORD32 cof0 = -1;
- for(i=0; i<drc_config->drc_coefficients_drc_count; i++)
- {
- if (drc_config->str_p_loc_drc_coefficients_uni_drc[i].drc_location == 1)
- {
- if (drc_config->str_p_loc_drc_coefficients_uni_drc[i].version == 0)
- {
- cof0 = i;
- *drc_coefficients_selected = cof0;
- }
- else
- {
- cof1 = i;
- *drc_coefficients_selected = cof1;
- }
- }
- }
-
-
- if (cof1 >= 0) {
- *drc_coefficients_drc = &(drc_config->str_p_loc_drc_coefficients_uni_drc[cof1]);
+WORD32 impd_select_drc_coefficients(
+ ia_drc_config* drc_config, ia_uni_drc_coeffs_struct** drc_coefficients_drc,
+ WORD32* drc_coefficients_selected) {
+ WORD32 i;
+ WORD32 cof1 = -1;
+ WORD32 cof0 = -1;
+ for (i = 0; i < drc_config->drc_coefficients_drc_count; i++) {
+ if (drc_config->str_p_loc_drc_coefficients_uni_drc[i].drc_location == 1) {
+ if (drc_config->str_p_loc_drc_coefficients_uni_drc[i].version == 0) {
+ cof0 = i;
+ *drc_coefficients_selected = cof0;
+ } else {
+ cof1 = i;
+ *drc_coefficients_selected = cof1;
+ }
}
- else if (cof0 >= 0) {
- *drc_coefficients_drc = &(drc_config->str_p_loc_drc_coefficients_uni_drc[cof0]);
- }
- else {
- *drc_coefficients_drc = NULL;
- }
-
-
- return 0;
+ }
+
+ if (cof1 >= 0) {
+ *drc_coefficients_drc =
+ &(drc_config->str_p_loc_drc_coefficients_uni_drc[cof1]);
+ } else if (cof0 >= 0) {
+ *drc_coefficients_drc =
+ &(drc_config->str_p_loc_drc_coefficients_uni_drc[cof0]);
+ } else {
+ *drc_coefficients_drc = NULL;
+ }
+
+ return 0;
}
-
-WORD32 impd_init_selected_drc_set(ia_drc_config* drc_config,
- ia_drc_params_struct* ia_drc_params_struct,
- ia_parametric_drc_params_struct* p_parametric_drc_params,
- WORD32 audio_num_chan,
- WORD32 drc_set_id_selected,
- WORD32 downmix_id_selected,
- ia_filter_banks_struct* ia_filter_banks_struct,
- ia_overlap_params_struct* pstr_overlap_params
-
- , shape_filter_block* shape_filter_block
- )
-{
- WORD32 g, n, c, err = 0;
- WORD32 channel_count = 0;
- WORD32 i;
-
- ia_drc_instructions_struct* drc_instructions_uni_drc = NULL;
- ia_uni_drc_coeffs_struct* drc_coefficients_uni_drc = NULL;
- WORD32 selected_drc_is_multiband = 0;
- WORD32 drc_instructions_selected = -1;
- WORD32 downmix_instructions_selected = -1;
- WORD32 drc_coefficients_selected = -1;
- p_parametric_drc_params->parametric_drc_instance_count = 0;
-
- if (drc_config->drc_coefficients_drc_count && drc_config->str_p_loc_drc_coefficients_uni_drc->drc_frame_size_present)
- {
- if (drc_config->str_p_loc_drc_coefficients_uni_drc->drc_frame_size != ia_drc_params_struct->drc_frame_size)
- {
- return -1;
- }
- }
-
-
- for(n=0; n<drc_config->drc_instructions_count_plus; n++)
- {
- if (drc_config->str_drc_instruction_str[n].drc_set_id == drc_set_id_selected)
- break;
- }
- if (n == drc_config->drc_instructions_count_plus)
- {
- return -1;
+WORD32 impd_init_selected_drc_set(
+ ia_drc_config* drc_config, ia_drc_params_struct* ia_drc_params_struct,
+ ia_parametric_drc_params_struct* p_parametric_drc_params,
+ WORD32 audio_num_chan, WORD32 drc_set_id_selected,
+ WORD32 downmix_id_selected, ia_filter_banks_struct* ia_filter_banks_struct,
+ ia_overlap_params_struct* pstr_overlap_params
+
+ ,
+ shape_filter_block* shape_filter_block) {
+ WORD32 g, n, c, err = 0;
+ WORD32 channel_count = 0;
+ WORD32 i;
+
+ ia_drc_instructions_struct* drc_instructions_uni_drc = NULL;
+ ia_uni_drc_coeffs_struct* drc_coefficients_uni_drc = NULL;
+ WORD32 selected_drc_is_multiband = 0;
+ WORD32 drc_instructions_selected = -1;
+ WORD32 downmix_instructions_selected = -1;
+ WORD32 drc_coefficients_selected = -1;
+ p_parametric_drc_params->parametric_drc_instance_count = 0;
+
+ if (drc_config->drc_coefficients_drc_count &&
+ drc_config->str_p_loc_drc_coefficients_uni_drc->drc_frame_size_present) {
+ if (drc_config->str_p_loc_drc_coefficients_uni_drc->drc_frame_size !=
+ ia_drc_params_struct->drc_frame_size) {
+ return -1;
}
- drc_instructions_selected = n;
- drc_instructions_uni_drc = &(drc_config->str_drc_instruction_str[drc_instructions_selected]);
-
- if (downmix_id_selected == ID_FOR_BASE_LAYOUT)
- {
- channel_count = drc_config->channel_layout.base_channel_count;
+ }
+
+ for (n = 0; n < drc_config->drc_instructions_count_plus; n++) {
+ if (drc_config->str_drc_instruction_str[n].drc_set_id ==
+ drc_set_id_selected)
+ break;
+ }
+ if (n == drc_config->drc_instructions_count_plus) {
+ return -1;
+ }
+ drc_instructions_selected = n;
+ drc_instructions_uni_drc =
+ &(drc_config->str_drc_instruction_str[drc_instructions_selected]);
+
+ if (downmix_id_selected == ID_FOR_BASE_LAYOUT) {
+ channel_count = drc_config->channel_layout.base_channel_count;
+ } else if (downmix_id_selected == ID_FOR_ANY_DOWNMIX) {
+ channel_count = audio_num_chan;
+ } else {
+ for (n = 0; n < drc_config->dwnmix_instructions_count; n++) {
+ if (drc_config->dwnmix_instructions[n].downmix_id == downmix_id_selected)
+ break;
}
- else if (downmix_id_selected == ID_FOR_ANY_DOWNMIX)
- {
- channel_count = audio_num_chan;
+ if (n == drc_config->dwnmix_instructions_count) {
+ return (UNEXPECTED_ERROR);
}
- else
- {
- for(n=0; n<drc_config->dwnmix_instructions_count; n++)
- {
- if (drc_config->dwnmix_instructions[n].downmix_id == downmix_id_selected)
- break;
- }
- if (n == drc_config->dwnmix_instructions_count)
- {
- return (UNEXPECTED_ERROR);
- }
- channel_count = drc_config->dwnmix_instructions[n].target_channel_count;
-
- downmix_instructions_selected = n;
+ channel_count = drc_config->dwnmix_instructions[n].target_channel_count;
+
+ downmix_instructions_selected = n;
+ }
+ drc_instructions_uni_drc->audio_num_chan = channel_count;
+
+ if (drc_instructions_uni_drc->drc_set_id <= 0) {
+ drc_coefficients_selected = 0;
+ } else {
+ err = impd_select_drc_coefficients(drc_config, &drc_coefficients_uni_drc,
+ &drc_coefficients_selected);
+ }
+
+ ia_drc_params_struct->sel_drc_array[ia_drc_params_struct->drc_set_counter]
+ .drc_instructions_index = drc_instructions_selected;
+ ia_drc_params_struct->sel_drc_array[ia_drc_params_struct->drc_set_counter]
+ .dwnmix_instructions_index = downmix_instructions_selected;
+ ia_drc_params_struct->sel_drc_array[ia_drc_params_struct->drc_set_counter]
+ .drc_coeff_idx = drc_coefficients_selected;
+
+ if ((drc_instructions_uni_drc->downmix_id[0] == ID_FOR_ANY_DOWNMIX) ||
+ (drc_instructions_uni_drc->dwnmix_id_count > 1)) {
+ WORD32 idx = drc_instructions_uni_drc->gain_set_index[0];
+ for (c = 0; c < drc_instructions_uni_drc->audio_num_chan; c++) {
+ drc_instructions_uni_drc->channel_group_of_ch[c] = (idx >= 0) ? 0 : -1;
}
- drc_instructions_uni_drc->audio_num_chan = channel_count;
-
- if (drc_instructions_uni_drc->drc_set_id <= 0)
- {
- drc_coefficients_selected = 0;
+ }
+
+ for (g = 0; g < drc_instructions_uni_drc->num_drc_ch_groups; g++) {
+ drc_instructions_uni_drc->num_chan_per_ch_group[g] = 0;
+ for (c = 0; c < drc_instructions_uni_drc->audio_num_chan; c++) {
+ if (drc_instructions_uni_drc->channel_group_of_ch[c] == g) {
+ drc_instructions_uni_drc->num_chan_per_ch_group[g]++;
+ }
}
- else
- {
- err = impd_select_drc_coefficients(drc_config, &drc_coefficients_uni_drc, &drc_coefficients_selected);
+ }
+
+ if (drc_instructions_uni_drc->drc_set_effect &
+ (EFFECT_BIT_DUCK_OTHER | EFFECT_BIT_DUCK_SELF)) {
+ drc_instructions_uni_drc->multiband_audio_sig_count =
+ drc_instructions_uni_drc->audio_num_chan;
+ } else {
+ drc_instructions_uni_drc->multiband_audio_sig_count = 0;
+ for (c = 0; c < drc_instructions_uni_drc->audio_num_chan; c++) {
+ g = drc_instructions_uni_drc->channel_group_of_ch[c];
+ if (g < 0) {
+ drc_instructions_uni_drc->multiband_audio_sig_count++;
+ } else {
+ drc_instructions_uni_drc->multiband_audio_sig_count +=
+ drc_instructions_uni_drc->band_count_of_ch_group[g];
+ }
}
+ }
- ia_drc_params_struct->sel_drc_array[ia_drc_params_struct->drc_set_counter].drc_instructions_index = drc_instructions_selected;
- ia_drc_params_struct->sel_drc_array[ia_drc_params_struct->drc_set_counter].dwnmix_instructions_index = downmix_instructions_selected;
- ia_drc_params_struct->sel_drc_array[ia_drc_params_struct->drc_set_counter].drc_coeff_idx = drc_coefficients_selected;
-
- if ((drc_instructions_uni_drc->downmix_id[0] == ID_FOR_ANY_DOWNMIX) || (drc_instructions_uni_drc->dwnmix_id_count > 1))
- {
- WORD32 idx = drc_instructions_uni_drc->gain_set_index[0];
- for (c=0; c<drc_instructions_uni_drc->audio_num_chan; c++)
- {
- drc_instructions_uni_drc->channel_group_of_ch[c] = (idx >= 0) ? 0 : -1;
- }
+ for (g = 0; g < drc_instructions_uni_drc->num_drc_ch_groups; g++) {
+ if (g == 0) {
+ drc_instructions_uni_drc->parametric_drc_look_ahead_samples_max = 0;
}
-
- for (g=0; g<drc_instructions_uni_drc->num_drc_ch_groups; g++) {
- drc_instructions_uni_drc->num_chan_per_ch_group[g] = 0;
- for (c=0; c<drc_instructions_uni_drc->audio_num_chan; c++) {
- if (drc_instructions_uni_drc->channel_group_of_ch[c] == g) {
- drc_instructions_uni_drc->num_chan_per_ch_group[g]++;
- }
+ if (drc_instructions_uni_drc->ch_group_parametric_drc_flag[g] == 0) {
+ if (drc_instructions_uni_drc->band_count_of_ch_group[g] > 1) {
+ if (ia_drc_params_struct->multiband_sel_drc_idx != -1) {
+ return (UNEXPECTED_ERROR);
}
- }
-
- if (drc_instructions_uni_drc->drc_set_effect & (EFFECT_BIT_DUCK_OTHER | EFFECT_BIT_DUCK_SELF)) {
- drc_instructions_uni_drc->multiband_audio_sig_count = drc_instructions_uni_drc->audio_num_chan;
+ selected_drc_is_multiband = 1;
+ }
} else {
- drc_instructions_uni_drc->multiband_audio_sig_count = 0;
- for (c=0; c<drc_instructions_uni_drc->audio_num_chan; c++) {
- g = drc_instructions_uni_drc->channel_group_of_ch[c];
- if (g < 0) {
- drc_instructions_uni_drc->multiband_audio_sig_count++;
- } else {
- drc_instructions_uni_drc->multiband_audio_sig_count += drc_instructions_uni_drc->band_count_of_ch_group[g];
- }
+ WORD32 gain_set_index =
+ drc_instructions_uni_drc->gain_set_idx_of_ch_group_parametric_drc[g];
+ WORD32 parametric_drc_id =
+ drc_config->str_drc_config_ext.str_drc_coeff_param_drc
+ .str_parametric_drc_gain_set_params[gain_set_index]
+ .parametric_drc_id;
+ WORD32 parametric_drc_look_ahead_samples = 0;
+ ia_parametric_drc_instructions_struct* str_parametric_drc_instructions;
+
+ for (i = 0;
+ i < drc_config->str_drc_config_ext.parametric_drc_instructions_count;
+ i++) {
+ if (parametric_drc_id ==
+ drc_config->str_drc_config_ext.str_parametric_drc_instructions[i]
+ .parametric_drc_id)
+ break;
+ }
+ if (i ==
+ drc_config->str_drc_config_ext.parametric_drc_instructions_count) {
+ return (UNEXPECTED_ERROR);
+ }
+ str_parametric_drc_instructions =
+ &drc_config->str_drc_config_ext.str_parametric_drc_instructions[i];
+
+ p_parametric_drc_params->parametric_drc_idx
+ [p_parametric_drc_params->parametric_drc_instance_count] = i;
+ p_parametric_drc_params->gain_set_index
+ [p_parametric_drc_params->parametric_drc_instance_count] =
+ gain_set_index;
+ if (drc_instructions_uni_drc->drc_apply_to_dwnmix == 0) {
+ p_parametric_drc_params->dwnmix_id_from_drc_instructions
+ [p_parametric_drc_params->parametric_drc_instance_count] =
+ ID_FOR_BASE_LAYOUT;
+ } else {
+ if (drc_instructions_uni_drc->dwnmix_id_count > 1) {
+ p_parametric_drc_params->dwnmix_id_from_drc_instructions
+ [p_parametric_drc_params->parametric_drc_instance_count] =
+ ID_FOR_ANY_DOWNMIX;
+ } else {
+ p_parametric_drc_params->dwnmix_id_from_drc_instructions
+ [p_parametric_drc_params->parametric_drc_instance_count] =
+ drc_instructions_uni_drc->downmix_id[0];
}
- }
-
- for (g=0; g<drc_instructions_uni_drc->num_drc_ch_groups; g++)
- {
- if (g==0) {
- drc_instructions_uni_drc->parametric_drc_look_ahead_samples_max = 0;
+ }
+ p_parametric_drc_params->audio_num_chan = channel_count;
+ for (i = 0; i < p_parametric_drc_params->audio_num_chan; i++) {
+ if (drc_instructions_uni_drc->channel_group_of_ch[i] == g) {
+ p_parametric_drc_params->channel_map
+ [p_parametric_drc_params->parametric_drc_instance_count][i] = 1;
+ } else {
+ p_parametric_drc_params->channel_map
+ [p_parametric_drc_params->parametric_drc_instance_count][i] = 0;
}
- if (drc_instructions_uni_drc->ch_group_parametric_drc_flag[g] == 0) {
- if (drc_instructions_uni_drc->band_count_of_ch_group[g] > 1)
- {
- if (ia_drc_params_struct->multiband_sel_drc_idx != -1)
- {
- return (UNEXPECTED_ERROR);
- }
- selected_drc_is_multiband = 1;
- }
+ }
+ drc_instructions_uni_drc->parametric_drc_look_ahead_samples[g] = 0;
+ if (str_parametric_drc_instructions->parametric_drc_look_ahead_flag) {
+ parametric_drc_look_ahead_samples = (WORD32)(
+ (FLOAT32)
+ str_parametric_drc_instructions->parametric_drc_look_ahead *
+ (FLOAT32)p_parametric_drc_params->sampling_rate * 0.001f);
+ } else {
+ if (str_parametric_drc_instructions->parametric_drc_type ==
+ PARAM_DRC_TYPE_FF) {
+ parametric_drc_look_ahead_samples = (WORD32)(
+ 10.0f * (FLOAT32)p_parametric_drc_params->sampling_rate * 0.001f);
+ } else if (str_parametric_drc_instructions->parametric_drc_type ==
+ PARAM_DRC_TYPE_LIM) {
+ parametric_drc_look_ahead_samples = (WORD32)(
+ 5.0f * (FLOAT32)p_parametric_drc_params->sampling_rate * 0.001f);
} else {
- WORD32 gain_set_index = drc_instructions_uni_drc->gain_set_idx_of_ch_group_parametric_drc[g];
- WORD32 parametric_drc_id = drc_config->str_drc_config_ext.str_drc_coeff_param_drc.str_parametric_drc_gain_set_params[gain_set_index].parametric_drc_id;
- WORD32 parametric_drc_look_ahead_samples = 0;
- ia_parametric_drc_instructions_struct* str_parametric_drc_instructions;
-
- for(i=0; i<drc_config->str_drc_config_ext.parametric_drc_instructions_count; i++)
- {
- if (parametric_drc_id == drc_config->str_drc_config_ext.str_parametric_drc_instructions[i].parametric_drc_id) break;
- }
- if (i == drc_config->str_drc_config_ext.parametric_drc_instructions_count)
- {
- return (UNEXPECTED_ERROR);
- }
- str_parametric_drc_instructions = &drc_config->str_drc_config_ext.str_parametric_drc_instructions[i];
-
- p_parametric_drc_params->parametric_drc_idx[p_parametric_drc_params->parametric_drc_instance_count] = i;
- p_parametric_drc_params->gain_set_index[p_parametric_drc_params->parametric_drc_instance_count] = gain_set_index;
- if (drc_instructions_uni_drc->drc_apply_to_dwnmix == 0) {
- p_parametric_drc_params->dwnmix_id_from_drc_instructions[p_parametric_drc_params->parametric_drc_instance_count] = ID_FOR_BASE_LAYOUT;
- } else {
- if (drc_instructions_uni_drc->dwnmix_id_count > 1) {
- p_parametric_drc_params->dwnmix_id_from_drc_instructions[p_parametric_drc_params->parametric_drc_instance_count] = ID_FOR_ANY_DOWNMIX;
- } else {
- p_parametric_drc_params->dwnmix_id_from_drc_instructions[p_parametric_drc_params->parametric_drc_instance_count] = drc_instructions_uni_drc->downmix_id[0];
- }
- }
- p_parametric_drc_params->audio_num_chan = channel_count;
- for (i=0; i<p_parametric_drc_params->audio_num_chan;i++) {
- if (drc_instructions_uni_drc->channel_group_of_ch[i] == g) {
- p_parametric_drc_params->channel_map[p_parametric_drc_params->parametric_drc_instance_count][i] = 1;
- } else {
- p_parametric_drc_params->channel_map[p_parametric_drc_params->parametric_drc_instance_count][i] = 0;
- }
- }
- drc_instructions_uni_drc->parametric_drc_look_ahead_samples[g] = 0;
- if (str_parametric_drc_instructions->parametric_drc_look_ahead_flag) {
- parametric_drc_look_ahead_samples = (WORD32)((FLOAT32)str_parametric_drc_instructions->parametric_drc_look_ahead*(FLOAT32)p_parametric_drc_params->sampling_rate*0.001f);
- } else {
- if (str_parametric_drc_instructions->parametric_drc_type == PARAM_DRC_TYPE_FF)
- {
- parametric_drc_look_ahead_samples = (WORD32)(10.0f*(FLOAT32)p_parametric_drc_params->sampling_rate*0.001f);
- }
- else if (str_parametric_drc_instructions->parametric_drc_type == PARAM_DRC_TYPE_LIM)
- {
- parametric_drc_look_ahead_samples = (WORD32)(5.0f*(FLOAT32)p_parametric_drc_params->sampling_rate*0.001f);
- } else
- {
- return (UNEXPECTED_ERROR);
- }
- }
- drc_instructions_uni_drc->parametric_drc_look_ahead_samples[g] = parametric_drc_look_ahead_samples;
- if (drc_instructions_uni_drc->parametric_drc_look_ahead_samples_max < drc_instructions_uni_drc->parametric_drc_look_ahead_samples[g])
- {
- drc_instructions_uni_drc->parametric_drc_look_ahead_samples_max = drc_instructions_uni_drc->parametric_drc_look_ahead_samples[g];
- }
- p_parametric_drc_params->parametric_drc_instance_count += 1;
- selected_drc_is_multiband = 0;
+ return (UNEXPECTED_ERROR);
}
+ }
+ drc_instructions_uni_drc->parametric_drc_look_ahead_samples[g] =
+ parametric_drc_look_ahead_samples;
+ if (drc_instructions_uni_drc->parametric_drc_look_ahead_samples_max <
+ drc_instructions_uni_drc->parametric_drc_look_ahead_samples[g]) {
+ drc_instructions_uni_drc->parametric_drc_look_ahead_samples_max =
+ drc_instructions_uni_drc->parametric_drc_look_ahead_samples[g];
+ }
+ p_parametric_drc_params->parametric_drc_instance_count += 1;
+ selected_drc_is_multiband = 0;
}
- ia_drc_params_struct->parametric_drc_delay += drc_instructions_uni_drc->parametric_drc_look_ahead_samples_max;
-
- if (selected_drc_is_multiband == 1)
- {
- ia_drc_params_struct->multiband_sel_drc_idx = ia_drc_params_struct->drc_set_counter;
- err = impd_init_all_filter_banks(drc_coefficients_uni_drc,
- &(drc_config->str_drc_instruction_str[drc_instructions_selected]),
- ia_filter_banks_struct);
- if (err)
- return (err);
-
- err = impd_init_overlap_weight (drc_coefficients_uni_drc,
- &(drc_config->str_drc_instruction_str[drc_instructions_selected]),
- ia_drc_params_struct->sub_band_domain_mode,
- pstr_overlap_params);
- if (err)
- return (err);
- }
- else
- {
- ia_gain_modifiers_struct* gain_modifiers = drc_config->str_drc_instruction_str->str_gain_modifiers_of_ch_group;
- for (g=0; g<drc_instructions_uni_drc->num_drc_ch_groups; g++)
- {
- if (gain_modifiers[g].shape_filter_flag == 1)
- {
- impd_shape_filt_block_init(&drc_coefficients_uni_drc->str_shape_filter_block_params[gain_modifiers[g].shape_filter_idx],
- &shape_filter_block[g]);
- }
- else
- {
- shape_filter_block[g].shape_flter_block_flag = 0;
- }
- }
+ }
+ ia_drc_params_struct->parametric_drc_delay +=
+ drc_instructions_uni_drc->parametric_drc_look_ahead_samples_max;
+
+ if (selected_drc_is_multiband == 1) {
+ ia_drc_params_struct->multiband_sel_drc_idx =
+ ia_drc_params_struct->drc_set_counter;
+ err = impd_init_all_filter_banks(
+ drc_coefficients_uni_drc,
+ &(drc_config->str_drc_instruction_str[drc_instructions_selected]),
+ ia_filter_banks_struct);
+ if (err) return (err);
+
+ err = impd_init_overlap_weight(
+ drc_coefficients_uni_drc,
+ &(drc_config->str_drc_instruction_str[drc_instructions_selected]),
+ ia_drc_params_struct->sub_band_domain_mode, pstr_overlap_params);
+ if (err) return (err);
+ } else {
+ ia_gain_modifiers_struct* gain_modifiers =
+ drc_config->str_drc_instruction_str->str_gain_modifiers_of_ch_group;
+ for (g = 0; g < drc_instructions_uni_drc->num_drc_ch_groups; g++) {
+ if (gain_modifiers[g].shape_filter_flag == 1) {
+ impd_shape_filt_block_init(
+ &drc_coefficients_uni_drc->str_shape_filter_block_params
+ [gain_modifiers[g].shape_filter_idx],
+ &shape_filter_block[g]);
+ } else {
+ shape_filter_block[g].shape_flter_block_flag = 0;
+ }
}
+ }
- ia_drc_params_struct->drc_set_counter++;
+ ia_drc_params_struct->drc_set_counter++;
- return (0);
+ return (0);
}
diff --git a/decoder/drc_src/impd_drc_dec.h b/decoder/drc_src/impd_drc_dec.h
index 5e93e4b..dbe0912 100644
--- a/decoder/drc_src/impd_drc_dec.h
+++ b/decoder/drc_src/impd_drc_dec.h
@@ -20,35 +20,28 @@
#ifndef IMPD_DRC_DEC_H
#define IMPD_DRC_DEC_H
-WORD32 impd_init_drc_params(WORD32 frame_size,
- WORD32 sample_rate,
- WORD32 gain_delay_samples,
- WORD32 delay_mode,
- WORD32 sub_band_domain_mode,
- ia_drc_params_struct* ia_drc_params_struct);
-
-
-WORD32 impd_init_selected_drc_set(ia_drc_config* drc_config,
- ia_drc_params_struct* ia_drc_params_struct,
- ia_parametric_drc_params_struct* p_parametricdrc_params,
- WORD32 audio_num_chan,
- WORD32 drc_set_id_selected,
- WORD32 downmix_id_selected,
- ia_filter_banks_struct* ia_filter_banks_struct,
- ia_overlap_params_struct* pstr_overlap_params
-
- , shape_filter_block* shape_filter_block
- );
-
-WORD32 impd_apply_gains_and_add(ia_drc_instructions_struct* pstr_drc_instruction_arr,
- const WORD32 drc_instructions_index,
- ia_drc_params_struct* ia_drc_params_struct,
- ia_gain_buffer_struct* pstr_gain_buf,
- shape_filter_block shape_filter_block[],
- FLOAT32* deinterleaved_audio[],
-
- FLOAT32* channel_audio[],
- WORD32 impd_apply_gains);
-
+WORD32 impd_init_drc_params(WORD32 frame_size, WORD32 sample_rate,
+ WORD32 gain_delay_samples, WORD32 delay_mode,
+ WORD32 sub_band_domain_mode,
+ ia_drc_params_struct* ia_drc_params_struct);
+
+WORD32 impd_init_selected_drc_set(
+ ia_drc_config* drc_config, ia_drc_params_struct* ia_drc_params_struct,
+ ia_parametric_drc_params_struct* p_parametricdrc_params,
+ WORD32 audio_num_chan, WORD32 drc_set_id_selected,
+ WORD32 downmix_id_selected, ia_filter_banks_struct* ia_filter_banks_struct,
+ ia_overlap_params_struct* pstr_overlap_params
+
+ ,
+ shape_filter_block* shape_filter_block);
+
+WORD32 impd_apply_gains_and_add(
+ ia_drc_instructions_struct* pstr_drc_instruction_arr,
+ const WORD32 drc_instructions_index,
+ ia_drc_params_struct* ia_drc_params_struct,
+ ia_gain_buffer_struct* pstr_gain_buf,
+ shape_filter_block shape_filter_block[], FLOAT32* deinterleaved_audio[],
+
+ FLOAT32* channel_audio[], WORD32 impd_apply_gains);
#endif
diff --git a/decoder/drc_src/impd_drc_definitions.h b/decoder/drc_src/impd_drc_definitions.h
index f1dd0bc..1f823e3 100644
--- a/decoder/drc_src/impd_drc_definitions.h
+++ b/decoder/drc_src/impd_drc_definitions.h
@@ -18,21 +18,17 @@
* Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
*/
-
#ifndef IMPD_DRC_DEFINITIONS_H
#define IMPD_DRC_DEFINITIONS_H
+#define LIBNAME "IA_DRC"
+#define LIB_APIVERSION 1
+#define IA_DRC_PERSIST_IDX (0)
+#define IA_DRC_SCRATCH_IDX (1)
+#define IA_DRC_INPUT_IDX (2)
+#define IA_DRC_OUTPUT_IDX (3)
-#define LIBNAME "IA_DRC"
-#define LIB_APIVERSION 1
-
-
-#define IA_DRC_PERSIST_IDX (0)
-#define IA_DRC_SCRATCH_IDX (1)
-#define IA_DRC_INPUT_IDX (2)
-#define IA_DRC_OUTPUT_IDX (3)
-
-#define FRAME_SIZE 512
+#define FRAME_SIZE 512
#endif
diff --git a/decoder/drc_src/impd_drc_dynamic_payload.c b/decoder/drc_src/impd_drc_dynamic_payload.c
index 0ac55c0..70fa829 100644
--- a/decoder/drc_src/impd_drc_dynamic_payload.c
+++ b/decoder/drc_src/impd_drc_dynamic_payload.c
@@ -29,1499 +29,1310 @@
#include "impd_drc_filter_bank.h"
#include "impd_drc_rom.h"
-WORD32 impd_parse_loud_eq_instructions(ia_bit_buf_struct* it_bit_buff,
- ia_loud_eq_instructions_struct* loud_eq_instructions);
+WORD32 impd_parse_loud_eq_instructions(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_loud_eq_instructions_struct* loud_eq_instructions);
WORD32 impd_parse_eq_coefficients(ia_bit_buf_struct* it_bit_buff,
ia_eq_coeff_struct* str_eq_coeff);
-WORD32 impd_parse_eq_instructions(ia_bit_buf_struct* it_bit_buff,
- ia_drc_config* drc_config,
- ia_eq_instructions_struct* str_eq_instructions);
+WORD32 impd_parse_eq_instructions(
+ ia_bit_buf_struct* it_bit_buff, ia_drc_config* drc_config,
+ ia_eq_instructions_struct* str_eq_instructions);
WORD32 impd_dec_initial_gain(ia_bit_buf_struct* it_bit_buff,
const WORD32 gain_coding_profile,
- FLOAT32* initial_gain)
-{
- WORD32 sign, magn,bit_2_extract;
- switch (gain_coding_profile)
- {
+ FLOAT32* initial_gain) {
+ WORD32 sign, magn, bit_2_extract;
+ switch (gain_coding_profile) {
case GAIN_CODING_PROFILE_REGULAR:
- sign = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- magn = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- *initial_gain = magn * 0.125f;
- if (sign) *initial_gain = - *initial_gain;
- break;
+ sign = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ magn = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ *initial_gain = magn * 0.125f;
+ if (sign) *initial_gain = -*initial_gain;
+ break;
case GAIN_CODING_PROFILE_FADING:
case GAIN_CODING_PROFILE_CLIPPING:
- bit_2_extract= (gain_coding_profile==GAIN_CODING_PROFILE_FADING )?10:8;
- sign = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (sign==0) *initial_gain = 0.0f;
- else
- {
- magn = impd_read_bits_buf(it_bit_buff, bit_2_extract);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- *initial_gain = - (magn + 1) * 0.125f;
- }
- break;
+ bit_2_extract =
+ (gain_coding_profile == GAIN_CODING_PROFILE_FADING) ? 10 : 8;
+ sign = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (sign == 0)
+ *initial_gain = 0.0f;
+ else {
+ magn = impd_read_bits_buf(it_bit_buff, bit_2_extract);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ *initial_gain = -(magn + 1) * 0.125f;
+ }
+ break;
case GAIN_CODING_PROFILE_CONSTANT:
- break;
+ break;
default:
- return(UNEXPECTED_ERROR);
- }
- return (0);
+ return (UNEXPECTED_ERROR);
+ }
+ return (0);
}
-WORD32 impd_dec_gains(ia_bit_buf_struct* it_bit_buff,
- WORD32 no_nodes,
- WORD32 gain_coding_profile,
- ia_node_struct* str_node)
-{
- WORD32 err = 0, k, e, m;
- WORD32 bit;
- WORD32 num_bits_read;
- WORD32 code;
- WORD32 code_found;
- FLOAT32 drc_gain_delta = 0;
- const ia_delta_gain_code_table_struct *ptr_delta_gain_code_table;
- WORD32 no_delta_gain_entries;
-
- err = impd_dec_initial_gain(it_bit_buff, gain_coding_profile, &(str_node[0].loc_db_gain));
- if (err) return(err);
-
- impd_get_delta_gain_code_tbl(gain_coding_profile, &ptr_delta_gain_code_table, &no_delta_gain_entries);
- for (k=1; k<no_nodes; k++)
- {
- num_bits_read = 0;
- code = 0;
- code_found = 0;
- e = 0;
- while ((e < no_delta_gain_entries) && (!code_found))
- {
- for (m=0; m<ptr_delta_gain_code_table[e].size - num_bits_read; m++)
- {
- bit = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- code = (code << 1) + bit;
- num_bits_read++;
- }
- while (num_bits_read == ptr_delta_gain_code_table[e].size)
- {
- if (code == ptr_delta_gain_code_table[e].code)
- {
- drc_gain_delta = ptr_delta_gain_code_table[e].value;
- code_found = 1;
- break;
- }
- e++;
- }
- }
- if (code_found == 0)
- {
- return (UNEXPECTED_ERROR);
+WORD32 impd_dec_gains(ia_bit_buf_struct* it_bit_buff, WORD32 no_nodes,
+ WORD32 gain_coding_profile, ia_node_struct* str_node) {
+ WORD32 err = 0, k, e, m;
+ WORD32 bit;
+ WORD32 num_bits_read;
+ WORD32 code;
+ WORD32 code_found;
+ FLOAT32 drc_gain_delta = 0;
+ const ia_delta_gain_code_table_struct* ptr_delta_gain_code_table;
+ WORD32 no_delta_gain_entries;
+
+ err = impd_dec_initial_gain(it_bit_buff, gain_coding_profile,
+ &(str_node[0].loc_db_gain));
+ if (err) return (err);
+
+ impd_get_delta_gain_code_tbl(gain_coding_profile, &ptr_delta_gain_code_table,
+ &no_delta_gain_entries);
+ for (k = 1; k < no_nodes; k++) {
+ num_bits_read = 0;
+ code = 0;
+ code_found = 0;
+ e = 0;
+ while ((e < no_delta_gain_entries) && (!code_found)) {
+ for (m = 0; m < ptr_delta_gain_code_table[e].size - num_bits_read; m++) {
+ bit = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ code = (code << 1) + bit;
+ num_bits_read++;
+ }
+ while (num_bits_read == ptr_delta_gain_code_table[e].size) {
+ if (code == ptr_delta_gain_code_table[e].code) {
+ drc_gain_delta = ptr_delta_gain_code_table[e].value;
+ code_found = 1;
+ break;
}
- str_node[k].loc_db_gain = str_node[k-1].loc_db_gain + drc_gain_delta;
+ e++;
+ }
}
- return (0);
+ if (code_found == 0) {
+ return (UNEXPECTED_ERROR);
+ }
+ str_node[k].loc_db_gain = str_node[k - 1].loc_db_gain + drc_gain_delta;
+ }
+ return (0);
}
-WORD32 impd_dec_slopes(ia_bit_buf_struct* it_bit_buff,
- WORD32* no_nodes,
+WORD32 impd_dec_slopes(ia_bit_buf_struct* it_bit_buff, WORD32* no_nodes,
WORD32 gain_interpolation_type,
- ia_node_struct* str_node)
-{
- WORD32 k, e, m, bit;
- WORD32 code;
- WORD32 code_found;
- FLOAT32 slope_value = 0;
- bool end_marker = 0;
- WORD32 num_bits_read;
- const ia_slope_code_table_struct* ptr_slope_code_table;
- WORD32 no_slope_code_entries;
-
- ptr_slope_code_table = &(slope_code_tbl_entries_by_size[0]);
- no_slope_code_entries = NUM_SLOPE_TBL_ENTRIES;
-
-
- k=0;
- while(end_marker != 1)
- {
- k++;
- end_marker = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- *no_nodes = k;
-
- if (gain_interpolation_type == GAIN_INTERPOLATION_TYPE_SPLINE)
- {
- for (k=0; k<*no_nodes; k++)
- {
- num_bits_read = 0;
- code = 0;
- code_found = 0;
- e = 0;
- while ((e < no_slope_code_entries) && (!code_found))
- {
- for (m=0; m<ptr_slope_code_table[e].size - num_bits_read; m++)
- {
- bit = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- code = (code << 1) + bit;
- num_bits_read++;
- }
- while (num_bits_read == ptr_slope_code_table[e].size)
- {
- if (code == ptr_slope_code_table[e].code)
- {
- slope_value = ptr_slope_code_table[e].value;
- code_found = 1;
- break;
- }
- e++;
- }
- }
- str_node[k].slope = slope_value;
+ ia_node_struct* str_node) {
+ WORD32 k, e, m, bit;
+ WORD32 code;
+ WORD32 code_found;
+ FLOAT32 slope_value = 0;
+ bool end_marker = 0;
+ WORD32 num_bits_read;
+ const ia_slope_code_table_struct* ptr_slope_code_table;
+ WORD32 no_slope_code_entries;
+
+ ptr_slope_code_table = &(slope_code_tbl_entries_by_size[0]);
+ no_slope_code_entries = NUM_SLOPE_TBL_ENTRIES;
+
+ k = 0;
+ while (end_marker != 1) {
+ k++;
+ end_marker = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+ *no_nodes = k;
+
+ if (gain_interpolation_type == GAIN_INTERPOLATION_TYPE_SPLINE) {
+ for (k = 0; k < *no_nodes; k++) {
+ num_bits_read = 0;
+ code = 0;
+ code_found = 0;
+ e = 0;
+ while ((e < no_slope_code_entries) && (!code_found)) {
+ for (m = 0; m < ptr_slope_code_table[e].size - num_bits_read; m++) {
+ bit = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ code = (code << 1) + bit;
+ num_bits_read++;
}
- }
- else
- {
- for (k=0; k<*no_nodes; k++)
- {
- str_node[k].slope = 0.0f;
+ while (num_bits_read == ptr_slope_code_table[e].size) {
+ if (code == ptr_slope_code_table[e].code) {
+ slope_value = ptr_slope_code_table[e].value;
+ code_found = 1;
+ break;
+ }
+ e++;
}
+ }
+ str_node[k].slope = slope_value;
+ }
+ } else {
+ for (k = 0; k < *no_nodes; k++) {
+ str_node[k].slope = 0.0f;
}
- return(0);
+ }
+ return (0);
}
WORD32 impd_dec_times(ia_bit_buf_struct* it_bit_buff,
- ia_tables_struct* str_tables,
- WORD32 num_nodes,
- WORD32 delta_tmin,
- WORD32 drc_frame_size,
- WORD32 full_frame,
- WORD32 time_offset,
- ia_node_struct* str_node)
-{
- WORD32 k, e, m;
- WORD32 bit;
- WORD32 num_bits_read;
- WORD32 code;
- WORD32 code_found = 0;
- WORD32 time_delta = 0;
- WORD32 time_offs = time_offset;
- ia_delta_time_code_table_entry_struct* delta_time_code_table = str_tables->delta_time_code_table;
- bool frame_end_flag;
- WORD32 node_time_tmp;
- bool node_res_flag;
- WORD32 exit_cnt;
- if (full_frame == 0)
- {
- frame_end_flag = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ ia_tables_struct* str_tables, WORD32 num_nodes,
+ WORD32 delta_tmin, WORD32 drc_frame_size,
+ WORD32 full_frame, WORD32 time_offset,
+ ia_node_struct* str_node) {
+ WORD32 k, e, m;
+ WORD32 bit;
+ WORD32 num_bits_read;
+ WORD32 code;
+ WORD32 code_found = 0;
+ WORD32 time_delta = 0;
+ WORD32 time_offs = time_offset;
+ ia_delta_time_code_table_entry_struct* delta_time_code_table =
+ str_tables->delta_time_code_table;
+ bool frame_end_flag;
+ WORD32 node_time_tmp;
+ bool node_res_flag;
+ WORD32 exit_cnt;
+ if (full_frame == 0) {
+ frame_end_flag = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ } else {
+ frame_end_flag = 1;
+ }
+
+ if (frame_end_flag == 1) {
+ node_res_flag = 0;
+ for (k = 0; k < num_nodes - 1; k++) {
+ num_bits_read = 0;
+ code = 0;
+ code_found = 0;
+ exit_cnt = 0;
+ e = 1;
+ while ((e < N_DELTA_TIME_CODE_TABLE_ENTRIES_MAX) && (!code_found)) {
+ exit_cnt++;
+ if (exit_cnt > 100000) {
+ return -1;
+ }
+ for (m = 0; m < delta_time_code_table[e].size - num_bits_read; m++) {
+ bit = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ code = (code << 1) + bit;
+ num_bits_read++;
+ }
+ while (num_bits_read == delta_time_code_table[e].size) {
+ if (code == delta_time_code_table[e].code) {
+ time_delta = delta_time_code_table[e].value;
+ code_found = 1;
+ break;
+ }
+ e++;
+ }
+ }
+ node_time_tmp = time_offs + time_delta * delta_tmin;
+ if (node_time_tmp > drc_frame_size + time_offset) {
+ if (node_res_flag == 0) {
+ str_node[k].time = drc_frame_size + time_offset;
+ node_res_flag = 1;
+ }
+ str_node[k + 1].time = node_time_tmp;
+ } else {
+ str_node[k].time = node_time_tmp;
+ }
+ time_offs = node_time_tmp;
}
- else
- {
- frame_end_flag = 1;
+ if (node_res_flag == 0) {
+ str_node[k].time = drc_frame_size + time_offset;
}
-
- if (frame_end_flag == 1)
- {
- node_res_flag = 0;
- for (k=0; k<num_nodes-1; k++)
- {
- num_bits_read = 0;
- code = 0;
- code_found = 0;
- exit_cnt = 0;
- e = 1;
- while ((e < N_DELTA_TIME_CODE_TABLE_ENTRIES_MAX) && (!code_found))
- {
- exit_cnt++;
- if (exit_cnt > 100000) {
- return -1;
- }
- for (m=0; m<delta_time_code_table[e].size - num_bits_read; m++)
- {
- bit = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- code = (code << 1) + bit;
- num_bits_read++;
- }
- while (num_bits_read == delta_time_code_table[e].size)
- {
- if (code == delta_time_code_table[e].code)
- {
- time_delta = delta_time_code_table[e].value;
- code_found = 1;
- break;
- }
- e++;
- }
- }
- node_time_tmp = time_offs + time_delta * delta_tmin;
- if (node_time_tmp > drc_frame_size + time_offset)
- {
- if (node_res_flag == 0)
- {
- str_node[k].time = drc_frame_size + time_offset;
- node_res_flag = 1;
- }
- str_node[k+1].time = node_time_tmp;
- }
- else
- {
- str_node[k].time = node_time_tmp;
- }
- time_offs = node_time_tmp;
+ } else {
+ for (k = 0; k < num_nodes; k++) {
+ num_bits_read = 0;
+ code = 0;
+ code_found = 0;
+ e = 1;
+ exit_cnt = 0;
+ while ((e < N_DELTA_TIME_CODE_TABLE_ENTRIES_MAX) && (!code_found)) {
+ exit_cnt++;
+ if (exit_cnt > 100000) {
+ return (BITSTREAM_ERROR);
}
- if (node_res_flag == 0)
- {
- str_node[k].time = drc_frame_size + time_offset;
+ for (m = 0; m < delta_time_code_table[e].size - num_bits_read; m++) {
+ bit = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ code = (code << 1) + bit;
+ num_bits_read++;
}
- }
- else
- {
- for (k=0; k<num_nodes; k++)
- {
- num_bits_read = 0;
- code = 0;
- code_found = 0;
- e = 1;
- exit_cnt = 0;
- while ((e < N_DELTA_TIME_CODE_TABLE_ENTRIES_MAX) && (!code_found))
- {
- exit_cnt++;
- if (exit_cnt > 100000) {
- return(BITSTREAM_ERROR);
- }
- for (m=0; m<delta_time_code_table[e].size - num_bits_read; m++)
- {
- bit = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- code = (code << 1) + bit;
- num_bits_read++;
- }
- while (num_bits_read == delta_time_code_table[e].size)
- {
- if (code == delta_time_code_table[e].code)
- {
- time_delta = delta_time_code_table[e].value;
- code_found = 1;
- break;
- }
- e++;
- }
- }
- str_node[k].time = time_offs + time_delta * delta_tmin;
- time_offs = str_node[k].time;
+ while (num_bits_read == delta_time_code_table[e].size) {
+ if (code == delta_time_code_table[e].code) {
+ time_delta = delta_time_code_table[e].value;
+ code_found = 1;
+ break;
+ }
+ e++;
}
+ }
+ str_node[k].time = time_offs + time_delta * delta_tmin;
+ time_offs = str_node[k].time;
}
- return (0);
+ }
+ return (0);
}
WORD32 impd_drc_uni_gain_read(ia_bit_buf_struct* it_bit_buff,
- ia_drc_bits_dec_struct *pstr_drc_uni_bs_dec,
+ ia_drc_bits_dec_struct* pstr_drc_uni_bs_dec,
ia_drc_config* drc_config,
- ia_drc_gain_struct* pstr_uni_drc_gain)
-{
- WORD32 err = 0;
- WORD32 seq;
- static WORD32 pkt_loss_frame_cnt = 0;
- ia_spline_nodes_struct* str_spline_nodes = {0};
-
- {
- WORD32 gain_sequence_count = drc_config->str_p_loc_drc_coefficients_uni_drc[0].gain_sequence_count;
-
- for (seq=0; seq<gain_sequence_count; seq++)
- {
- WORD32 index = drc_config->str_p_loc_drc_coefficients_uni_drc[0].gain_set_params_index_for_gain_sequence[seq];
- ia_gain_set_params_struct *gain_set_params = &(drc_config->str_p_loc_drc_coefficients_uni_drc->gain_set_params[index]);
- if (gain_set_params->gain_coding_profile == GAIN_CODING_PROFILE_CONSTANT)
- {
- str_spline_nodes = &(pstr_uni_drc_gain->drc_gain_sequence[seq].str_spline_nodes[0]);
- str_spline_nodes->num_nodes = 1;
- str_spline_nodes->str_node[0].slope = 0.0;
- str_spline_nodes->str_node[0].time = (pstr_drc_uni_bs_dec->ia_drc_params_struct).drc_frame_size - 1;
- str_spline_nodes->str_node[0].loc_db_gain = 0.0f;
- }
- else
- {
- err = impd_parse_drc_gain_sequence( it_bit_buff, pstr_drc_uni_bs_dec, gain_set_params, &(pstr_uni_drc_gain->drc_gain_sequence[seq]));
- if (err) return(err);
- }
- }
+ ia_drc_gain_struct* pstr_uni_drc_gain) {
+ WORD32 err = 0;
+ WORD32 seq;
+ static WORD32 pkt_loss_frame_cnt = 0;
+ ia_spline_nodes_struct* str_spline_nodes = {0};
+
+ {
+ WORD32 gain_sequence_count =
+ drc_config->str_p_loc_drc_coefficients_uni_drc[0].gain_sequence_count;
+
+ for (seq = 0; seq < gain_sequence_count; seq++) {
+ WORD32 index = drc_config->str_p_loc_drc_coefficients_uni_drc[0]
+ .gain_set_params_index_for_gain_sequence[seq];
+ ia_gain_set_params_struct* gain_set_params =
+ &(drc_config->str_p_loc_drc_coefficients_uni_drc
+ ->gain_set_params[index]);
+ if (gain_set_params->gain_coding_profile ==
+ GAIN_CODING_PROFILE_CONSTANT) {
+ str_spline_nodes =
+ &(pstr_uni_drc_gain->drc_gain_sequence[seq].str_spline_nodes[0]);
+ str_spline_nodes->num_nodes = 1;
+ str_spline_nodes->str_node[0].slope = 0.0;
+ str_spline_nodes->str_node[0].time =
+ (pstr_drc_uni_bs_dec->ia_drc_params_struct).drc_frame_size - 1;
+ str_spline_nodes->str_node[0].loc_db_gain = 0.0f;
+ } else {
+ err = impd_parse_drc_gain_sequence(
+ it_bit_buff, pstr_drc_uni_bs_dec, gain_set_params,
+ &(pstr_uni_drc_gain->drc_gain_sequence[seq]));
+ if (err) return (err);
+ }
}
+ }
- if (it_bit_buff->ptr_bit_buf_base == NULL)
- {
- pkt_loss_frame_cnt++;
+ if (it_bit_buff->ptr_bit_buf_base == NULL) {
+ pkt_loss_frame_cnt++;
- if (pkt_loss_frame_cnt*(FLOAT32)pstr_drc_uni_bs_dec->ia_drc_params_struct.drc_frame_size/drc_config->sampling_rate > MAXPACKETLOSSTIME)
- {
- drc_config->apply_drc = 0;
- }
+ if (pkt_loss_frame_cnt *
+ (FLOAT32)pstr_drc_uni_bs_dec->ia_drc_params_struct.drc_frame_size /
+ drc_config->sampling_rate >
+ MAXPACKETLOSSTIME) {
+ drc_config->apply_drc = 0;
}
- else
- {
- pstr_uni_drc_gain->uni_drc_gain_ext_flag = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (pstr_uni_drc_gain->uni_drc_gain_ext_flag == 1)
- {
- err = impd_parse_uni_drc_gain_ext(it_bit_buff, &(pstr_uni_drc_gain->uni_drc_gain_ext));
- if (err) return(err);
- }
- pkt_loss_frame_cnt = 0;
- drc_config->apply_drc = 1;
+ } else {
+ pstr_uni_drc_gain->uni_drc_gain_ext_flag =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (pstr_uni_drc_gain->uni_drc_gain_ext_flag == 1) {
+ err = impd_parse_uni_drc_gain_ext(it_bit_buff,
+ &(pstr_uni_drc_gain->uni_drc_gain_ext));
+ if (err) return (err);
}
+ pkt_loss_frame_cnt = 0;
+ drc_config->apply_drc = 1;
+ }
- return(0);
+ return (0);
}
-WORD32 impd_parse_uni_drc_gain_ext(ia_bit_buf_struct* it_bit_buff,
- ia_uni_drc_gain_ext_struct* uni_drc_gain_ext)
-{
- WORD32 i, k;
- WORD32 bit_size_len, ext_size_bits, bit_size, other_bit;
-
- k = 0;
- uni_drc_gain_ext->uni_drc_gain_ext_type[k] = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- while(uni_drc_gain_ext->uni_drc_gain_ext_type[k] != UNIDRCGAINEXT_TERM)
- {
- bit_size_len = impd_read_bits_buf(it_bit_buff, 3);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- ext_size_bits = bit_size_len + 4;
-
- bit_size = impd_read_bits_buf(it_bit_buff, ext_size_bits);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- uni_drc_gain_ext->ext_bit_size[k] = bit_size + 1;
-
- switch(uni_drc_gain_ext->uni_drc_gain_ext_type[k])
- {
- default:
- for(i = 0; i<uni_drc_gain_ext->ext_bit_size[k]; i++)
- {
- other_bit = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- break;
+WORD32 impd_parse_uni_drc_gain_ext(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_uni_drc_gain_ext_struct* uni_drc_gain_ext) {
+ WORD32 i, k;
+ WORD32 bit_size_len, ext_size_bits, bit_size, other_bit;
+
+ k = 0;
+ uni_drc_gain_ext->uni_drc_gain_ext_type[k] =
+ impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ while (uni_drc_gain_ext->uni_drc_gain_ext_type[k] != UNIDRCGAINEXT_TERM) {
+ bit_size_len = impd_read_bits_buf(it_bit_buff, 3);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ ext_size_bits = bit_size_len + 4;
+
+ bit_size = impd_read_bits_buf(it_bit_buff, ext_size_bits);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ uni_drc_gain_ext->ext_bit_size[k] = bit_size + 1;
+
+ switch (uni_drc_gain_ext->uni_drc_gain_ext_type[k]) {
+ default:
+ for (i = 0; i < uni_drc_gain_ext->ext_bit_size[k]; i++) {
+ other_bit = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
}
- k++;
- uni_drc_gain_ext->uni_drc_gain_ext_type[k] = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ break;
}
+ k++;
+ uni_drc_gain_ext->uni_drc_gain_ext_type[k] =
+ impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
- return (0);
+ return (0);
}
WORD32 impd_parse_spline_nodes(ia_bit_buf_struct* it_bit_buff,
- ia_drc_bits_dec_struct *pstr_drc_uni_bs_dec,
+ ia_drc_bits_dec_struct* pstr_drc_uni_bs_dec,
ia_gain_set_params_struct* gain_set_params,
- ia_spline_nodes_struct* str_spline_nodes)
-{
- WORD32 err = 0;
- WORD32 time_offset;
- if (gain_set_params->time_alignment==0) {
- time_offset = -1;
+ ia_spline_nodes_struct* str_spline_nodes) {
+ WORD32 err = 0;
+ WORD32 time_offset;
+ if (gain_set_params->time_alignment == 0) {
+ time_offset = -1;
+ } else {
+ if (gain_set_params->time_delt_min_flag) {
+ time_offset = -gain_set_params->time_delt_min_val +
+ (gain_set_params->time_delt_min_val - 1) / 2;
+ } else {
+ time_offset =
+ -pstr_drc_uni_bs_dec->ia_drc_params_struct.delta_tmin_default +
+ (pstr_drc_uni_bs_dec->ia_drc_params_struct.delta_tmin_default - 1) /
+ 2;
}
- else
- {
- if (gain_set_params->time_delt_min_flag)
- {
- time_offset = - gain_set_params->time_delt_min_val + (gain_set_params->time_delt_min_val-1)/2;
- }
- else
- {
- time_offset = - pstr_drc_uni_bs_dec->ia_drc_params_struct.delta_tmin_default + (pstr_drc_uni_bs_dec->ia_drc_params_struct.delta_tmin_default-1)/2;
+ }
- }
- }
+ if (it_bit_buff->ptr_bit_buf_base == NULL) {
+ FLOAT32 prev_db_gain =
+ str_spline_nodes->str_node[str_spline_nodes->num_nodes - 1].loc_db_gain;
+ str_spline_nodes->drc_gain_coding_mode = 0;
- if(it_bit_buff->ptr_bit_buf_base == NULL)
- {
- FLOAT32 prev_db_gain = str_spline_nodes->str_node[str_spline_nodes->num_nodes-1].loc_db_gain;
- str_spline_nodes->drc_gain_coding_mode = 0;
+ str_spline_nodes->num_nodes = 1;
- str_spline_nodes->num_nodes = 1;
-
- if (prev_db_gain < 0)
- {
- str_spline_nodes->str_node[0].loc_db_gain = prev_db_gain;
- }
- else
- {
- str_spline_nodes->str_node[0].loc_db_gain = 0.f;
- }
-
- str_spline_nodes->str_node[0].slope = 0.0;
- str_spline_nodes->str_node[0].time = (pstr_drc_uni_bs_dec->ia_drc_params_struct).drc_frame_size + time_offset;
+ if (prev_db_gain < 0) {
+ str_spline_nodes->str_node[0].loc_db_gain = prev_db_gain;
+ } else {
+ str_spline_nodes->str_node[0].loc_db_gain = 0.f;
}
- else
- {
- str_spline_nodes->drc_gain_coding_mode = impd_read_bits_buf(it_bit_buff, 1);
- if (it_bit_buff->error == PROC_COMPLETE)
- {
- str_spline_nodes->drc_gain_coding_mode = 0;
- str_spline_nodes->str_node[0].slope = 0.0;
- str_spline_nodes->str_node[0].time = (pstr_drc_uni_bs_dec->ia_drc_params_struct).drc_frame_size + time_offset;
- str_spline_nodes->str_node[0].loc_db_gain = str_spline_nodes->str_node[str_spline_nodes->num_nodes-1].loc_db_gain;
- str_spline_nodes->num_nodes = 1;
- }
- else
- {
- if (it_bit_buff->error)
- return(it_bit_buff->error);
- }
- if (str_spline_nodes->drc_gain_coding_mode == 0)
- {
- str_spline_nodes->num_nodes = 1;
- err = impd_dec_initial_gain(it_bit_buff, gain_set_params->gain_coding_profile, &(str_spline_nodes->str_node[0].loc_db_gain));
- if (err) return(err);
-
- str_spline_nodes->str_node[0].slope = 0.0;
- str_spline_nodes->str_node[0].time = (pstr_drc_uni_bs_dec->ia_drc_params_struct).drc_frame_size + time_offset;
- }
- else
- {
- err = impd_dec_slopes(it_bit_buff, &str_spline_nodes->num_nodes, gain_set_params->gain_interpolation_type, str_spline_nodes->str_node);
- if (err) return(err);
- if (gain_set_params->time_delt_min_flag)
- {
- err = impd_dec_times(it_bit_buff, &gain_set_params->str_tables, str_spline_nodes->num_nodes, gain_set_params->time_delt_min_val, (pstr_drc_uni_bs_dec->ia_drc_params_struct).drc_frame_size, gain_set_params->full_frame, time_offset, str_spline_nodes->str_node);
- if (err) return(err);
- err = impd_dec_gains(it_bit_buff,
- str_spline_nodes->num_nodes,
- gain_set_params->gain_coding_profile,
- str_spline_nodes->str_node);
- if (err) return(err);
- }
- else
- {
- err = impd_dec_times(it_bit_buff, &pstr_drc_uni_bs_dec->tables_default, str_spline_nodes->num_nodes, (pstr_drc_uni_bs_dec->ia_drc_params_struct).delta_tmin_default, (pstr_drc_uni_bs_dec->ia_drc_params_struct).drc_frame_size, gain_set_params->full_frame, time_offset, str_spline_nodes->str_node);
- if (err) return(err);
- err = impd_dec_gains(it_bit_buff,
- str_spline_nodes->num_nodes,
- gain_set_params->gain_coding_profile,
- str_spline_nodes->str_node);
- if (err) return(err);
- }
-
- }
+ str_spline_nodes->str_node[0].slope = 0.0;
+ str_spline_nodes->str_node[0].time =
+ (pstr_drc_uni_bs_dec->ia_drc_params_struct).drc_frame_size +
+ time_offset;
+ } else {
+ str_spline_nodes->drc_gain_coding_mode = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error == PROC_COMPLETE) {
+ str_spline_nodes->drc_gain_coding_mode = 0;
+ str_spline_nodes->str_node[0].slope = 0.0;
+ str_spline_nodes->str_node[0].time =
+ (pstr_drc_uni_bs_dec->ia_drc_params_struct).drc_frame_size +
+ time_offset;
+ str_spline_nodes->str_node[0].loc_db_gain =
+ str_spline_nodes->str_node[str_spline_nodes->num_nodes - 1]
+ .loc_db_gain;
+ str_spline_nodes->num_nodes = 1;
+ } else {
+ if (it_bit_buff->error) return (it_bit_buff->error);
}
- return(0);
+ if (str_spline_nodes->drc_gain_coding_mode == 0) {
+ str_spline_nodes->num_nodes = 1;
+
+ err = impd_dec_initial_gain(it_bit_buff,
+ gain_set_params->gain_coding_profile,
+ &(str_spline_nodes->str_node[0].loc_db_gain));
+ if (err) return (err);
+
+ str_spline_nodes->str_node[0].slope = 0.0;
+ str_spline_nodes->str_node[0].time =
+ (pstr_drc_uni_bs_dec->ia_drc_params_struct).drc_frame_size +
+ time_offset;
+ } else {
+ err = impd_dec_slopes(it_bit_buff, &str_spline_nodes->num_nodes,
+ gain_set_params->gain_interpolation_type,
+ str_spline_nodes->str_node);
+ if (err) return (err);
+ if (gain_set_params->time_delt_min_flag) {
+ err = impd_dec_times(
+ it_bit_buff, &gain_set_params->str_tables,
+ str_spline_nodes->num_nodes, gain_set_params->time_delt_min_val,
+ (pstr_drc_uni_bs_dec->ia_drc_params_struct).drc_frame_size,
+ gain_set_params->full_frame, time_offset,
+ str_spline_nodes->str_node);
+ if (err) return (err);
+ err = impd_dec_gains(it_bit_buff, str_spline_nodes->num_nodes,
+ gain_set_params->gain_coding_profile,
+ str_spline_nodes->str_node);
+ if (err) return (err);
+ } else {
+ err = impd_dec_times(
+ it_bit_buff, &pstr_drc_uni_bs_dec->tables_default,
+ str_spline_nodes->num_nodes,
+ (pstr_drc_uni_bs_dec->ia_drc_params_struct).delta_tmin_default,
+ (pstr_drc_uni_bs_dec->ia_drc_params_struct).drc_frame_size,
+ gain_set_params->full_frame, time_offset,
+ str_spline_nodes->str_node);
+ if (err) return (err);
+ err = impd_dec_gains(it_bit_buff, str_spline_nodes->num_nodes,
+ gain_set_params->gain_coding_profile,
+ str_spline_nodes->str_node);
+ if (err) return (err);
+ }
+ }
+ }
+ return (0);
}
-WORD32 impd_parse_drc_gain_sequence(ia_bit_buf_struct* it_bit_buff,
- ia_drc_bits_dec_struct *pstr_drc_uni_bs_dec,
- ia_gain_set_params_struct* gain_set_params,
- ia_drc_gain_sequence_struct* drc_gain_sequence)
-{
- WORD32 err = 0, i;
- WORD32 prev_frame_time_buf[NODE_COUNT_MAX], cur_frame_time_buf[NODE_COUNT_MAX];
- WORD32 num_nodes_node_reservoir, num_nodes_cur, k, m;
-
- if (((pstr_drc_uni_bs_dec->ia_drc_params_struct).delay_mode == DELAY_MODE_LOW_DELAY) && (gain_set_params->full_frame == 0))
- {
- return (PARAM_ERROR);
+WORD32 impd_parse_drc_gain_sequence(
+ ia_bit_buf_struct* it_bit_buff, ia_drc_bits_dec_struct* pstr_drc_uni_bs_dec,
+ ia_gain_set_params_struct* gain_set_params,
+ ia_drc_gain_sequence_struct* drc_gain_sequence) {
+ WORD32 err = 0, i;
+ WORD32 prev_frame_time_buf[NODE_COUNT_MAX],
+ cur_frame_time_buf[NODE_COUNT_MAX];
+ WORD32 num_nodes_node_reservoir, num_nodes_cur, k, m;
+
+ if (((pstr_drc_uni_bs_dec->ia_drc_params_struct).delay_mode ==
+ DELAY_MODE_LOW_DELAY) &&
+ (gain_set_params->full_frame == 0)) {
+ return (PARAM_ERROR);
+ }
+ i = 0;
+ {
+ err = impd_parse_spline_nodes(it_bit_buff, pstr_drc_uni_bs_dec,
+ gain_set_params,
+ &(drc_gain_sequence->str_spline_nodes[i]));
+ if (err) return (err);
+
+ num_nodes_node_reservoir = 0;
+ num_nodes_cur = 0;
+ for (k = 0; k < drc_gain_sequence->str_spline_nodes[i].num_nodes; k++) {
+ if (drc_gain_sequence->str_spline_nodes[i].str_node[k].time >=
+ pstr_drc_uni_bs_dec->ia_drc_params_struct.drc_frame_size) {
+ prev_frame_time_buf[num_nodes_node_reservoir] =
+ drc_gain_sequence->str_spline_nodes[i].str_node[k].time;
+ num_nodes_node_reservoir++;
+ } else {
+ cur_frame_time_buf[num_nodes_cur] =
+ drc_gain_sequence->str_spline_nodes[i].str_node[k].time;
+ num_nodes_cur++;
+ }
}
- i=0;
- {
- err = impd_parse_spline_nodes( it_bit_buff, pstr_drc_uni_bs_dec, gain_set_params, &(drc_gain_sequence->str_spline_nodes[i]));
- if (err) return(err);
-
- num_nodes_node_reservoir = 0;
- num_nodes_cur = 0;
- for (k = 0; k < drc_gain_sequence->str_spline_nodes[i].num_nodes; k++){
- if(drc_gain_sequence->str_spline_nodes[i].str_node[k].time >= pstr_drc_uni_bs_dec->ia_drc_params_struct.drc_frame_size){
- prev_frame_time_buf[num_nodes_node_reservoir] = drc_gain_sequence->str_spline_nodes[i].str_node[k].time;
- num_nodes_node_reservoir++;
- }
- else{
- cur_frame_time_buf[num_nodes_cur] = drc_gain_sequence->str_spline_nodes[i].str_node[k].time;
- num_nodes_cur++;
- }
- }
- for (k = 0; k < num_nodes_node_reservoir; k++){
- drc_gain_sequence->str_spline_nodes[i].str_node[k].time = prev_frame_time_buf[k] - 2*pstr_drc_uni_bs_dec->ia_drc_params_struct.drc_frame_size;
- }
- for (m = 0; m < num_nodes_cur; m++, k++){
- drc_gain_sequence->str_spline_nodes[i].str_node[k].time = cur_frame_time_buf[m];
- }
+ for (k = 0; k < num_nodes_node_reservoir; k++) {
+ drc_gain_sequence->str_spline_nodes[i].str_node[k].time =
+ prev_frame_time_buf[k] -
+ 2 * pstr_drc_uni_bs_dec->ia_drc_params_struct.drc_frame_size;
+ }
+ for (m = 0; m < num_nodes_cur; m++, k++) {
+ drc_gain_sequence->str_spline_nodes[i].str_node[k].time =
+ cur_frame_time_buf[m];
}
- return(0);
+ }
+ return (0);
}
WORD32 impd_parse_drc_ext_v1(ia_bit_buf_struct* it_bit_buff,
ia_drc_params_bs_dec_struct* ia_drc_params_struct,
ia_drc_config* drc_config,
- ia_drc_config_ext* str_drc_config_ext)
-{
- WORD32 dwnmix_instructions_v1_flag;
- WORD32 dwnmix_instructions_v1_count;
- WORD32 drc_coeffs_and_instructions_uni_drc_v1_flag;
- WORD32 drc_coefficients_uni_drc_v1_count;
- WORD32 drc_instructions_uni_drc_v1_count;
-
- WORD32 i = 0, err = 0;
- const WORD32 version = 1;
-
- dwnmix_instructions_v1_flag = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (dwnmix_instructions_v1_flag == 1)
- {
- dwnmix_instructions_v1_count = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- for (i=0; i<dwnmix_instructions_v1_count; i++)
- {
- err = impd_parse_dwnmix_instructions(it_bit_buff, version, ia_drc_params_struct, &drc_config->channel_layout, &drc_config->dwnmix_instructions[i + drc_config->dwnmix_instructions_count]);
- if (err) return(err);
- }
- drc_config->dwnmix_instructions_count += dwnmix_instructions_v1_count;
+ ia_drc_config_ext* str_drc_config_ext) {
+ WORD32 dwnmix_instructions_v1_flag;
+ WORD32 dwnmix_instructions_v1_count;
+ WORD32 drc_coeffs_and_instructions_uni_drc_v1_flag;
+ WORD32 drc_coefficients_uni_drc_v1_count;
+ WORD32 drc_instructions_uni_drc_v1_count;
+
+ WORD32 i = 0, err = 0;
+ const WORD32 version = 1;
+
+ dwnmix_instructions_v1_flag = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (dwnmix_instructions_v1_flag == 1) {
+ dwnmix_instructions_v1_count = impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ for (i = 0; i < dwnmix_instructions_v1_count; i++) {
+ err = impd_parse_dwnmix_instructions(
+ it_bit_buff, version, ia_drc_params_struct,
+ &drc_config->channel_layout,
+ &drc_config
+ ->dwnmix_instructions[i +
+ drc_config->dwnmix_instructions_count]);
+ if (err) return (err);
}
-
- drc_coeffs_and_instructions_uni_drc_v1_flag = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (drc_coeffs_and_instructions_uni_drc_v1_flag == 1)
- {
- drc_coefficients_uni_drc_v1_count = impd_read_bits_buf(it_bit_buff, 3);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- for (i=0; i<drc_coefficients_uni_drc_v1_count; i++)
- {
- err = impd_drc_parse_coeff(it_bit_buff, version, ia_drc_params_struct, &drc_config->str_p_loc_drc_coefficients_uni_drc[i + drc_config->drc_coefficients_drc_count]);
- if (err) return(err);
- }
- drc_config->drc_coefficients_drc_count += drc_coefficients_uni_drc_v1_count;
-
- drc_instructions_uni_drc_v1_count = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- for (i=0; i<drc_instructions_uni_drc_v1_count; i++)
- {
- err = impd_parse_drc_instructions_uni_drc(it_bit_buff, version, drc_config, &drc_config->str_drc_instruction_str[i + drc_config->drc_instructions_uni_drc_count]);
- if (err) return(err);
- }
- drc_config->drc_instructions_uni_drc_count += drc_instructions_uni_drc_v1_count;
+ drc_config->dwnmix_instructions_count += dwnmix_instructions_v1_count;
+ }
+
+ drc_coeffs_and_instructions_uni_drc_v1_flag =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (drc_coeffs_and_instructions_uni_drc_v1_flag == 1) {
+ drc_coefficients_uni_drc_v1_count = impd_read_bits_buf(it_bit_buff, 3);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ for (i = 0; i < drc_coefficients_uni_drc_v1_count; i++) {
+ err = impd_drc_parse_coeff(
+ it_bit_buff, version, ia_drc_params_struct,
+ &drc_config->str_p_loc_drc_coefficients_uni_drc
+ [i + drc_config->drc_coefficients_drc_count]);
+ if (err) return (err);
}
-
- str_drc_config_ext->loud_eq_instructions_flag = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (str_drc_config_ext->loud_eq_instructions_flag == 1)
- {
- str_drc_config_ext->loud_eq_instructions_count = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- for (i=0; i<str_drc_config_ext->loud_eq_instructions_count; i++)
- {
- err = impd_parse_loud_eq_instructions(it_bit_buff, &str_drc_config_ext->loud_eq_instructions[i]);
- if (err) return(err);
- }
+ drc_config->drc_coefficients_drc_count += drc_coefficients_uni_drc_v1_count;
+
+ drc_instructions_uni_drc_v1_count = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ for (i = 0; i < drc_instructions_uni_drc_v1_count; i++) {
+ err = impd_parse_drc_instructions_uni_drc(
+ it_bit_buff, version, drc_config,
+ &drc_config->str_drc_instruction_str
+ [i + drc_config->drc_instructions_uni_drc_count]);
+ if (err) return (err);
}
- else
- {
- str_drc_config_ext->loud_eq_instructions_count = 0;
+ drc_config->drc_instructions_uni_drc_count +=
+ drc_instructions_uni_drc_v1_count;
+ }
+
+ str_drc_config_ext->loud_eq_instructions_flag =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (str_drc_config_ext->loud_eq_instructions_flag == 1) {
+ str_drc_config_ext->loud_eq_instructions_count =
+ impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ for (i = 0; i < str_drc_config_ext->loud_eq_instructions_count; i++) {
+ err = impd_parse_loud_eq_instructions(
+ it_bit_buff, &str_drc_config_ext->loud_eq_instructions[i]);
+ if (err) return (err);
}
-
- str_drc_config_ext->eq_flag = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (str_drc_config_ext->eq_flag == 1)
- {
- err = impd_parse_eq_coefficients( it_bit_buff, &str_drc_config_ext->str_eq_coeff);
- if (err) return(err);
- str_drc_config_ext->eq_instructions_count = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- for (i=0; i<str_drc_config_ext->eq_instructions_count; i++)
- {
- err = impd_parse_eq_instructions(it_bit_buff, drc_config, &str_drc_config_ext->str_eq_instructions[i]);
- if (err) return(err);
- }
+ } else {
+ str_drc_config_ext->loud_eq_instructions_count = 0;
+ }
+
+ str_drc_config_ext->eq_flag = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (str_drc_config_ext->eq_flag == 1) {
+ err = impd_parse_eq_coefficients(it_bit_buff,
+ &str_drc_config_ext->str_eq_coeff);
+ if (err) return (err);
+ str_drc_config_ext->eq_instructions_count =
+ impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ for (i = 0; i < str_drc_config_ext->eq_instructions_count; i++) {
+ err = impd_parse_eq_instructions(
+ it_bit_buff, drc_config, &str_drc_config_ext->str_eq_instructions[i]);
+ if (err) return (err);
}
- return 0;
+ }
+ return 0;
}
-
-
-
WORD32 impd_parse_filt_block(ia_bit_buf_struct* it_bit_buff,
ia_filt_block_struct* str_filter_block,
- WORD32 block_count)
-{
-// WORD32 err = 0;
- WORD32 k,j,temp;
- ia_filt_ele_struct* str_filter_element;
-
- for (j=0; j<block_count; j++)
- {
-
- str_filter_block->filter_element_count = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- str_filter_element=&str_filter_block->str_filter_element[0];
- for (k=0; k<str_filter_block->filter_element_count; k++)
- {
- temp = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- str_filter_element->filt_ele_idx= (temp&0x7E)>>1;
- str_filter_element->filt_ele_gain_flag = temp&1;;
-
- if (str_filter_element->filt_ele_gain_flag)
- {
- WORD32 bs_filter_element_gain;
- bs_filter_element_gain = impd_read_bits_buf(it_bit_buff, 10);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- str_filter_element->filt_ele_gain = bs_filter_element_gain * 0.125f - 96.0f;
- }
-
- str_filter_element++;
- }
- str_filter_block++;
+ WORD32 block_count) {
+ // WORD32 err = 0;
+ WORD32 k, j, temp;
+ ia_filt_ele_struct* str_filter_element;
+
+ for (j = 0; j < block_count; j++) {
+ str_filter_block->filter_element_count = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ str_filter_element = &str_filter_block->str_filter_element[0];
+ for (k = 0; k < str_filter_block->filter_element_count; k++) {
+ temp = impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ str_filter_element->filt_ele_idx = (temp & 0x7E) >> 1;
+ str_filter_element->filt_ele_gain_flag = temp & 1;
+ ;
+
+ if (str_filter_element->filt_ele_gain_flag) {
+ WORD32 bs_filter_element_gain;
+ bs_filter_element_gain = impd_read_bits_buf(it_bit_buff, 10);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ str_filter_element->filt_ele_gain =
+ bs_filter_element_gain * 0.125f - 96.0f;
+ }
+
+ str_filter_element++;
}
- return(0);
+ str_filter_block++;
+ }
+ return (0);
}
-WORD32 impd_parse_unique_td_filt_ele(ia_bit_buf_struct* it_bit_buff,
- ia_unique_td_filt_element* unique_td_filt_ele,
- WORD32 td_filter_element_count)
-{
- WORD32 m, sign, j, temp;
- FLOAT32 tmp;
-
- for (j=0; j<td_filter_element_count; j++)
- {
- unique_td_filt_ele->eq_filter_format = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+WORD32 impd_parse_unique_td_filt_ele(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_unique_td_filt_element* unique_td_filt_ele,
+ WORD32 td_filter_element_count) {
+ WORD32 m, sign, j, temp;
+ FLOAT32 tmp;
- if (unique_td_filt_ele->eq_filter_format == 0)
- {
- WORD32 bs_real_zero_radius, bs_generic_zero_radius, bs_generic_zero_angle;
- WORD32 bs_real_pole_radius, bs_cmplx_pole_radius, bs_cmplx_pole_angle;
- WORD32 bs_real_zero_radius_one_count;
+ for (j = 0; j < td_filter_element_count; j++) {
+ unique_td_filt_ele->eq_filter_format = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
- temp = impd_read_bits_buf(it_bit_buff, 23);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ if (unique_td_filt_ele->eq_filter_format == 0) {
+ WORD32 bs_real_zero_radius, bs_generic_zero_radius, bs_generic_zero_angle;
+ WORD32 bs_real_pole_radius, bs_cmplx_pole_radius, bs_cmplx_pole_angle;
+ WORD32 bs_real_zero_radius_one_count;
- bs_real_zero_radius_one_count=(temp>>20)&7;
+ temp = impd_read_bits_buf(it_bit_buff, 23);
+ if (it_bit_buff->error) return it_bit_buff->error;
- unique_td_filt_ele->bs_real_zero_radius_one_count = 2 * bs_real_zero_radius_one_count;
- unique_td_filt_ele->real_zero_count = (temp&0xFC000)>>14;
+ bs_real_zero_radius_one_count = (temp >> 20) & 7;
- unique_td_filt_ele->generic_zero_count = (temp& 0x3F00)>>8;
+ unique_td_filt_ele->bs_real_zero_radius_one_count =
+ 2 * bs_real_zero_radius_one_count;
+ unique_td_filt_ele->real_zero_count = (temp & 0xFC000) >> 14;
- unique_td_filt_ele->real_pole_count = (temp&0xF0)>>4;
+ unique_td_filt_ele->generic_zero_count = (temp & 0x3F00) >> 8;
- unique_td_filt_ele->cmplx_pole_count = temp& 0xF;
+ unique_td_filt_ele->real_pole_count = (temp & 0xF0) >> 4;
+ unique_td_filt_ele->cmplx_pole_count = temp & 0xF;
- temp= impd_read_bits_buf(it_bit_buff, unique_td_filt_ele->bs_real_zero_radius_one_count);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ temp = impd_read_bits_buf(
+ it_bit_buff, unique_td_filt_ele->bs_real_zero_radius_one_count);
+ if (it_bit_buff->error) return it_bit_buff->error;
- for (m=unique_td_filt_ele->bs_real_zero_radius_one_count-1; m>=0; m--)
- {
- unique_td_filt_ele->zero_sign[m] =(temp &1);
- temp=temp>>1;
- }
+ for (m = unique_td_filt_ele->bs_real_zero_radius_one_count - 1; m >= 0;
+ m--) {
+ unique_td_filt_ele->zero_sign[m] = (temp & 1);
+ temp = temp >> 1;
+ }
+ for (m = 0; m < unique_td_filt_ele->real_zero_count; m++) {
+ temp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
- for (m=0; m<unique_td_filt_ele->real_zero_count; m++)
- {
- temp= impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ bs_real_zero_radius = (temp & 0xFE) >> 1;
- bs_real_zero_radius = (temp&0xFE)>>1;
+ sign = temp & 0x01;
- sign = temp&0x01;
+ tmp = 1.0f - zero_pole_radius_tbl[bs_real_zero_radius];
- tmp = 1.0f - zero_pole_radius_tbl[bs_real_zero_radius];
+ sign = sign << 1;
- sign=sign<<1;
+ unique_td_filt_ele->real_zero_radius[m] = (1 - sign) * tmp;
+ }
+ for (m = 0; m < unique_td_filt_ele->generic_zero_count; m++) {
+ temp = impd_read_bits_buf(it_bit_buff, 14);
+ if (it_bit_buff->error) return it_bit_buff->error;
- unique_td_filt_ele->real_zero_radius[m] = (1-sign)*tmp;
- }
- for (m=0; m<unique_td_filt_ele->generic_zero_count; m++)
- {
- temp=impd_read_bits_buf(it_bit_buff, 14);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ bs_generic_zero_radius = (temp & 0x3F80) >> 7;
- bs_generic_zero_radius = (temp&0x3F80)>>7;
+ unique_td_filt_ele->generic_zero_radius[m] =
+ 1.0f - zero_pole_radius_tbl[bs_generic_zero_radius];
- unique_td_filt_ele->generic_zero_radius[m] = 1.0f - zero_pole_radius_tbl[bs_generic_zero_radius];
+ bs_generic_zero_angle = (temp & 0x7F);
- bs_generic_zero_angle = (temp&0x7F);
+ unique_td_filt_ele->generic_zero_angle[m] =
+ zero_pole_angle_tbl[bs_generic_zero_angle];
+ }
+ for (m = 0; m < unique_td_filt_ele->real_pole_count; m++) {
+ temp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
- unique_td_filt_ele->generic_zero_angle[m] = zero_pole_angle_tbl[bs_generic_zero_angle];
- }
- for (m=0; m<unique_td_filt_ele->real_pole_count; m++)
- {
- temp=impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ bs_real_pole_radius = (temp & 0xFE) >> 1;
- bs_real_pole_radius = (temp&0xFE)>>1;
+ sign = temp & 0x01;
- sign = temp&0x01;
+ tmp = 1.0f - zero_pole_radius_tbl[bs_real_pole_radius];
- tmp = 1.0f - zero_pole_radius_tbl[bs_real_pole_radius];
+ sign = sign << 1;
- sign=sign<<1;
+ unique_td_filt_ele->real_pole_radius[m] = (1 - sign) * tmp;
+ }
+ for (m = 0; m < unique_td_filt_ele->cmplx_pole_count; m++) {
+ temp = impd_read_bits_buf(it_bit_buff, 14);
- unique_td_filt_ele->real_pole_radius[m] = (1-sign)*tmp;
- }
- for (m=0; m<unique_td_filt_ele->cmplx_pole_count; m++)
- {
- temp= impd_read_bits_buf(it_bit_buff, 14);
+ if (it_bit_buff->error) return it_bit_buff->error;
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ bs_cmplx_pole_radius = (temp & 0x3F80) >> 7;
- bs_cmplx_pole_radius = (temp&0x3F80)>>7;
+ unique_td_filt_ele->complex_pole_radius[m] =
+ 1.0f - zero_pole_radius_tbl[bs_cmplx_pole_radius];
- unique_td_filt_ele->complex_pole_radius[m] = 1.0f - zero_pole_radius_tbl[bs_cmplx_pole_radius];
+ bs_cmplx_pole_angle = (temp & 0x7F);
- bs_cmplx_pole_angle = (temp&0x7F);
+ unique_td_filt_ele->complex_pole_angle[m] =
+ zero_pole_angle_tbl[bs_cmplx_pole_angle];
+ }
+ } else {
+ temp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
- unique_td_filt_ele->complex_pole_angle[m] = zero_pole_angle_tbl[bs_cmplx_pole_angle];
- }
- }
- else
- {
- temp = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- unique_td_filt_ele->fir_filt_order = (temp&0xFE)>>1;
+ unique_td_filt_ele->fir_filt_order = (temp & 0xFE) >> 1;
- unique_td_filt_ele->fir_symmetry = temp&0x01;
+ unique_td_filt_ele->fir_symmetry = temp & 0x01;
- for (m=0; m<unique_td_filt_ele->fir_filt_order/2+1; m++)
- {
- WORD32 sign, bs_fir_coeff;
- FLOAT32 tmp;
+ for (m = 0; m < unique_td_filt_ele->fir_filt_order / 2 + 1; m++) {
+ WORD32 sign, bs_fir_coeff;
+ FLOAT32 tmp;
- temp= impd_read_bits_buf(it_bit_buff, 11);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- sign = (temp>>10)&0x01;
+ temp = impd_read_bits_buf(it_bit_buff, 11);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ sign = (temp >> 10) & 0x01;
- bs_fir_coeff = temp&0x03FF;
+ bs_fir_coeff = temp & 0x03FF;
- tmp = (FLOAT32)pow(10.0f, -0.05f * bs_fir_coeff * 0.0625f);
+ tmp = (FLOAT32)pow(10.0f, -0.05f * bs_fir_coeff * 0.0625f);
- sign=sign<<1;
+ sign = sign << 1;
- unique_td_filt_ele->fir_coeff[m] = (1-sign)*tmp;
- }
- }
- unique_td_filt_ele++;
+ unique_td_filt_ele->fir_coeff[m] = (1 - sign) * tmp;
+ }
}
- return(0);
+ unique_td_filt_ele++;
+ }
+ return (0);
}
WORD32 impd_decode_eq_slope_code(ia_bit_buf_struct* it_bit_buff,
- FLOAT32* eq_slope,
- WORD32 num_eq_nodes)
-{
- WORD32 bits = 0;
- WORD32 k;
-
- for (k=0; k<num_eq_nodes; k++)
- {
- bits = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (bits == 0x1) {
- *eq_slope = 0.0f;
- }
- else {
- bits = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- *eq_slope = eq_slope_tbl[bits];
- }
- eq_slope++;
-
+ FLOAT32* eq_slope, WORD32 num_eq_nodes) {
+ WORD32 bits = 0;
+ WORD32 k;
+
+ for (k = 0; k < num_eq_nodes; k++) {
+ bits = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (bits == 0x1) {
+ *eq_slope = 0.0f;
+ } else {
+ bits = impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ *eq_slope = eq_slope_tbl[bits];
}
- return(0);
+ eq_slope++;
+ }
+ return (0);
}
-
-
WORD32
impd_decode_gain_initial_code(ia_bit_buf_struct* it_bit_buff,
- FLOAT32* eq_gain_initial)
-{
- WORD32 bits,bits1;
+ FLOAT32* eq_gain_initial) {
+ WORD32 bits, bits1;
- bits1 = impd_read_bits_buf(it_bit_buff, 2);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ bits1 = impd_read_bits_buf(it_bit_buff, 2);
+ if (it_bit_buff->error) return it_bit_buff->error;
- switch (bits1) {
+ switch (bits1) {
case 0x0:
- bits = impd_read_bits_buf(it_bit_buff, 5);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- *eq_gain_initial = 0.5f * bits - 8.0f;
- break;
+ bits = impd_read_bits_buf(it_bit_buff, 5);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ *eq_gain_initial = 0.5f * bits - 8.0f;
+ break;
case 0x1:
case 0x2:
- bits = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (bits<8) {
- *eq_gain_initial = bits1*bits - bits1*16.0f;
- }
- else {
- *eq_gain_initial = (FLOAT32)bits1*bits;
- }
- break;
+ bits = impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (bits < 8) {
+ *eq_gain_initial = bits1 * bits - bits1 * 16.0f;
+ } else {
+ *eq_gain_initial = (FLOAT32)bits1 * bits;
+ }
+ break;
case 0x3:
- bits = impd_read_bits_buf(it_bit_buff, 3);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- *eq_gain_initial = 4.0f * bits - 64.0f;
- break;
+ bits = impd_read_bits_buf(it_bit_buff, 3);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ *eq_gain_initial = 4.0f * bits - 64.0f;
+ break;
default:
- break;
- }
- return(0);
+ break;
+ }
+ return (0);
}
+WORD32 impd_parse_eq_subband_gain_spline(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_eq_subband_gain_spline_struct* str_eq_subband_gain_spline,
+ WORD32 eq_subband_gains_count) {
+ WORD32 err = 0, eq_nodes_cnt, j, k, bits, *eq_freq_delta;
+ FLOAT32* peq_gain_delta;
+
+ for (j = 0; j < eq_subband_gains_count; j++) {
+ eq_nodes_cnt = impd_read_bits_buf(it_bit_buff, 5);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ str_eq_subband_gain_spline->num_eq_nodes = eq_nodes_cnt + 2;
+
+ err = impd_decode_eq_slope_code(it_bit_buff,
+ &(str_eq_subband_gain_spline->eq_slope[0]),
+ str_eq_subband_gain_spline->num_eq_nodes);
+ if (err) return (err);
+
+ eq_freq_delta = &(str_eq_subband_gain_spline->eq_freq_delta[1]);
+ for (k = 1; k < str_eq_subband_gain_spline->num_eq_nodes; k++) {
+ bits = impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ *eq_freq_delta = bits + 1;
+ eq_freq_delta++;
+ }
+ err = impd_decode_gain_initial_code(
+ it_bit_buff, &(str_eq_subband_gain_spline->eq_gain_initial));
+ if (err) return (err);
-WORD32 impd_parse_eq_subband_gain_spline(ia_bit_buf_struct* it_bit_buff,
- ia_eq_subband_gain_spline_struct* str_eq_subband_gain_spline,
- WORD32 eq_subband_gains_count)
-{
- WORD32 err=0, eq_nodes_cnt, j,k, bits, *eq_freq_delta;
- FLOAT32 *peq_gain_delta;
-
- for (j=0; j<eq_subband_gains_count; j++)
- {
- eq_nodes_cnt = impd_read_bits_buf(it_bit_buff, 5);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- str_eq_subband_gain_spline->num_eq_nodes = eq_nodes_cnt + 2;
-
-
- err = impd_decode_eq_slope_code(it_bit_buff, &(str_eq_subband_gain_spline->eq_slope[0]),str_eq_subband_gain_spline->num_eq_nodes);
- if (err) return (err);
-
- eq_freq_delta=&(str_eq_subband_gain_spline->eq_freq_delta[1]);
- for (k=1; k<str_eq_subband_gain_spline->num_eq_nodes; k++)
- {
-
- bits = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- *eq_freq_delta = bits+1;
- eq_freq_delta++;
-
- }
-
- err = impd_decode_gain_initial_code( it_bit_buff, &(str_eq_subband_gain_spline->eq_gain_initial));
- if (err)
- return (err);
+ peq_gain_delta = &(str_eq_subband_gain_spline->eq_gain_delta[1]);
+ for (k = 1; k < str_eq_subband_gain_spline->num_eq_nodes; k++) {
+ bits = impd_read_bits_buf(it_bit_buff, 5);
+ if (it_bit_buff->error) return it_bit_buff->error;
- peq_gain_delta=&(str_eq_subband_gain_spline->eq_gain_delta[1]);
- for (k=1; k<str_eq_subband_gain_spline->num_eq_nodes; k++)
- {
+ *peq_gain_delta = eq_gain_delta_tbl[bits];
+ peq_gain_delta++;
+ }
+ str_eq_subband_gain_spline++;
+ }
+ return (0);
+}
- bits = impd_read_bits_buf(it_bit_buff, 5);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+WORD32 impd_parse_eq_subband_gain_vector(
+ ia_bit_buf_struct* it_bit_buff, const WORD32 eq_subband_gain_count,
+ ia_eq_subband_gain_vector* str_eq_subband_gain_vector,
+ WORD32 eq_subband_gains_count) {
+ WORD32 m, k, temp;
- *peq_gain_delta = eq_gain_delta_tbl[bits];
- peq_gain_delta++;
+ for (k = 0; k < eq_subband_gains_count; k++) {
+ for (m = 0; m < eq_subband_gain_count; m++) {
+ WORD32 sign, bs_eq_subband_gain;
+ temp = impd_read_bits_buf(it_bit_buff, 9);
+ if (it_bit_buff->error) return it_bit_buff->error;
- }
- str_eq_subband_gain_spline++;
- }
- return (0);
-}
+ sign = (temp >> 8) & 1;
+ bs_eq_subband_gain = temp & 0x7F;
-WORD32 impd_parse_eq_subband_gain_vector(ia_bit_buf_struct* it_bit_buff,
- const WORD32 eq_subband_gain_count,
- ia_eq_subband_gain_vector* str_eq_subband_gain_vector,
- WORD32 eq_subband_gains_count)
-{
- WORD32 m,k,temp;
-
- for (k=0; k<eq_subband_gains_count; k++)
- {
- for (m=0; m<eq_subband_gain_count; m++)
- {
- WORD32 sign, bs_eq_subband_gain;
- temp = impd_read_bits_buf(it_bit_buff, 9);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- sign= (temp>>8)&1;
- bs_eq_subband_gain = temp & 0x7F;
-
- sign=sign<<1;
- str_eq_subband_gain_vector->eq_subband_gain[m] = ((1-sign)*bs_eq_subband_gain) * 0.125f;
- }
- str_eq_subband_gain_vector++;
+ sign = sign << 1;
+ str_eq_subband_gain_vector->eq_subband_gain[m] =
+ ((1 - sign) * bs_eq_subband_gain) * 0.125f;
}
- return (0);
+ str_eq_subband_gain_vector++;
+ }
+ return (0);
}
WORD32 impd_parse_eq_coefficients(ia_bit_buf_struct* it_bit_buff,
- ia_eq_coeff_struct* str_eq_coeff)
-{
- WORD32 err = 0;
- WORD32 eq_gain_cnt, mu, nu,temp;
- WORD32 subband_gain_len_tbl[7]={0,32,39,64,71,128,135};
-
- str_eq_coeff->eq_delay_max_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if (str_eq_coeff->eq_delay_max_present)
- {
- mu = impd_read_bits_buf(it_bit_buff, 5);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- nu = impd_read_bits_buf(it_bit_buff, 3);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- str_eq_coeff->eq_delay_max = 16 * mu * (1<<nu);
+ ia_eq_coeff_struct* str_eq_coeff) {
+ WORD32 err = 0;
+ WORD32 eq_gain_cnt, mu, nu, temp;
+ WORD32 subband_gain_len_tbl[7] = {0, 32, 39, 64, 71, 128, 135};
+
+ str_eq_coeff->eq_delay_max_present = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (str_eq_coeff->eq_delay_max_present) {
+ mu = impd_read_bits_buf(it_bit_buff, 5);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ nu = impd_read_bits_buf(it_bit_buff, 3);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ str_eq_coeff->eq_delay_max = 16 * mu * (1 << nu);
+ }
+
+ str_eq_coeff->unique_filter_block_count = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ err = impd_parse_filt_block(it_bit_buff, &(str_eq_coeff->str_filter_block[0]),
+ str_eq_coeff->unique_filter_block_count);
+ if (err) return (err);
+
+ str_eq_coeff->unique_td_filter_element_count =
+ impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ err = impd_parse_unique_td_filt_ele(
+ it_bit_buff, &(str_eq_coeff->unique_td_filt_ele[0]),
+ str_eq_coeff->unique_td_filter_element_count);
+ if (err) return (err);
+
+ str_eq_coeff->unique_eq_subband_gains_count =
+ impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (str_eq_coeff->unique_eq_subband_gains_count > 0) {
+ temp = impd_read_bits_buf(it_bit_buff, 5);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ str_eq_coeff->eq_subband_gain_representation = (temp >> 4) & 0x01;
+
+ str_eq_coeff->eq_subband_gain_format = temp & 0x0F;
+
+ if (str_eq_coeff->eq_subband_gain_format == GAINFORMAT_UNIFORM) {
+ eq_gain_cnt = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ str_eq_coeff->eq_subband_gain_count = eq_gain_cnt + 1;
+
+ } else
+ str_eq_coeff->eq_subband_gain_count =
+ subband_gain_len_tbl[str_eq_coeff->eq_subband_gain_format];
+
+ if (str_eq_coeff->eq_subband_gain_representation == 1) {
+ err = impd_parse_eq_subband_gain_spline(
+ it_bit_buff, &(str_eq_coeff->str_eq_subband_gain_spline[0]),
+ str_eq_coeff->unique_eq_subband_gains_count);
+ if (err) return (err);
+ } else {
+ err = impd_parse_eq_subband_gain_vector(
+ it_bit_buff, str_eq_coeff->eq_subband_gain_count,
+ &(str_eq_coeff->str_eq_subband_gain_vector[0]),
+ str_eq_coeff->unique_eq_subband_gains_count);
+ if (err) return (err);
}
+ }
- str_eq_coeff->unique_filter_block_count = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
-
- err = impd_parse_filt_block (it_bit_buff, &(str_eq_coeff->str_filter_block[0]),str_eq_coeff->unique_filter_block_count);
- if (err)
- return(err);
-
- str_eq_coeff->unique_td_filter_element_count = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
-
- err = impd_parse_unique_td_filt_ele ( it_bit_buff, &(str_eq_coeff->unique_td_filt_ele[0]),str_eq_coeff->unique_td_filter_element_count);
- if (err)
- return(err);
-
- str_eq_coeff->unique_eq_subband_gains_count = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if (str_eq_coeff->unique_eq_subband_gains_count>0)
- {
- temp=impd_read_bits_buf(it_bit_buff, 5);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- str_eq_coeff->eq_subband_gain_representation = (temp>>4)&0x01;
-
- str_eq_coeff->eq_subband_gain_format = temp&0x0F;
-
- if (str_eq_coeff->eq_subband_gain_format==GAINFORMAT_UNIFORM)
- {
- eq_gain_cnt = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- str_eq_coeff->eq_subband_gain_count = eq_gain_cnt + 1;
-
- }
- else
- str_eq_coeff->eq_subband_gain_count=subband_gain_len_tbl[str_eq_coeff->eq_subband_gain_format];
-
-
-
- if (str_eq_coeff->eq_subband_gain_representation == 1)
- {
-
- err = impd_parse_eq_subband_gain_spline( it_bit_buff, &(str_eq_coeff->str_eq_subband_gain_spline[0]),str_eq_coeff->unique_eq_subband_gains_count);
- if (err)
- return(err);
- }
- else
- {
-
- err = impd_parse_eq_subband_gain_vector( it_bit_buff, str_eq_coeff->eq_subband_gain_count, &(str_eq_coeff->str_eq_subband_gain_vector[0]),str_eq_coeff->unique_eq_subband_gains_count);
- if (err)
- return(err);
-
- }
- }
-
- return(0);
+ return (0);
}
-
-
-WORD32 impd_parser_td_filter_cascade (ia_bit_buf_struct* it_bit_buff,
- ia_eq_instructions_struct* str_eq_instructions,
- ia_td_filter_cascade_struct* str_td_filter_cascade)
-{
- //WORD32 err=0,
- WORD32 i, ii, k;
- WORD32 eq_cascade_gain;
- ia_filter_block_refs_struct* str_filter_block_refs=&(str_td_filter_cascade->str_filter_block_refs[0]);
-
- for (i=0; i<str_eq_instructions->eq_ch_group_count; i++)
- {
- str_td_filter_cascade->eq_cascade_gain_present[i] = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (str_td_filter_cascade->eq_cascade_gain_present[i]) {
- eq_cascade_gain = impd_read_bits_buf(it_bit_buff, 10);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- str_td_filter_cascade->eq_cascade_gain[i] = 0.125f * eq_cascade_gain - 96.0f;
- }
- else
- {
- str_td_filter_cascade->eq_cascade_gain[i] = 0.0f;
- }
-
-
- str_filter_block_refs->filter_block_count = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- for (ii=0; ii<str_filter_block_refs->filter_block_count; ii++)
- {
- str_filter_block_refs->filter_block_index[ii] = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- str_filter_block_refs++;
+WORD32 impd_parser_td_filter_cascade(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_eq_instructions_struct* str_eq_instructions,
+ ia_td_filter_cascade_struct* str_td_filter_cascade) {
+ // WORD32 err=0,
+ WORD32 i, ii, k;
+ WORD32 eq_cascade_gain;
+ ia_filter_block_refs_struct* str_filter_block_refs =
+ &(str_td_filter_cascade->str_filter_block_refs[0]);
+
+ for (i = 0; i < str_eq_instructions->eq_ch_group_count; i++) {
+ str_td_filter_cascade->eq_cascade_gain_present[i] =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (str_td_filter_cascade->eq_cascade_gain_present[i]) {
+ eq_cascade_gain = impd_read_bits_buf(it_bit_buff, 10);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ str_td_filter_cascade->eq_cascade_gain[i] =
+ 0.125f * eq_cascade_gain - 96.0f;
+ } else {
+ str_td_filter_cascade->eq_cascade_gain[i] = 0.0f;
}
- str_td_filter_cascade->eq_phase_alignment_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if (str_td_filter_cascade->eq_phase_alignment_present)
- {
-
- for (i=0; i<str_eq_instructions->eq_ch_group_count; i++)
- {
- for (k=i+1; k<str_eq_instructions->eq_ch_group_count; k++)
- {
- str_td_filter_cascade->eq_phase_alignment[i][k] = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- }
- }
-
+ str_filter_block_refs->filter_block_count =
+ impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ for (ii = 0; ii < str_filter_block_refs->filter_block_count; ii++) {
+ str_filter_block_refs->filter_block_index[ii] =
+ impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
}
- else
- {
- for (i=0; i<str_eq_instructions->eq_ch_group_count; i++)
- {
- for (k=i+1; k<str_eq_instructions->eq_ch_group_count; k++)
- str_td_filter_cascade->eq_phase_alignment[i][k] = 1;
-
- }
+ str_filter_block_refs++;
+ }
+
+ str_td_filter_cascade->eq_phase_alignment_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (str_td_filter_cascade->eq_phase_alignment_present) {
+ for (i = 0; i < str_eq_instructions->eq_ch_group_count; i++) {
+ for (k = i + 1; k < str_eq_instructions->eq_ch_group_count; k++) {
+ str_td_filter_cascade->eq_phase_alignment[i][k] =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
}
+ } else {
+ for (i = 0; i < str_eq_instructions->eq_ch_group_count; i++) {
+ for (k = i + 1; k < str_eq_instructions->eq_ch_group_count; k++)
+ str_td_filter_cascade->eq_phase_alignment[i][k] = 1;
+ }
+ }
- return(0);
+ return (0);
}
+WORD32 impd_parse_eq_instructions(
+ ia_bit_buf_struct* it_bit_buff, ia_drc_config* drc_config,
+ ia_eq_instructions_struct* str_eq_instructions) {
+ WORD32 i, k, channel_count, temp;
+ WORD32 dmix_id_present, additional_dmix_id_present,
+ additional_dmix_id_cnt = 0;
+ WORD32 additional_drc_set_id_present, additional_drc_set_id_cnt;
-WORD32 impd_parse_eq_instructions(ia_bit_buf_struct* it_bit_buff,
- ia_drc_config* drc_config,
- ia_eq_instructions_struct* str_eq_instructions)
-{
- WORD32 i, k, channel_count, temp;
- WORD32 dmix_id_present, additional_dmix_id_present, additional_dmix_id_cnt=0;
- WORD32 additional_drc_set_id_present, additional_drc_set_id_cnt;
-
- temp=impd_read_bits_buf(it_bit_buff, 11);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ temp = impd_read_bits_buf(it_bit_buff, 11);
+ if (it_bit_buff->error) return it_bit_buff->error;
- str_eq_instructions->eq_set_id = (temp>>5)&0x3F;
+ str_eq_instructions->eq_set_id = (temp >> 5) & 0x3F;
- str_eq_instructions->eq_set_complexity_level = (temp>>1)&0x0F;
+ str_eq_instructions->eq_set_complexity_level = (temp >> 1) & 0x0F;
- dmix_id_present = temp&0x01;
+ dmix_id_present = temp & 0x01;
- if (dmix_id_present)
- {
- temp=impd_read_bits_buf(it_bit_buff, 9);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ if (dmix_id_present) {
+ temp = impd_read_bits_buf(it_bit_buff, 9);
+ if (it_bit_buff->error) return it_bit_buff->error;
- str_eq_instructions->downmix_id[0] = (temp>>2)&0x7F;
+ str_eq_instructions->downmix_id[0] = (temp >> 2) & 0x7F;
- str_eq_instructions->eq_apply_to_downmix = (temp>>1)&0x01;
+ str_eq_instructions->eq_apply_to_downmix = (temp >> 1) & 0x01;
- additional_dmix_id_present = temp&0x01;
+ additional_dmix_id_present = temp & 0x01;
- if (additional_dmix_id_present)
- {
- additional_dmix_id_cnt = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ if (additional_dmix_id_present) {
+ additional_dmix_id_cnt = impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
- for (i=1; i<additional_dmix_id_cnt+1; i++)
- {
- str_eq_instructions->downmix_id[i] = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- }
- }
- else
- {
- str_eq_instructions->downmix_id[0] = 0;
+ for (i = 1; i < additional_dmix_id_cnt + 1; i++) {
+ str_eq_instructions->downmix_id[i] = impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
}
+ } else {
+ str_eq_instructions->downmix_id[0] = 0;
+ }
- str_eq_instructions->dwnmix_id_count = 1 + additional_dmix_id_cnt;
+ str_eq_instructions->dwnmix_id_count = 1 + additional_dmix_id_cnt;
- temp=impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ temp = impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
- str_eq_instructions->drc_set_id[0] = (temp>>1)&0x3F;
+ str_eq_instructions->drc_set_id[0] = (temp >> 1) & 0x3F;
- additional_drc_set_id_present = temp&0x01;
+ additional_drc_set_id_present = temp & 0x01;
- if (additional_drc_set_id_present)
- {
- additional_drc_set_id_cnt = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ if (additional_drc_set_id_present) {
+ additional_drc_set_id_cnt = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
- for (i=1; i<additional_drc_set_id_cnt+1; i++)
- {
- str_eq_instructions->drc_set_id[i] = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- }
- else
- {
- additional_drc_set_id_cnt = 0;
+ for (i = 1; i < additional_drc_set_id_cnt + 1; i++) {
+ str_eq_instructions->drc_set_id[i] = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
}
- str_eq_instructions->drc_set_id_count = 1 + additional_drc_set_id_cnt;
-
- temp=impd_read_bits_buf(it_bit_buff, 17);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- str_eq_instructions->eq_set_purpose =(temp>>1)&0xFFFF;
-
- str_eq_instructions->depends_on_eq_set_present = temp&0x01;
-
- if (str_eq_instructions->depends_on_eq_set_present)
- {
- str_eq_instructions->depends_on_eq_set = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ } else {
+ additional_drc_set_id_cnt = 0;
+ }
+ str_eq_instructions->drc_set_id_count = 1 + additional_drc_set_id_cnt;
+
+ temp = impd_read_bits_buf(it_bit_buff, 17);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ str_eq_instructions->eq_set_purpose = (temp >> 1) & 0xFFFF;
+
+ str_eq_instructions->depends_on_eq_set_present = temp & 0x01;
+
+ if (str_eq_instructions->depends_on_eq_set_present) {
+ str_eq_instructions->depends_on_eq_set = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ } else {
+ str_eq_instructions->no_independent_eq_use =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+
+ str_eq_instructions->eq_channel_count = channel_count =
+ drc_config->channel_layout.base_channel_count;
+
+ if ((dmix_id_present == 1) &&
+ (str_eq_instructions->eq_apply_to_downmix == 1) &&
+ (str_eq_instructions->downmix_id[0] != 0) &&
+ (str_eq_instructions->downmix_id[0] != ID_FOR_ANY_DOWNMIX) &&
+ (str_eq_instructions->dwnmix_id_count == 1)) {
+ for (i = 0; i < drc_config->dwnmix_instructions_count; i++) {
+ if (str_eq_instructions->downmix_id[0] ==
+ drc_config->dwnmix_instructions[i].downmix_id)
+ break;
}
- else
- {
- str_eq_instructions->no_independent_eq_use = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ if (i == drc_config->dwnmix_instructions_count) {
+ return UNEXPECTED_ERROR;
}
- str_eq_instructions->eq_channel_count = channel_count = drc_config->channel_layout.base_channel_count;
-
- if ((dmix_id_present == 1) && (str_eq_instructions->eq_apply_to_downmix == 1) &&
- (str_eq_instructions->downmix_id[0] != 0) && (str_eq_instructions->downmix_id[0] != ID_FOR_ANY_DOWNMIX) && (str_eq_instructions->dwnmix_id_count==1))
- {
- for(i=0; i<drc_config->dwnmix_instructions_count; i++)
- {
- if (str_eq_instructions->downmix_id[0] == drc_config->dwnmix_instructions[i].downmix_id)
- break;
- }
- if (i == drc_config->dwnmix_instructions_count)
- {
- return UNEXPECTED_ERROR;
- }
+ str_eq_instructions->eq_channel_count = channel_count =
+ drc_config->dwnmix_instructions[i].target_channel_count;
+ } else if ((str_eq_instructions->downmix_id[0] == ID_FOR_ANY_DOWNMIX) ||
+ (str_eq_instructions->dwnmix_id_count > 1)) {
+ channel_count = 1;
+ }
+
+ str_eq_instructions->eq_ch_group_count = 0;
+
+ for (i = 0; i < channel_count; i++) {
+ WORD32 new_group = 1;
+ str_eq_instructions->eq_ch_group_of_channel[i] =
+ impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ for (k = 0; k < i; k++) {
+ if (str_eq_instructions->eq_ch_group_of_channel[i] ==
+ str_eq_instructions->eq_ch_group_of_channel[k]) {
+ new_group = 0;
+ break;
+ }
+ }
- str_eq_instructions->eq_channel_count = channel_count = drc_config->dwnmix_instructions[i].target_channel_count;
+ if (new_group == 1) {
+ str_eq_instructions->eq_ch_group_count += 1;
}
- else if ((str_eq_instructions->downmix_id[0] == ID_FOR_ANY_DOWNMIX) || (str_eq_instructions->dwnmix_id_count > 1))
- {
- channel_count = 1;
+ }
+
+ str_eq_instructions->td_filter_cascade_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (str_eq_instructions->td_filter_cascade_present) {
+ impd_parser_td_filter_cascade(
+ it_bit_buff, str_eq_instructions,
+ &(str_eq_instructions->str_td_filter_cascade));
+ }
+
+ str_eq_instructions->subband_gains_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (str_eq_instructions->subband_gains_present) {
+ for (i = 0; i < str_eq_instructions->eq_ch_group_count; i++) {
+ str_eq_instructions->subband_gains_index[i] =
+ impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
}
+ }
+
+ str_eq_instructions->eq_transition_duration_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (str_eq_instructions->eq_transition_duration_present) {
+ WORD32 bs_eq_transition_duration;
+ bs_eq_transition_duration = impd_read_bits_buf(it_bit_buff, 5);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ str_eq_instructions->eq_transition_duration = (WORD32)(
+ 0.001f *
+ (FLOAT32)pow(2.0f, 2.0f + bs_eq_transition_duration * 0.0625f));
+ }
+ return (0);
+}
- str_eq_instructions->eq_ch_group_count = 0;
-
- for (i=0; i<channel_count; i++)
- {
- WORD32 new_group = 1;
- str_eq_instructions->eq_ch_group_of_channel[i] = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- for (k=0; k<i; k++)
- {
- if (str_eq_instructions->eq_ch_group_of_channel[i] == str_eq_instructions->eq_ch_group_of_channel[k])
- {
- new_group = 0;
- break;
- }
- }
+WORD32 impd_parse_loud_eq_instructions(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_loud_eq_instructions_struct* loud_eq_instructions) {
+ WORD32 i, bs_loud_eq_scaling, bs_loud_eq_offset, temp;
+ WORD32 dmix_id_present, additional_dmix_id_present,
+ additional_dmix_id_cnt = 0;
+ WORD32 drc_set_id_present, additional_drc_set_id_present,
+ additional_drc_set_id_cnt = 0;
+ WORD32 eq_set_id_present, additional_eq_set_id_present,
+ additional_eq_set_id_cnt = 0;
- if (new_group == 1)
- {
- str_eq_instructions->eq_ch_group_count += 1;
- }
- }
+ temp = impd_read_bits_buf(it_bit_buff, 9);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ loud_eq_instructions->loud_eq_set_id = (temp >> 5) & 0x0F;
- str_eq_instructions->td_filter_cascade_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ loud_eq_instructions->drc_location = (temp >> 1) & 0x0F;
- if (str_eq_instructions->td_filter_cascade_present)
- {
- impd_parser_td_filter_cascade (it_bit_buff, str_eq_instructions, &(str_eq_instructions->str_td_filter_cascade));
- }
+ dmix_id_present = temp & 0x01;
- str_eq_instructions->subband_gains_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if (str_eq_instructions->subband_gains_present)
- {
- for (i=0; i<str_eq_instructions->eq_ch_group_count; i++)
- {
- str_eq_instructions->subband_gains_index[i] = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- }
+ if (dmix_id_present) {
+ temp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
- str_eq_instructions->eq_transition_duration_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ loud_eq_instructions->downmix_id[0] = (temp >> 1) & 0x7F;
- if (str_eq_instructions->eq_transition_duration_present)
- {
- WORD32 bs_eq_transition_duration;
- bs_eq_transition_duration = impd_read_bits_buf(it_bit_buff, 5);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ additional_dmix_id_present = temp & 0x01;
- str_eq_instructions->eq_transition_duration = (WORD32)(0.001f * (FLOAT32)pow(2.0f, 2.0f + bs_eq_transition_duration * 0.0625f));
- }
- return(0);
-}
+ if (additional_dmix_id_present) {
+ additional_dmix_id_cnt = impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
-WORD32 impd_parse_loud_eq_instructions(ia_bit_buf_struct* it_bit_buff,
- ia_loud_eq_instructions_struct* loud_eq_instructions)
-{
- WORD32 i, bs_loud_eq_scaling, bs_loud_eq_offset, temp;
- WORD32 dmix_id_present, additional_dmix_id_present, additional_dmix_id_cnt = 0;
- WORD32 drc_set_id_present, additional_drc_set_id_present, additional_drc_set_id_cnt = 0;
- WORD32 eq_set_id_present, additional_eq_set_id_present, additional_eq_set_id_cnt = 0;
-
- temp=impd_read_bits_buf(it_bit_buff, 9);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- loud_eq_instructions->loud_eq_set_id = (temp>>5)&0x0F;
-
- loud_eq_instructions->drc_location = (temp>>1)&0x0F;
-
- dmix_id_present = temp&0x01;
-
- if (dmix_id_present)
- {
- temp=impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- loud_eq_instructions->downmix_id[0] = (temp>>1)&0x7F;
-
- additional_dmix_id_present = temp&0x01;
-
- if (additional_dmix_id_present)
- {
- additional_dmix_id_cnt = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- for (i=1; i<additional_dmix_id_cnt+1; i++)
- {
- loud_eq_instructions->downmix_id[i] = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- }
- }
- else
- {
- loud_eq_instructions->downmix_id[0] = 0;
+ for (i = 1; i < additional_dmix_id_cnt + 1; i++) {
+ loud_eq_instructions->downmix_id[i] =
+ impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
}
+ } else {
+ loud_eq_instructions->downmix_id[0] = 0;
+ }
- loud_eq_instructions->dwnmix_id_count = 1 + additional_dmix_id_cnt;
+ loud_eq_instructions->dwnmix_id_count = 1 + additional_dmix_id_cnt;
- drc_set_id_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ drc_set_id_present = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
- if (drc_set_id_present)
- {
- temp=impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ if (drc_set_id_present) {
+ temp = impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
- loud_eq_instructions->drc_set_id[0] = (temp>>1)&0x3F;
+ loud_eq_instructions->drc_set_id[0] = (temp >> 1) & 0x3F;
- additional_drc_set_id_present = temp&0x01;
+ additional_drc_set_id_present = temp & 0x01;
- if (additional_drc_set_id_present)
- {
- additional_drc_set_id_cnt = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ if (additional_drc_set_id_present) {
+ additional_drc_set_id_cnt = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
- for (i=1; i<additional_drc_set_id_cnt+1; i++)
- {
- loud_eq_instructions->drc_set_id[i] = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- }
- }
- else
- {
- loud_eq_instructions->drc_set_id[0] = 0;
+ for (i = 1; i < additional_drc_set_id_cnt + 1; i++) {
+ loud_eq_instructions->drc_set_id[i] =
+ impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
}
+ } else {
+ loud_eq_instructions->drc_set_id[0] = 0;
+ }
- loud_eq_instructions->drc_set_id_count = 1 + additional_drc_set_id_cnt;
+ loud_eq_instructions->drc_set_id_count = 1 + additional_drc_set_id_cnt;
- eq_set_id_present = impd_read_bits_buf(it_bit_buff, 1);
+ eq_set_id_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ if (it_bit_buff->error) return it_bit_buff->error;
- if (eq_set_id_present)
- {
- temp=impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ if (eq_set_id_present) {
+ temp = impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
- loud_eq_instructions->eq_set_id[0] = (temp>>1)&0x3F;
+ loud_eq_instructions->eq_set_id[0] = (temp >> 1) & 0x3F;
- additional_eq_set_id_present = temp&0x01;
+ additional_eq_set_id_present = temp & 0x01;
- if (additional_eq_set_id_present)
- {
- additional_eq_set_id_cnt = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ if (additional_eq_set_id_present) {
+ additional_eq_set_id_cnt = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
- for (i=0; i<additional_eq_set_id_cnt; i++)
- {
- loud_eq_instructions->eq_set_id[i+1] = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- }
- }
- else
- {
- loud_eq_instructions->eq_set_id[0] = 0;
+ for (i = 0; i < additional_eq_set_id_cnt; i++) {
+ loud_eq_instructions->eq_set_id[i + 1] =
+ impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
}
- loud_eq_instructions->eq_set_id_count = 1 + additional_eq_set_id_cnt;
-
- temp=impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ } else {
+ loud_eq_instructions->eq_set_id[0] = 0;
+ }
+ loud_eq_instructions->eq_set_id_count = 1 + additional_eq_set_id_cnt;
- loud_eq_instructions->loudness_after_drc = (temp>>7)&0x01;
+ temp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
- loud_eq_instructions->loudness_after_eq = (temp>>6)&0x01;
+ loud_eq_instructions->loudness_after_drc = (temp >> 7) & 0x01;
- loud_eq_instructions->loud_eq_gain_sequence_count = temp&0x3F;
+ loud_eq_instructions->loudness_after_eq = (temp >> 6) & 0x01;
- for (i=0; i<loud_eq_instructions->loud_eq_gain_sequence_count; i++)
- {
- temp=impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ loud_eq_instructions->loud_eq_gain_sequence_count = temp & 0x3F;
- loud_eq_instructions->gain_seq_idx[i] = (temp>>1)&0x3F;
+ for (i = 0; i < loud_eq_instructions->loud_eq_gain_sequence_count; i++) {
+ temp = impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
- loud_eq_instructions->drc_characteristic_format_is_cicp[i] = temp&0x01;
-
- if (loud_eq_instructions->drc_characteristic_format_is_cicp[i])
- {
- loud_eq_instructions->drc_characteristic[i] = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- else
- {
- temp = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ loud_eq_instructions->gain_seq_idx[i] = (temp >> 1) & 0x3F;
- loud_eq_instructions->drc_characteristic_left_index[i] = (temp>>4)&0x0F;
+ loud_eq_instructions->drc_characteristic_format_is_cicp[i] = temp & 0x01;
- loud_eq_instructions->drc_characteristic_right_index[i] = temp&0x0F;
+ if (loud_eq_instructions->drc_characteristic_format_is_cicp[i]) {
+ loud_eq_instructions->drc_characteristic[i] =
+ impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ } else {
+ temp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
- }
+ loud_eq_instructions->drc_characteristic_left_index[i] =
+ (temp >> 4) & 0x0F;
- temp=impd_read_bits_buf(it_bit_buff, 9);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ loud_eq_instructions->drc_characteristic_right_index[i] = temp & 0x0F;
+ }
- loud_eq_instructions->frequency_range_index[i] = (temp>>3)&0x3F;
+ temp = impd_read_bits_buf(it_bit_buff, 9);
+ if (it_bit_buff->error) return it_bit_buff->error;
- bs_loud_eq_scaling = temp&0x07;
+ loud_eq_instructions->frequency_range_index[i] = (temp >> 3) & 0x3F;
- loud_eq_instructions->loud_eq_scaling[i] = (FLOAT32)pow (2.0f, -0.5f * bs_loud_eq_scaling);
+ bs_loud_eq_scaling = temp & 0x07;
- bs_loud_eq_offset = impd_read_bits_buf(it_bit_buff, 5);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ loud_eq_instructions->loud_eq_scaling[i] =
+ (FLOAT32)pow(2.0f, -0.5f * bs_loud_eq_scaling);
- loud_eq_instructions->loud_eq_offset[i] = 1.5f * bs_loud_eq_offset - 16.0f;
+ bs_loud_eq_offset = impd_read_bits_buf(it_bit_buff, 5);
+ if (it_bit_buff->error) return it_bit_buff->error;
- }
- return(0);
+ loud_eq_instructions->loud_eq_offset[i] = 1.5f * bs_loud_eq_offset - 16.0f;
+ }
+ return (0);
}
-
-
diff --git a/decoder/drc_src/impd_drc_eq.c b/decoder/drc_src/impd_drc_eq.c
index 7519526..4acc37b 100644
--- a/decoder/drc_src/impd_drc_eq.c
+++ b/decoder/drc_src/impd_drc_eq.c
@@ -29,1526 +29,1364 @@
#include "impd_drc_gain_dec.h"
#include "impd_drc_eq.h"
+#define CONFIG_REAL_POLE 0
+#define CONFIG_COMPLEX_POLE 1
+#define CONFIG_REAL_ZERO_RADIUS_ONE 2
+#define CONFIG_REAL_ZERO 3
+#define CONFIG_GENERIC_ZERO 4
-#define CONFIG_REAL_POLE 0
-#define CONFIG_COMPLEX_POLE 1
-#define CONFIG_REAL_ZERO_RADIUS_ONE 2
-#define CONFIG_REAL_ZERO 3
-#define CONFIG_GENERIC_ZERO 4
+#define STEP_RATIO_F_LO 20.0f
+#define STEP_RATIO_F_HI 24000.0f
+#define STEP_RATIO_EQ_NODE_COUNT_MAX 33
-#define STEP_RATIO_F_LO 20.0f
-#define STEP_RATIO_F_HI 24000.0f
-#define STEP_RATIO_EQ_NODE_COUNT_MAX 33
-
-#define FILTER_ELEMENT_FORMAT_POLE_ZERO 0
-#define FILTER_ELEMENT_FORMAT_FIR 1
+#define FILTER_ELEMENT_FORMAT_POLE_ZERO 0
+#define FILTER_ELEMENT_FORMAT_FIR 1
#ifndef M_PI
#define M_PI (3.14159265358979323846)
#endif
-WORD32 impd_derive_subband_center_freq(WORD32 eq_subband_gain_count,
- WORD32 eq_subband_gain_format,
- FLOAT32 sample_rate,
- FLOAT32* subband_center_freq)
-{
- WORD32 i;
- FLOAT32 width, offset;
- switch (eq_subband_gain_format)
- {
- case GAINFORMAT_QMF32:
- case GAINFORMAT_QMF64:
- case GAINFORMAT_QMF128:
- case GAINFORMAT_UNIFORM:
- width = 0.5f * sample_rate / (FLOAT32) eq_subband_gain_count;
- offset = 0.5f * width;
- for (i=0; i<eq_subband_gain_count; i++)
- {
- subband_center_freq[i] = offset;
- offset = offset + width;
- }
- break;
- case GAINFORMAT_QMFHYBRID39:
- case GAINFORMAT_QMFHYBRID71:
- case GAINFORMAT_QMFHYBRID135:
- return(UNEXPECTED_ERROR);
- break;
- default:
- break;
- }
- return (0);
+WORD32 impd_derive_subband_center_freq(WORD32 eq_subband_gain_count,
+ WORD32 eq_subband_gain_format,
+ FLOAT32 sample_rate,
+ FLOAT32* subband_center_freq) {
+ WORD32 i;
+ FLOAT32 width, offset;
+ switch (eq_subband_gain_format) {
+ case GAINFORMAT_QMF32:
+ case GAINFORMAT_QMF64:
+ case GAINFORMAT_QMF128:
+ case GAINFORMAT_UNIFORM:
+ width = 0.5f * sample_rate / (FLOAT32)eq_subband_gain_count;
+ offset = 0.5f * width;
+ for (i = 0; i < eq_subband_gain_count; i++) {
+ subband_center_freq[i] = offset;
+ offset = offset + width;
+ }
+ break;
+ case GAINFORMAT_QMFHYBRID39:
+ case GAINFORMAT_QMFHYBRID71:
+ case GAINFORMAT_QMFHYBRID135:
+ return (UNEXPECTED_ERROR);
+ break;
+ default:
+ break;
+ }
+ return (0);
}
-VOID impd_calc_fir_filt_response(WORD32 fir_order,
- WORD32 fir_symmetry,
- FLOAT32 *coeff,
- FLOAT32 frequency_radian,
- FLOAT32 *response)
-{
- WORD32 m;
- FLOAT32 sum = 0.0f;
- WORD32 o2;
-
- if ((fir_order & 0x1) == 0)
- {
- o2 = fir_order/2;
- if (fir_symmetry == 0)
- {
- /*ITTIAM: sum is been over written after the loop
- None of the conformance streams with us entering this function*/
- for (m=1; m<=o2; m++)
- {
- sum += coeff[o2-m] *(FLOAT32)cos (m * frequency_radian);
- }
- sum += sum;
- sum = coeff[o2];
- }
- else
- {
- for (m=1; m<=o2; m++)
- {
- sum += coeff[o2-m] * (FLOAT32)sin (m * frequency_radian);
- }
- sum += sum;
- }
+VOID impd_calc_fir_filt_response(WORD32 fir_order, WORD32 fir_symmetry,
+ FLOAT32* coeff, FLOAT32 frequency_radian,
+ FLOAT32* response) {
+ WORD32 m;
+ FLOAT32 sum = 0.0f;
+ WORD32 o2;
+
+ if ((fir_order & 0x1) == 0) {
+ o2 = fir_order / 2;
+ if (fir_symmetry == 0) {
+ /*ITTIAM: sum is been over written after the loop
+ None of the conformance streams with us entering this function*/
+ for (m = 1; m <= o2; m++) {
+ sum += coeff[o2 - m] * (FLOAT32)cos(m * frequency_radian);
+ }
+ sum += sum;
+ sum = coeff[o2];
+ } else {
+ for (m = 1; m <= o2; m++) {
+ sum += coeff[o2 - m] * (FLOAT32)sin(m * frequency_radian);
+ }
+ sum += sum;
}
- else
- {
- o2 = (fir_order+1)/2;
- if (fir_symmetry == 0)
- {
- for (m=1; m<=o2; m++)
- {
- sum += coeff[o2-m] * (FLOAT32)cos ((m - 0.5f) * frequency_radian);
- }
- }
- else
- {
- for (m=1; m<=o2; m++)
- {
- sum += coeff[o2-m] * (FLOAT32)sin ((m - 0.5f) * frequency_radian);
- }
- }
- sum += sum;
+ } else {
+ o2 = (fir_order + 1) / 2;
+ if (fir_symmetry == 0) {
+ for (m = 1; m <= o2; m++) {
+ sum += coeff[o2 - m] * (FLOAT32)cos((m - 0.5f) * frequency_radian);
+ }
+ } else {
+ for (m = 1; m <= o2; m++) {
+ sum += coeff[o2 - m] * (FLOAT32)sin((m - 0.5f) * frequency_radian);
+ }
}
- *response = sum;
- return;
+ sum += sum;
+ }
+ *response = sum;
+ return;
}
VOID impd_calc_filt_ele_response(ia_unique_td_filt_element* element,
- FLOAT32 frequency_radian,
- FLOAT32 *response)
-{
- WORD32 i;
- FLOAT32 part_response, radius, angle_radian;
- FLOAT64 total_response = 1.0;
-
- if (element->eq_filter_format == FILTER_ELEMENT_FORMAT_POLE_ZERO)
- {
- for (i=0; i<element->bs_real_zero_radius_one_count; i++)
- {
- part_response = 1.0f + 1.0f - 2.0f * 1.0f * (FLOAT32)cos(frequency_radian - (FLOAT32) element->zero_sign[i]);
- total_response *= part_response;
- }
- for (i=0; i<element->real_zero_count; i++)
- {
- if (element->real_zero_radius[i] < 0.0f)
- {
- radius = - element->real_zero_radius[i];
- angle_radian =(FLOAT32) M_PI;
- }
- else
- {
- radius = element->real_zero_radius[i];
- angle_radian = 0.0f;
- }
- part_response = 1.0f + radius * radius - 2.0f * radius * (FLOAT32)cos(frequency_radian - angle_radian);
- total_response *= part_response;
- part_response = 1.0f + radius * radius - 2.0f * radius * (FLOAT32)cos(frequency_radian - angle_radian);
- total_response *= part_response;
- }
-
- total_response = sqrt(total_response);
+ FLOAT32 frequency_radian, FLOAT32* response) {
+ WORD32 i;
+ FLOAT32 part_response, radius, angle_radian;
+ FLOAT64 total_response = 1.0;
+
+ if (element->eq_filter_format == FILTER_ELEMENT_FORMAT_POLE_ZERO) {
+ for (i = 0; i < element->bs_real_zero_radius_one_count; i++) {
+ part_response =
+ 1.0f + 1.0f -
+ 2.0f * 1.0f *
+ (FLOAT32)cos(frequency_radian - (FLOAT32)element->zero_sign[i]);
+ total_response *= part_response;
+ }
+ for (i = 0; i < element->real_zero_count; i++) {
+ if (element->real_zero_radius[i] < 0.0f) {
+ radius = -element->real_zero_radius[i];
+ angle_radian = (FLOAT32)M_PI;
+ } else {
+ radius = element->real_zero_radius[i];
+ angle_radian = 0.0f;
+ }
+ part_response =
+ 1.0f + radius * radius -
+ 2.0f * radius * (FLOAT32)cos(frequency_radian - angle_radian);
+ total_response *= part_response;
+ part_response =
+ 1.0f + radius * radius -
+ 2.0f * radius * (FLOAT32)cos(frequency_radian - angle_radian);
+ total_response *= part_response;
+ }
- for (i=0; i<element->generic_zero_count; i++)
- {
- radius = element->generic_zero_radius[i];
- part_response = 1.0f + radius * radius - 2.0f * radius * (FLOAT32)cos(frequency_radian - element->generic_zero_angle[i]);
- total_response *= part_response;
- part_response = 1.0f + radius * radius - 2.0f * radius * (FLOAT32)cos(frequency_radian - element->generic_zero_angle[i]);
- total_response *= part_response;
- }
- for (i=0; i<element->real_pole_count; i++)
- {
- if (element->real_pole_radius[i] < 0.0f)
- {
- radius = - element->real_pole_radius[i];
- angle_radian =(FLOAT32)( - M_PI);
- }
- else
- {
- radius = element->real_pole_radius[i];
- angle_radian = 0.0f;
- }
- part_response = 1/(1.0f + radius * radius - 2.0f * radius * (FLOAT32)cos(frequency_radian - angle_radian));
- total_response *= part_response;
- }
- for (i=0; i<element->cmplx_pole_count; i++)
- {
- part_response = 1/(1.0f + element->real_pole_radius[i] * element->real_pole_radius[i] - 2.0f * element->real_pole_radius[i] * (FLOAT32)cos(frequency_radian - element->complex_pole_angle[i]));
- total_response *= part_response * part_response;
- }
+ total_response = sqrt(total_response);
+
+ for (i = 0; i < element->generic_zero_count; i++) {
+ radius = element->generic_zero_radius[i];
+ part_response =
+ 1.0f + radius * radius -
+ 2.0f * radius *
+ (FLOAT32)cos(frequency_radian - element->generic_zero_angle[i]);
+ total_response *= part_response;
+ part_response =
+ 1.0f + radius * radius -
+ 2.0f * radius *
+ (FLOAT32)cos(frequency_radian - element->generic_zero_angle[i]);
+ total_response *= part_response;
+ }
+ for (i = 0; i < element->real_pole_count; i++) {
+ if (element->real_pole_radius[i] < 0.0f) {
+ radius = -element->real_pole_radius[i];
+ angle_radian = (FLOAT32)(-M_PI);
+ } else {
+ radius = element->real_pole_radius[i];
+ angle_radian = 0.0f;
+ }
+ part_response =
+ 1 / (1.0f + radius * radius -
+ 2.0f * radius * (FLOAT32)cos(frequency_radian - angle_radian));
+ total_response *= part_response;
}
- else
- {
- impd_calc_fir_filt_response(element->fir_filt_order,
- element->fir_symmetry,
- element->fir_coeff,
- frequency_radian,
- &part_response);
-
- total_response *= part_response;
+ for (i = 0; i < element->cmplx_pole_count; i++) {
+ part_response =
+ 1 /
+ (1.0f + element->real_pole_radius[i] * element->real_pole_radius[i] -
+ 2.0f * element->real_pole_radius[i] *
+ (FLOAT32)cos(frequency_radian - element->complex_pole_angle[i]));
+ total_response *= part_response * part_response;
}
- *response = (FLOAT32)total_response;
- return;
+ } else {
+ impd_calc_fir_filt_response(element->fir_filt_order, element->fir_symmetry,
+ element->fir_coeff, frequency_radian,
+ &part_response);
+
+ total_response *= part_response;
+ }
+ *response = (FLOAT32)total_response;
+ return;
}
-VOID impd_calc_filt_block_response(ia_unique_td_filt_element* unique_td_filt_ele,
- ia_filt_block_struct* str_filter_block,
- FLOAT32 frequency_radian,
- FLOAT32 *response)
-{
- WORD32 i;
- FLOAT32 part_response;
- FLOAT64 total_response = 1.0;
- for (i=0; i<str_filter_block->filter_element_count; i++)
- {
- ia_filt_ele_struct* str_filter_element = &str_filter_block->str_filter_element[i];
-
- impd_calc_filt_ele_response(&(unique_td_filt_ele[str_filter_element->filt_ele_idx]),
- frequency_radian,
- &part_response);
- total_response *= part_response;
-
- if (str_filter_element->filt_ele_gain_flag == 1)
- {
- total_response *= pow(10.0f, 0.05f * str_filter_element->filt_ele_gain);
- }
+VOID impd_calc_filt_block_response(
+ ia_unique_td_filt_element* unique_td_filt_ele,
+ ia_filt_block_struct* str_filter_block, FLOAT32 frequency_radian,
+ FLOAT32* response) {
+ WORD32 i;
+ FLOAT32 part_response;
+ FLOAT64 total_response = 1.0;
+ for (i = 0; i < str_filter_block->filter_element_count; i++) {
+ ia_filt_ele_struct* str_filter_element =
+ &str_filter_block->str_filter_element[i];
+
+ impd_calc_filt_ele_response(
+ &(unique_td_filt_ele[str_filter_element->filt_ele_idx]),
+ frequency_radian, &part_response);
+ total_response *= part_response;
+
+ if (str_filter_element->filt_ele_gain_flag == 1) {
+ total_response *= pow(10.0f, 0.05f * str_filter_element->filt_ele_gain);
}
- *response = (FLOAT32) total_response;
- return;
+ }
+ *response = (FLOAT32)total_response;
+ return;
}
-WORD32 impd_calc_subband_gains_td_cascade(ia_unique_td_filt_element* unique_td_filt_ele,
- ia_filt_block_struct* str_filter_block,
- ia_td_filter_cascade_struct* str_td_filter_cascade,
- WORD32 eq_subband_gain_format,
- WORD32 eq_ch_group_count,
- FLOAT32 sample_rate,
- WORD32 eq_frame_size_subband,
- ia_subband_filt_struct* subband_filt)
-{
- WORD32 i, err = 0, g, b;
- FLOAT32 response, frequency_radian;
- FLOAT32 subband_center_freq[256];
- FLOAT64 total_response;
-
- WORD32 eq_subband_gain_count = subband_filt->coeff_count;
-
- err = impd_derive_subband_center_freq(eq_subband_gain_count, eq_subband_gain_format, sample_rate, subband_center_freq);
- if (err)
- return(err);
-
- for (g=0; g<eq_ch_group_count; g++)
- {
- for (b=0; b<eq_subband_gain_count; b++)
- {
- total_response = pow(10.0f, 0.05f * str_td_filter_cascade->eq_cascade_gain[g]);
- frequency_radian = (FLOAT32)(2.0f * M_PI * subband_center_freq[b] / sample_rate);
- for (i=0; i<str_td_filter_cascade->str_filter_block_refs[g].filter_block_count; i++)
- {
- impd_calc_filt_block_response(unique_td_filt_ele,
- &(str_filter_block[str_td_filter_cascade->str_filter_block_refs[g].filter_block_index[i]]),
- frequency_radian,
- &response);
- total_response *= response;
- }
- subband_filt[g].subband_coeff[b] = (FLOAT32) total_response;
- }
- subband_filt[g].eq_frame_size_subband = eq_frame_size_subband;
+WORD32 impd_calc_subband_gains_td_cascade(
+ ia_unique_td_filt_element* unique_td_filt_ele,
+ ia_filt_block_struct* str_filter_block,
+ ia_td_filter_cascade_struct* str_td_filter_cascade,
+ WORD32 eq_subband_gain_format, WORD32 eq_ch_group_count,
+ FLOAT32 sample_rate, WORD32 eq_frame_size_subband,
+ ia_subband_filt_struct* subband_filt) {
+ WORD32 i, err = 0, g, b;
+ FLOAT32 response, frequency_radian;
+ FLOAT32 subband_center_freq[256];
+ FLOAT64 total_response;
+
+ WORD32 eq_subband_gain_count = subband_filt->coeff_count;
+
+ err = impd_derive_subband_center_freq(eq_subband_gain_count,
+ eq_subband_gain_format, sample_rate,
+ subband_center_freq);
+ if (err) return (err);
+
+ for (g = 0; g < eq_ch_group_count; g++) {
+ for (b = 0; b < eq_subband_gain_count; b++) {
+ total_response =
+ pow(10.0f, 0.05f * str_td_filter_cascade->eq_cascade_gain[g]);
+ frequency_radian =
+ (FLOAT32)(2.0f * M_PI * subband_center_freq[b] / sample_rate);
+ for (i = 0;
+ i <
+ str_td_filter_cascade->str_filter_block_refs[g].filter_block_count;
+ i++) {
+ impd_calc_filt_block_response(
+ unique_td_filt_ele,
+ &(str_filter_block[str_td_filter_cascade->str_filter_block_refs[g]
+ .filter_block_index[i]]),
+ frequency_radian, &response);
+ total_response *= response;
+ }
+ subband_filt[g].subband_coeff[b] = (FLOAT32)total_response;
}
- return(0);
+ subband_filt[g].eq_frame_size_subband = eq_frame_size_subband;
+ }
+ return (0);
}
VOID impd_add_cascade(ia_cascade_align_group_struct* pstr_cascade_align_grp,
- WORD32 c1,
- WORD32 c2,
- WORD32* done)
-{
- WORD32 m, n;
-
- *done = 0;
- for (m=0; m<pstr_cascade_align_grp->member_count; m++)
- {
- if (pstr_cascade_align_grp->member_idx[m] == c1)
- {
- for (n=0; n<pstr_cascade_align_grp->member_count; n++)
- {
- if (pstr_cascade_align_grp->member_idx[n] == c2)
- {
- *done = 1;
- }
- }
- if (*done == 0)
- {
- pstr_cascade_align_grp->member_idx[pstr_cascade_align_grp->member_count] = c2;
- pstr_cascade_align_grp->member_count++;
- *done = 1;
- }
+ WORD32 c1, WORD32 c2, WORD32* done) {
+ WORD32 m, n;
+
+ *done = 0;
+ for (m = 0; m < pstr_cascade_align_grp->member_count; m++) {
+ if (pstr_cascade_align_grp->member_idx[m] == c1) {
+ for (n = 0; n < pstr_cascade_align_grp->member_count; n++) {
+ if (pstr_cascade_align_grp->member_idx[n] == c2) {
+ *done = 1;
}
+ }
+ if (*done == 0) {
+ pstr_cascade_align_grp
+ ->member_idx[pstr_cascade_align_grp->member_count] = c2;
+ pstr_cascade_align_grp->member_count++;
+ *done = 1;
+ }
}
- return;
+ }
+ return;
}
-VOID impd_calc_cascade_align_groups(WORD32 eq_ch_group_count,
- WORD32 eq_phase_alignment_present,
- WORD32 eq_phase_alignment[][EQ_CHANNEL_GROUP_COUNT_MAX],
- WORD32* cascade_align_grp_cnt,
- ia_cascade_align_group_struct* pstr_cascade_align_grp)
-{
- WORD32 i, k, g, group_count, done;
-
- group_count = 0;
-
- if (eq_phase_alignment_present == 0)
- {
- if (eq_ch_group_count > 1)
- {
- for (i=0; i<eq_ch_group_count; i++)
- {
- pstr_cascade_align_grp[group_count].member_idx[i] = i;
- }
- pstr_cascade_align_grp[group_count].member_count = eq_ch_group_count;
- group_count = 1;
- }
+VOID impd_calc_cascade_align_groups(
+ WORD32 eq_ch_group_count, WORD32 eq_phase_alignment_present,
+ WORD32 eq_phase_alignment[][EQ_CHANNEL_GROUP_COUNT_MAX],
+ WORD32* cascade_align_grp_cnt,
+ ia_cascade_align_group_struct* pstr_cascade_align_grp) {
+ WORD32 i, k, g, group_count, done;
+
+ group_count = 0;
+
+ if (eq_phase_alignment_present == 0) {
+ if (eq_ch_group_count > 1) {
+ for (i = 0; i < eq_ch_group_count; i++) {
+ pstr_cascade_align_grp[group_count].member_idx[i] = i;
+ }
+ pstr_cascade_align_grp[group_count].member_count = eq_ch_group_count;
+ group_count = 1;
}
- else
- {
- for (i=0; i<eq_ch_group_count; i++)
- {
- for (k=i+1; k<eq_ch_group_count; k++)
- {
- if (eq_phase_alignment[i][k] == 1)
- {
- done = 0;
- for (g=0; g<group_count; g++)
- {
- impd_add_cascade(&pstr_cascade_align_grp[g], i, k, &done);
-
- if (done == 0)
- {
- impd_add_cascade(&pstr_cascade_align_grp[g], k, i, &done);
- }
- }
- if (done == 0)
- {
- pstr_cascade_align_grp[group_count].member_idx[0] = i;
- pstr_cascade_align_grp[group_count].member_idx[1] = k;
- pstr_cascade_align_grp[group_count].member_count = 2;
- group_count++;
- }
- }
+ } else {
+ for (i = 0; i < eq_ch_group_count; i++) {
+ for (k = i + 1; k < eq_ch_group_count; k++) {
+ if (eq_phase_alignment[i][k] == 1) {
+ done = 0;
+ for (g = 0; g < group_count; g++) {
+ impd_add_cascade(&pstr_cascade_align_grp[g], i, k, &done);
+
+ if (done == 0) {
+ impd_add_cascade(&pstr_cascade_align_grp[g], k, i, &done);
}
+ }
+ if (done == 0) {
+ pstr_cascade_align_grp[group_count].member_idx[0] = i;
+ pstr_cascade_align_grp[group_count].member_idx[1] = k;
+ pstr_cascade_align_grp[group_count].member_count = 2;
+ group_count++;
+ }
}
+ }
}
- *cascade_align_grp_cnt = group_count;
- return;
+ }
+ *cascade_align_grp_cnt = group_count;
+ return;
}
-
-VOID impd_calc_phase_filt_params(WORD32 config,
- FLOAT32 radius,
- FLOAT32 angle,
- ia_ph_alignment_filt_struct* ph_alignment_filt)
-{
- WORD32 channel;
- FLOAT32 zReal, zImag;
- FLOAT32 prod;
- WORD32 section = ph_alignment_filt->section_count;
- ia_filt_sect_struct* filt_section = &ph_alignment_filt->filt_section[section];
- switch (config)
- {
- case CONFIG_REAL_POLE:
- ph_alignment_filt->gain *= (-radius);
- filt_section->a1 = - radius;
- filt_section->a2 = 0.0f;
- filt_section->b1 = - 1.0f / radius;
- filt_section->b2 = 0.0f;
- ph_alignment_filt->section_count++;
- break;
- case CONFIG_COMPLEX_POLE:
- zReal = radius * (FLOAT32)cos(M_PI * angle);
- zImag = radius * (FLOAT32)sin(M_PI * angle);
- prod = zReal * zReal + zImag * zImag;
- ph_alignment_filt->gain *= prod;
- filt_section->a1 = - 2.0f * zReal;
- filt_section->a2 = prod;
- filt_section->b1 = - 2.0f * zReal / prod;
- filt_section->b2 = 1.0f / prod;
- ph_alignment_filt->section_count++;
- break;
- default:
- break;
- }
- for (channel=0; channel<EQ_CHANNEL_COUNT_MAX; channel++)
- {
- filt_section->filt_sect_state[channel].in_state_1 = 0.0f;
- filt_section->filt_sect_state[channel].in_state_2 = 0.0f;
- filt_section->filt_sect_state[channel].out_state_1 = 0.0f;
- filt_section->filt_sect_state[channel].out_state_2 = 0.0f;
- }
-
- return;
+VOID impd_calc_phase_filt_params(
+ WORD32 config, FLOAT32 radius, FLOAT32 angle,
+ ia_ph_alignment_filt_struct* ph_alignment_filt) {
+ WORD32 channel;
+ FLOAT32 zReal, zImag;
+ FLOAT32 prod;
+ WORD32 section = ph_alignment_filt->section_count;
+ ia_filt_sect_struct* filt_section = &ph_alignment_filt->filt_section[section];
+ switch (config) {
+ case CONFIG_REAL_POLE:
+ ph_alignment_filt->gain *= (-radius);
+ filt_section->a1 = -radius;
+ filt_section->a2 = 0.0f;
+ filt_section->b1 = -1.0f / radius;
+ filt_section->b2 = 0.0f;
+ ph_alignment_filt->section_count++;
+ break;
+ case CONFIG_COMPLEX_POLE:
+ zReal = radius * (FLOAT32)cos(M_PI * angle);
+ zImag = radius * (FLOAT32)sin(M_PI * angle);
+ prod = zReal * zReal + zImag * zImag;
+ ph_alignment_filt->gain *= prod;
+ filt_section->a1 = -2.0f * zReal;
+ filt_section->a2 = prod;
+ filt_section->b1 = -2.0f * zReal / prod;
+ filt_section->b2 = 1.0f / prod;
+ ph_alignment_filt->section_count++;
+ break;
+ default:
+ break;
+ }
+ for (channel = 0; channel < EQ_CHANNEL_COUNT_MAX; channel++) {
+ filt_section->filt_sect_state[channel].in_state_1 = 0.0f;
+ filt_section->filt_sect_state[channel].in_state_2 = 0.0f;
+ filt_section->filt_sect_state[channel].out_state_1 = 0.0f;
+ filt_section->filt_sect_state[channel].out_state_2 = 0.0f;
+ }
+
+ return;
}
-
-VOID impd_calc_phase_filt_delay(ia_unique_td_filt_element* element,
- ia_ph_alignment_filt_struct* ph_alignment_filt)
-{
- WORD32 i, delay=0, channel;
- if (element->eq_filter_format == FILTER_ELEMENT_FORMAT_POLE_ZERO)
- {
- if (element->bs_real_zero_radius_one_count == 0)
- {
- delay = element->real_zero_count + 2 * element->generic_zero_count - element->real_pole_count - 2 * element->cmplx_pole_count;
- delay = max(0, delay);
- ph_alignment_filt->validity_flag = 1;
- }
+VOID impd_calc_phase_filt_delay(
+ ia_unique_td_filt_element* element,
+ ia_ph_alignment_filt_struct* ph_alignment_filt) {
+ WORD32 i, delay = 0, channel;
+ if (element->eq_filter_format == FILTER_ELEMENT_FORMAT_POLE_ZERO) {
+ if (element->bs_real_zero_radius_one_count == 0) {
+ delay = element->real_zero_count + 2 * element->generic_zero_count -
+ element->real_pole_count - 2 * element->cmplx_pole_count;
+ delay = max(0, delay);
+ ph_alignment_filt->validity_flag = 1;
}
- ph_alignment_filt->audio_delay.delay = delay;
- for (channel=0; channel<EQ_CHANNEL_COUNT_MAX; channel++)
- {
- for (i=0; i<delay; i++)
- {
- ph_alignment_filt->audio_delay.state[channel][i] = 0.0f;
- }
+ }
+ ph_alignment_filt->audio_delay.delay = delay;
+ for (channel = 0; channel < EQ_CHANNEL_COUNT_MAX; channel++) {
+ for (i = 0; i < delay; i++) {
+ ph_alignment_filt->audio_delay.state[channel][i] = 0.0f;
}
+ }
- return;
+ return;
}
VOID impd_calc_phase_filt(ia_unique_td_filt_element* element,
WORD32 filt_ele_idx,
- ia_matching_ph_filt_struct* matching_ph_filt)
-{
- WORD32 i;
-
- memset(matching_ph_filt, 0, sizeof(ia_matching_ph_filt_struct));
- matching_ph_filt->gain = 1.0f;
-
- if (element->eq_filter_format == FILTER_ELEMENT_FORMAT_POLE_ZERO)
- {
- for (i=0; i<element->real_pole_count; i++)
- {
- impd_calc_phase_filt_params(CONFIG_REAL_POLE,
- element->real_pole_radius[i],
- 0.0f,
- matching_ph_filt);
- }
- for (i=0; i<element->cmplx_pole_count; i++)
- {
- impd_calc_phase_filt_params(CONFIG_COMPLEX_POLE,
- element->complex_pole_radius[i],
- element->complex_pole_angle[i],
- matching_ph_filt);
- }
- }
- impd_calc_phase_filt_delay(element, matching_ph_filt);
-
- matching_ph_filt->num_matches_filter = 1;
- matching_ph_filt->matches_filter[0] = filt_ele_idx;
+ ia_matching_ph_filt_struct* matching_ph_filt) {
+ WORD32 i;
- return;
-}
+ memset(matching_ph_filt, 0, sizeof(ia_matching_ph_filt_struct));
+ matching_ph_filt->gain = 1.0f;
-WORD32 impd_calc_filt_params(ia_unique_td_filt_element* element,
- ia_interm_filt_params_struct* interm_filt_params)
-{
- FLOAT32 zReal;
- FLOAT32* coeff;
- //WORD32 offset_idx = 0;
- WORD32 i;
- WORD32 param_idx = 0;
-
- ia_2nd_order_filt_params_struct *pstr_2nd_oder_filt_params = &interm_filt_params->ord_2_filt_params_of_zeros[0];
-
- for (i=0; i<element->bs_real_zero_radius_one_count; i+=2)
- {
- FLOAT32 radius = (FLOAT32)element->zero_sign[i + 0];
- FLOAT32 angle = (FLOAT32)element->zero_sign[i + 1];
- FLOAT32 angle1 = radius;
- FLOAT32 angle2 = angle;
- pstr_2nd_oder_filt_params->radius = 1.0f;
- coeff = pstr_2nd_oder_filt_params->coeff;
-
- if (angle1 != angle2)
- {
- coeff[0] = 0.0f;
- coeff[1] = -1.0f;
- }
- else if (angle1 == 1.0f)
- {
- coeff[0] = -2.0f;
- coeff[1] = 1.0f;
- }
- else
- {
- coeff[0] = 2.0f;
- coeff[1] = 1.0f;
- }
- pstr_2nd_oder_filt_params += 1;
- param_idx += 1;
+ if (element->eq_filter_format == FILTER_ELEMENT_FORMAT_POLE_ZERO) {
+ for (i = 0; i < element->real_pole_count; i++) {
+ impd_calc_phase_filt_params(CONFIG_REAL_POLE,
+ element->real_pole_radius[i], 0.0f,
+ matching_ph_filt);
}
- for (i=0; i<element->real_zero_count; i++)
- {
- FLOAT32 radius = element->real_zero_radius[i];
- //FLOAT32 angle = 0.0f;
-
- pstr_2nd_oder_filt_params->radius = radius;
- if (fabs(radius) == 1.0f)
- {
- return (-1);
- }
- else
- {
- coeff = pstr_2nd_oder_filt_params->coeff;
- coeff[0] = - (radius + 1.0f / radius);
- coeff[1] = 1.0f;
- }
- pstr_2nd_oder_filt_params += 1;
- param_idx += 1;
- }
-
- for (i=0; i<element->generic_zero_count; i++)
- {
- FLOAT32 radius = element->generic_zero_radius[i];
- FLOAT32 angle = element->generic_zero_angle[i];
- zReal = radius * (FLOAT32)cos(M_PI * angle);
- pstr_2nd_oder_filt_params->radius = radius;
- coeff = pstr_2nd_oder_filt_params->coeff;
- coeff[0] = -2.0f * zReal;
- coeff[1] = radius * radius;
-
- pstr_2nd_oder_filt_params += 1;
-
- zReal = (FLOAT32)cos(M_PI * angle) / radius;
- pstr_2nd_oder_filt_params->radius = radius;
- coeff = pstr_2nd_oder_filt_params->coeff;
- coeff[0] = -2.0f * zReal;
- coeff[1] = 1.0f / (radius * radius);
-
- pstr_2nd_oder_filt_params += 1;
-
- param_idx += 2;
+ for (i = 0; i < element->cmplx_pole_count; i++) {
+ impd_calc_phase_filt_params(
+ CONFIG_COMPLEX_POLE, element->complex_pole_radius[i],
+ element->complex_pole_angle[i], matching_ph_filt);
}
+ }
+ impd_calc_phase_filt_delay(element, matching_ph_filt);
- interm_filt_params->filter_param_count_of_zeros = param_idx;
- param_idx = 0;
+ matching_ph_filt->num_matches_filter = 1;
+ matching_ph_filt->matches_filter[0] = filt_ele_idx;
- pstr_2nd_oder_filt_params = &interm_filt_params->ord_2_filt_params_of_poles[0];
+ return;
+}
- for (i=0; i<element->real_pole_count; i++)
- {
- FLOAT32 radius = element->real_pole_radius[i];
- pstr_2nd_oder_filt_params->radius = radius;
- coeff = pstr_2nd_oder_filt_params->coeff;
- coeff[0] = -2.0f * radius;
- coeff[1] = radius * radius;
- param_idx += 1;
- pstr_2nd_oder_filt_params += 1;
+WORD32 impd_calc_filt_params(ia_unique_td_filt_element* element,
+ ia_interm_filt_params_struct* interm_filt_params) {
+ FLOAT32 zReal;
+ FLOAT32* coeff;
+ // WORD32 offset_idx = 0;
+ WORD32 i;
+ WORD32 param_idx = 0;
+
+ ia_2nd_order_filt_params_struct* pstr_2nd_oder_filt_params =
+ &interm_filt_params->ord_2_filt_params_of_zeros[0];
+
+ for (i = 0; i < element->bs_real_zero_radius_one_count; i += 2) {
+ FLOAT32 radius = (FLOAT32)element->zero_sign[i + 0];
+ FLOAT32 angle = (FLOAT32)element->zero_sign[i + 1];
+ FLOAT32 angle1 = radius;
+ FLOAT32 angle2 = angle;
+ pstr_2nd_oder_filt_params->radius = 1.0f;
+ coeff = pstr_2nd_oder_filt_params->coeff;
+
+ if (angle1 != angle2) {
+ coeff[0] = 0.0f;
+ coeff[1] = -1.0f;
+ } else if (angle1 == 1.0f) {
+ coeff[0] = -2.0f;
+ coeff[1] = 1.0f;
+ } else {
+ coeff[0] = 2.0f;
+ coeff[1] = 1.0f;
}
-
- for (i=0; i<element->cmplx_pole_count; i++)
- {
- FLOAT32 radius = element->complex_pole_radius[i];
- FLOAT32 angle = element->complex_pole_angle[i];
-
- zReal = radius * (FLOAT32)cos(M_PI * angle);
- pstr_2nd_oder_filt_params->radius = radius;
- coeff = pstr_2nd_oder_filt_params->coeff;
- coeff[0] = -2.0f * zReal;
- coeff[1] = radius * radius;
-
- pstr_2nd_oder_filt_params += 1;
-
- pstr_2nd_oder_filt_params->radius = radius;
- pstr_2nd_oder_filt_params->coeff[0] = coeff[0];
- pstr_2nd_oder_filt_params->coeff[1] = coeff[1];
-
- pstr_2nd_oder_filt_params += 1;
- param_idx += 2;
+ pstr_2nd_oder_filt_params += 1;
+ param_idx += 1;
+ }
+ for (i = 0; i < element->real_zero_count; i++) {
+ FLOAT32 radius = element->real_zero_radius[i];
+ // FLOAT32 angle = 0.0f;
+
+ pstr_2nd_oder_filt_params->radius = radius;
+ if (fabs(radius) == 1.0f) {
+ return (-1);
+ } else {
+ coeff = pstr_2nd_oder_filt_params->coeff;
+ coeff[0] = -(radius + 1.0f / radius);
+ coeff[1] = 1.0f;
}
- interm_filt_params->filter_param_count_of_poles = param_idx;
- return 0;
+ pstr_2nd_oder_filt_params += 1;
+ param_idx += 1;
+ }
+
+ for (i = 0; i < element->generic_zero_count; i++) {
+ FLOAT32 radius = element->generic_zero_radius[i];
+ FLOAT32 angle = element->generic_zero_angle[i];
+ zReal = radius * (FLOAT32)cos(M_PI * angle);
+ pstr_2nd_oder_filt_params->radius = radius;
+ coeff = pstr_2nd_oder_filt_params->coeff;
+ coeff[0] = -2.0f * zReal;
+ coeff[1] = radius * radius;
+
+ pstr_2nd_oder_filt_params += 1;
+
+ zReal = (FLOAT32)cos(M_PI * angle) / radius;
+ pstr_2nd_oder_filt_params->radius = radius;
+ coeff = pstr_2nd_oder_filt_params->coeff;
+ coeff[0] = -2.0f * zReal;
+ coeff[1] = 1.0f / (radius * radius);
+
+ pstr_2nd_oder_filt_params += 1;
+
+ param_idx += 2;
+ }
+
+ interm_filt_params->filter_param_count_of_zeros = param_idx;
+ param_idx = 0;
+
+ pstr_2nd_oder_filt_params =
+ &interm_filt_params->ord_2_filt_params_of_poles[0];
+
+ for (i = 0; i < element->real_pole_count; i++) {
+ FLOAT32 radius = element->real_pole_radius[i];
+ pstr_2nd_oder_filt_params->radius = radius;
+ coeff = pstr_2nd_oder_filt_params->coeff;
+ coeff[0] = -2.0f * radius;
+ coeff[1] = radius * radius;
+ param_idx += 1;
+ pstr_2nd_oder_filt_params += 1;
+ }
+
+ for (i = 0; i < element->cmplx_pole_count; i++) {
+ FLOAT32 radius = element->complex_pole_radius[i];
+ FLOAT32 angle = element->complex_pole_angle[i];
+
+ zReal = radius * (FLOAT32)cos(M_PI * angle);
+ pstr_2nd_oder_filt_params->radius = radius;
+ coeff = pstr_2nd_oder_filt_params->coeff;
+ coeff[0] = -2.0f * zReal;
+ coeff[1] = radius * radius;
+
+ pstr_2nd_oder_filt_params += 1;
+
+ pstr_2nd_oder_filt_params->radius = radius;
+ pstr_2nd_oder_filt_params->coeff[0] = coeff[0];
+ pstr_2nd_oder_filt_params->coeff[1] = coeff[1];
+
+ pstr_2nd_oder_filt_params += 1;
+ param_idx += 2;
+ }
+ interm_filt_params->filter_param_count_of_poles = param_idx;
+ return 0;
}
-VOID impd_convert_fir_filt_params(WORD32 fir_filt_order,
- WORD32 fir_symmetry,
+VOID impd_convert_fir_filt_params(WORD32 fir_filt_order, WORD32 fir_symmetry,
FLOAT32* fir_coeff,
- ia_fir_filter_struct* fir_filter)
-{
- WORD32 i, channel;
- FLOAT32* coeff = fir_filter->coeff;
-
- fir_filter->coeff_count = fir_filt_order + 1;
- for (i=0; i<fir_filt_order/2+1; i++) {
- coeff[i] = fir_coeff[i];
+ ia_fir_filter_struct* fir_filter) {
+ WORD32 i, channel;
+ FLOAT32* coeff = fir_filter->coeff;
+
+ fir_filter->coeff_count = fir_filt_order + 1;
+ for (i = 0; i < fir_filt_order / 2 + 1; i++) {
+ coeff[i] = fir_coeff[i];
+ }
+
+ if (fir_symmetry == 1) {
+ for (i = 0; i < (fir_filt_order + 1) / 2; i++) {
+ coeff[fir_filt_order - i] = -coeff[i];
}
- if (fir_symmetry==1)
- {
- for (i=0; i<(fir_filt_order+1)/2; i++)
- {
- coeff[fir_filt_order-i] = - coeff[i];
- }
-
- if((fir_filt_order & 1) == 0)
- {
- coeff[fir_filt_order/2] = 0.0f;
- }
+ if ((fir_filt_order & 1) == 0) {
+ coeff[fir_filt_order / 2] = 0.0f;
}
- else
- {
- for (i=0; i<(fir_filt_order+1)/2; i++)
- {
- coeff[fir_filt_order-i] = coeff[i];
- }
+ } else {
+ for (i = 0; i < (fir_filt_order + 1) / 2; i++) {
+ coeff[fir_filt_order - i] = coeff[i];
}
+ }
- for (channel=0; channel<EQ_CHANNEL_COUNT_MAX; channel++)
- {
- for (i=0; i<fir_filt_order+1; i++) {
- fir_filter->state[channel][i] = 0.0f;
- }
+ for (channel = 0; channel < EQ_CHANNEL_COUNT_MAX; channel++) {
+ for (i = 0; i < fir_filt_order + 1; i++) {
+ fir_filter->state[channel][i] = 0.0f;
}
- return;
+ }
+ return;
}
-WORD32 impd_calc_filt_params_all(ia_unique_td_filt_element* element,
- ia_interm_filt_params_struct* interm_filt_params)
-{
- WORD32 err = 0;
-
- interm_filt_params->filter_format = element->eq_filter_format;
- if (element->eq_filter_format == FILTER_ELEMENT_FORMAT_POLE_ZERO)
- {
- err = impd_calc_filt_params(element,
- interm_filt_params);
- if(err)
- return err;
- }
- else
- {
- interm_filt_params->filter_param_count_of_zeros = 0;
- interm_filt_params->filter_param_count_of_poles = 0;
-
- impd_convert_fir_filt_params (element->fir_filt_order,
- element->fir_symmetry,
- element->fir_coeff,
- &interm_filt_params->fir_filter);
- }
- return (0);
+WORD32 impd_calc_filt_params_all(
+ ia_unique_td_filt_element* element,
+ ia_interm_filt_params_struct* interm_filt_params) {
+ WORD32 err = 0;
+
+ interm_filt_params->filter_format = element->eq_filter_format;
+ if (element->eq_filter_format == FILTER_ELEMENT_FORMAT_POLE_ZERO) {
+ err = impd_calc_filt_params(element, interm_filt_params);
+ if (err) return err;
+ } else {
+ interm_filt_params->filter_param_count_of_zeros = 0;
+ interm_filt_params->filter_param_count_of_poles = 0;
+
+ impd_convert_fir_filt_params(element->fir_filt_order, element->fir_symmetry,
+ element->fir_coeff,
+ &interm_filt_params->fir_filter);
+ }
+ return (0);
}
-VOID impd_calc_eq_filt_elements(ia_interm_filt_params_struct* interm_filt_params,
- ia_eq_filt_ele_struct* eq_filt_element)
-{
- WORD32 i, poles_idx, zeros_idx, pole_order = 0, section, channel;
- WORD32 poles_over[REAL_POLE_COUNT_MAX + COMPLEX_POLE_COUNT_MAX];
- WORD32 zeros_over[REAL_ZERO_COUNT_MAX + COMPLEX_ZERO_COUNT_MAX];
- FLOAT32 max_radius, diff_radius;
- WORD32 coeff_count;
- FLOAT32* coeff;
-
- for (i=0; i<REAL_POLE_COUNT_MAX + COMPLEX_POLE_COUNT_MAX; i++)
- {
- poles_over[i] = 0;
- }
- for (i=0; i<REAL_ZERO_COUNT_MAX + COMPLEX_ZERO_COUNT_MAX; i++)
- {
- zeros_over[i] = 0;
- }
- section = 0;
- do
- {
- max_radius = -1.0;
- poles_idx = -1;
- for (i=0; i<interm_filt_params->filter_param_count_of_poles; i++)
- {
- if (poles_over[i] == 0)
- {
- if (interm_filt_params->filter_format == 0)
- {
- if (max_radius < fabs(interm_filt_params->ord_2_filt_params_of_poles[i].radius))
- {
- max_radius = (FLOAT32)fabs(interm_filt_params->ord_2_filt_params_of_poles[i].radius);
- poles_idx = i;
- if (interm_filt_params->ord_2_filt_params_of_poles[i].coeff[1] != 0.0f)
- {
- pole_order = 2;
- }
- else
- {
- pole_order = 1;
- }
- }
- }
+VOID impd_calc_eq_filt_elements(
+ ia_interm_filt_params_struct* interm_filt_params,
+ ia_eq_filt_ele_struct* eq_filt_element) {
+ WORD32 i, poles_idx, zeros_idx, pole_order = 0, section, channel;
+ WORD32 poles_over[REAL_POLE_COUNT_MAX + COMPLEX_POLE_COUNT_MAX];
+ WORD32 zeros_over[REAL_ZERO_COUNT_MAX + COMPLEX_ZERO_COUNT_MAX];
+ FLOAT32 max_radius, diff_radius;
+ WORD32 coeff_count;
+ FLOAT32* coeff;
+
+ for (i = 0; i < REAL_POLE_COUNT_MAX + COMPLEX_POLE_COUNT_MAX; i++) {
+ poles_over[i] = 0;
+ }
+ for (i = 0; i < REAL_ZERO_COUNT_MAX + COMPLEX_ZERO_COUNT_MAX; i++) {
+ zeros_over[i] = 0;
+ }
+ section = 0;
+ do {
+ max_radius = -1.0;
+ poles_idx = -1;
+ for (i = 0; i < interm_filt_params->filter_param_count_of_poles; i++) {
+ if (poles_over[i] == 0) {
+ if (interm_filt_params->filter_format == 0) {
+ if (max_radius <
+ fabs(interm_filt_params->ord_2_filt_params_of_poles[i].radius)) {
+ max_radius = (FLOAT32)fabs(
+ interm_filt_params->ord_2_filt_params_of_poles[i].radius);
+ poles_idx = i;
+ if (interm_filt_params->ord_2_filt_params_of_poles[i].coeff[1] !=
+ 0.0f) {
+ pole_order = 2;
+ } else {
+ pole_order = 1;
}
+ }
}
- if (poles_idx >= 0)
- {
- diff_radius = 10.0f;
- zeros_idx = -1;
- for (i=0; i<interm_filt_params->filter_param_count_of_zeros; i++)
- {
- if (zeros_over[i] == 0)
- {
- if (interm_filt_params->filter_format == 0)
- {
- if (pole_order == 2) {
- if (interm_filt_params->ord_2_filt_params_of_zeros[i].coeff[1] != 0.0f)
- {
- if (diff_radius > fabs(fabs(interm_filt_params->ord_2_filt_params_of_zeros[i].radius) - max_radius))
- {
- diff_radius = (FLOAT32)fabs(fabs(interm_filt_params->ord_2_filt_params_of_zeros[i].radius) - max_radius);
- zeros_idx = i;
- }
- }
- }
- else
- {
- if (interm_filt_params->ord_2_filt_params_of_zeros[i].coeff[1] == 0.0f)
- {
- if (diff_radius > (FLOAT32)(fabs(fabs(interm_filt_params->ord_2_filt_params_of_zeros[i].radius) - max_radius)))
- {
- diff_radius = (FLOAT32)(fabs(fabs(interm_filt_params->ord_2_filt_params_of_zeros[i].radius) - max_radius));
- zeros_idx = i;
- }
- }
- }
- }
+ }
+ }
+ if (poles_idx >= 0) {
+ diff_radius = 10.0f;
+ zeros_idx = -1;
+ for (i = 0; i < interm_filt_params->filter_param_count_of_zeros; i++) {
+ if (zeros_over[i] == 0) {
+ if (interm_filt_params->filter_format == 0) {
+ if (pole_order == 2) {
+ if (interm_filt_params->ord_2_filt_params_of_zeros[i].coeff[1] !=
+ 0.0f) {
+ if (diff_radius >
+ fabs(fabs(interm_filt_params->ord_2_filt_params_of_zeros[i]
+ .radius) -
+ max_radius)) {
+ diff_radius = (FLOAT32)fabs(
+ fabs(interm_filt_params->ord_2_filt_params_of_zeros[i]
+ .radius) -
+ max_radius);
+ zeros_idx = i;
}
- }
- if (zeros_idx == -1)
- {
- for (i=0; i<interm_filt_params->filter_param_count_of_zeros; i++)
- {
- if (zeros_over[i] == 0)
- {
- if (interm_filt_params->filter_format == 0)
- {
- if (pole_order == 2) {
- if (interm_filt_params->ord_2_filt_params_of_zeros[i].coeff[1] == 0.0f)
- {
- if (diff_radius > (FLOAT32)(fabs(fabs(interm_filt_params->ord_2_filt_params_of_zeros[i].radius) - max_radius)))
- {
- diff_radius = (FLOAT32)(fabs(fabs(interm_filt_params->ord_2_filt_params_of_zeros[i].radius) - max_radius));
- zeros_idx = i;
- }
- }
- }
- else
- {
- if (interm_filt_params->ord_2_filt_params_of_zeros[i].coeff[1] != 0.0f)
- {
- if (diff_radius > (FLOAT32)(fabs(fabs(interm_filt_params->ord_2_filt_params_of_zeros[i].radius) - max_radius)))
- {
- diff_radius = (FLOAT32)(fabs(fabs(interm_filt_params->ord_2_filt_params_of_zeros[i].radius) - max_radius));
- zeros_idx = i;
- }
- }
- }
- }
- }
+ }
+ } else {
+ if (interm_filt_params->ord_2_filt_params_of_zeros[i].coeff[1] ==
+ 0.0f) {
+ if (diff_radius >
+ (FLOAT32)(fabs(
+ fabs(interm_filt_params->ord_2_filt_params_of_zeros[i]
+ .radius) -
+ max_radius))) {
+ diff_radius = (FLOAT32)(fabs(
+ fabs(interm_filt_params->ord_2_filt_params_of_zeros[i]
+ .radius) -
+ max_radius));
+ zeros_idx = i;
}
+ }
}
- eq_filt_element->pstr_pole_zero_filt.filt_section[section].a1 = interm_filt_params->ord_2_filt_params_of_poles[poles_idx].coeff[0];
- eq_filt_element->pstr_pole_zero_filt.filt_section[section].a2 = interm_filt_params->ord_2_filt_params_of_poles[poles_idx].coeff[1];
- if (zeros_idx >= 0)
- {
- eq_filt_element->pstr_pole_zero_filt.filt_section[section].b1 = interm_filt_params->ord_2_filt_params_of_zeros[zeros_idx].coeff[0];
- eq_filt_element->pstr_pole_zero_filt.filt_section[section].b2 = interm_filt_params->ord_2_filt_params_of_zeros[zeros_idx].coeff[1];
- }
- else
- {
- eq_filt_element->pstr_pole_zero_filt.filt_section[section].b1 = 0.0f;
- eq_filt_element->pstr_pole_zero_filt.filt_section[section].b2 = 0.0f;
- eq_filt_element->pstr_pole_zero_filt.audio_delay.delay++;
- }
- for (channel=0; channel<EQ_CHANNEL_COUNT_MAX; channel++)
- {
- eq_filt_element->pstr_pole_zero_filt.filt_section[section].filt_sect_state[channel].in_state_1 = 0.0f;
- eq_filt_element->pstr_pole_zero_filt.filt_section[section].filt_sect_state[channel].in_state_2 = 0.0f;
- eq_filt_element->pstr_pole_zero_filt.filt_section[section].filt_sect_state[channel].out_state_1 = 0.0f;
- eq_filt_element->pstr_pole_zero_filt.filt_section[section].filt_sect_state[channel].out_state_2 = 0.0f;
- }
- if (zeros_idx >= 0) zeros_over[zeros_idx] = 1;
- if (poles_idx >= 0) poles_over[poles_idx] = 1;
- section++;
+ }
}
- } while (poles_idx >= 0);
-
- eq_filt_element->pstr_pole_zero_filt.section_count = section;
-
- coeff_count = 1;
- coeff = eq_filt_element->pstr_pole_zero_filt.fir_filter.coeff;
- coeff[0] = 1.0f;
- for (i=0; i<interm_filt_params->filter_param_count_of_zeros; i++)
- {
- if (zeros_over[i] == 0)
- {
- if (interm_filt_params->filter_format == 0)
- {
- WORD32 k;
- FLOAT32 b1, b2;
- b1 = interm_filt_params->ord_2_filt_params_of_zeros[i].coeff[0];
- b2 = interm_filt_params->ord_2_filt_params_of_zeros[i].coeff[1];
-
- coeff_count += 2;
- k = coeff_count - 1;
- coeff[k] = b2 * coeff[k-2];
- k--;
- if (k>1)
- {
- coeff[k] = b1 * coeff[k-1] + b2 * coeff[k-2];
- k--;
- for ( ; k>1; k--)
- {
- coeff[k] += b1 * coeff[k-1] + b2 * coeff[k-2];
- }
- coeff[1] += b1 * coeff[0];
+ }
+ if (zeros_idx == -1) {
+ for (i = 0; i < interm_filt_params->filter_param_count_of_zeros; i++) {
+ if (zeros_over[i] == 0) {
+ if (interm_filt_params->filter_format == 0) {
+ if (pole_order == 2) {
+ if (interm_filt_params->ord_2_filt_params_of_zeros[i]
+ .coeff[1] == 0.0f) {
+ if (diff_radius >
+ (FLOAT32)(fabs(
+ fabs(interm_filt_params->ord_2_filt_params_of_zeros[i]
+ .radius) -
+ max_radius))) {
+ diff_radius = (FLOAT32)(fabs(
+ fabs(interm_filt_params->ord_2_filt_params_of_zeros[i]
+ .radius) -
+ max_radius));
+ zeros_idx = i;
+ }
}
- else
- {
- coeff[1] = b1 * coeff[0];
+ } else {
+ if (interm_filt_params->ord_2_filt_params_of_zeros[i]
+ .coeff[1] != 0.0f) {
+ if (diff_radius >
+ (FLOAT32)(fabs(
+ fabs(interm_filt_params->ord_2_filt_params_of_zeros[i]
+ .radius) -
+ max_radius))) {
+ diff_radius = (FLOAT32)(fabs(
+ fabs(interm_filt_params->ord_2_filt_params_of_zeros[i]
+ .radius) -
+ max_radius));
+ zeros_idx = i;
+ }
}
+ }
}
+ }
}
- zeros_over[i] = 1;
+ }
+ eq_filt_element->pstr_pole_zero_filt.filt_section[section].a1 =
+ interm_filt_params->ord_2_filt_params_of_poles[poles_idx].coeff[0];
+ eq_filt_element->pstr_pole_zero_filt.filt_section[section].a2 =
+ interm_filt_params->ord_2_filt_params_of_poles[poles_idx].coeff[1];
+ if (zeros_idx >= 0) {
+ eq_filt_element->pstr_pole_zero_filt.filt_section[section].b1 =
+ interm_filt_params->ord_2_filt_params_of_zeros[zeros_idx].coeff[0];
+ eq_filt_element->pstr_pole_zero_filt.filt_section[section].b2 =
+ interm_filt_params->ord_2_filt_params_of_zeros[zeros_idx].coeff[1];
+ } else {
+ eq_filt_element->pstr_pole_zero_filt.filt_section[section].b1 = 0.0f;
+ eq_filt_element->pstr_pole_zero_filt.filt_section[section].b2 = 0.0f;
+ eq_filt_element->pstr_pole_zero_filt.audio_delay.delay++;
+ }
+ for (channel = 0; channel < EQ_CHANNEL_COUNT_MAX; channel++) {
+ eq_filt_element->pstr_pole_zero_filt.filt_section[section]
+ .filt_sect_state[channel]
+ .in_state_1 = 0.0f;
+ eq_filt_element->pstr_pole_zero_filt.filt_section[section]
+ .filt_sect_state[channel]
+ .in_state_2 = 0.0f;
+ eq_filt_element->pstr_pole_zero_filt.filt_section[section]
+ .filt_sect_state[channel]
+ .out_state_1 = 0.0f;
+ eq_filt_element->pstr_pole_zero_filt.filt_section[section]
+ .filt_sect_state[channel]
+ .out_state_2 = 0.0f;
+ }
+ if (zeros_idx >= 0) zeros_over[zeros_idx] = 1;
+ if (poles_idx >= 0) poles_over[poles_idx] = 1;
+ section++;
}
- if (coeff_count > 1)
- {
- eq_filt_element->pstr_pole_zero_filt.filt_coeffs_flag = 1;
- eq_filt_element->pstr_pole_zero_filt.fir_filter.coeff_count = coeff_count;
- }
- else
- {
- eq_filt_element->pstr_pole_zero_filt.filt_coeffs_flag = 0;
- eq_filt_element->pstr_pole_zero_filt.fir_filter.coeff_count = 0;
+ } while (poles_idx >= 0);
+
+ eq_filt_element->pstr_pole_zero_filt.section_count = section;
+
+ coeff_count = 1;
+ coeff = eq_filt_element->pstr_pole_zero_filt.fir_filter.coeff;
+ coeff[0] = 1.0f;
+ for (i = 0; i < interm_filt_params->filter_param_count_of_zeros; i++) {
+ if (zeros_over[i] == 0) {
+ if (interm_filt_params->filter_format == 0) {
+ WORD32 k;
+ FLOAT32 b1, b2;
+ b1 = interm_filt_params->ord_2_filt_params_of_zeros[i].coeff[0];
+ b2 = interm_filt_params->ord_2_filt_params_of_zeros[i].coeff[1];
+
+ coeff_count += 2;
+ k = coeff_count - 1;
+ coeff[k] = b2 * coeff[k - 2];
+ k--;
+ if (k > 1) {
+ coeff[k] = b1 * coeff[k - 1] + b2 * coeff[k - 2];
+ k--;
+ for (; k > 1; k--) {
+ coeff[k] += b1 * coeff[k - 1] + b2 * coeff[k - 2];
+ }
+ coeff[1] += b1 * coeff[0];
+ } else {
+ coeff[1] = b1 * coeff[0];
+ }
+ }
}
-
- return;
+ zeros_over[i] = 1;
+ }
+ if (coeff_count > 1) {
+ eq_filt_element->pstr_pole_zero_filt.filt_coeffs_flag = 1;
+ eq_filt_element->pstr_pole_zero_filt.fir_filter.coeff_count = coeff_count;
+ } else {
+ eq_filt_element->pstr_pole_zero_filt.filt_coeffs_flag = 0;
+ eq_filt_element->pstr_pole_zero_filt.fir_filter.coeff_count = 0;
+ }
+
+ return;
}
WORD32 impd_calc_filt_block(ia_unique_td_filt_element* unique_td_filt_ele,
ia_filt_block_struct* str_filter_block,
- ia_eq_filt_block_struct* pstr_eq_filt_block)
-{
- WORD32 i, k, err;
- ia_interm_filt_params_struct interm_filt_params;
- ia_matching_ph_filt_struct matching_ph_filt[FILTER_ELEMENT_COUNT_MAX];
-
- for (i=0; i<str_filter_block->filter_element_count; i++)
- {
- if ((unique_td_filt_ele[str_filter_block->str_filter_element[i].filt_ele_idx].eq_filter_format == FILTER_ELEMENT_FORMAT_FIR) && (str_filter_block->filter_element_count > 1))
- {
- return (-1);
- }
+ ia_eq_filt_block_struct* pstr_eq_filt_block) {
+ WORD32 i, k, err;
+ ia_interm_filt_params_struct interm_filt_params;
+ ia_matching_ph_filt_struct matching_ph_filt[FILTER_ELEMENT_COUNT_MAX];
+
+ for (i = 0; i < str_filter_block->filter_element_count; i++) {
+ if ((unique_td_filt_ele[str_filter_block->str_filter_element[i]
+ .filt_ele_idx]
+ .eq_filter_format == FILTER_ELEMENT_FORMAT_FIR) &&
+ (str_filter_block->filter_element_count > 1)) {
+ return (-1);
}
- for (i=0; i<str_filter_block->filter_element_count; i++)
- {
- ia_eq_filt_ele_struct* eq_filt_element = &pstr_eq_filt_block->eq_filt_element[i];
- ia_filt_ele_struct* str_filter_element = &str_filter_block->str_filter_element[i];
- WORD32 filterIndex = str_filter_element->filt_ele_idx;
-
- if (unique_td_filt_ele[filterIndex].eq_filter_format == FILTER_ELEMENT_FORMAT_POLE_ZERO)
- {
- err = impd_calc_filt_params_all(&(unique_td_filt_ele[filterIndex]),
- &interm_filt_params);
- if (err)
- return (err);
-
- impd_calc_eq_filt_elements(&interm_filt_params, eq_filt_element);
-
- eq_filt_element->format = FILTER_ELEMENT_FORMAT_POLE_ZERO;
- }
- else
- {
- impd_convert_fir_filt_params (unique_td_filt_ele[filterIndex].fir_filt_order,
- unique_td_filt_ele[filterIndex].fir_symmetry,
- unique_td_filt_ele[filterIndex].fir_coeff,
- &eq_filt_element->fir_filter);
-
- eq_filt_element->format = FILTER_ELEMENT_FORMAT_FIR;
- }
- if (str_filter_element->filt_ele_gain_flag == 1)
- {
- eq_filt_element->elementGainLinear = (FLOAT32)(pow(10.0f, 0.05f * str_filter_element->filt_ele_gain));
- }
- else
- {
- eq_filt_element->elementGainLinear = 1.0f;
- }
- for (k=0; k<unique_td_filt_ele[filterIndex].real_zero_count; k++)
- {
- if (unique_td_filt_ele[filterIndex].real_zero_radius[k] > 0.0f)
- {
- eq_filt_element->elementGainLinear = - eq_filt_element->elementGainLinear;
- }
- }
- impd_calc_phase_filt(&(unique_td_filt_ele[filterIndex]),
- i,
- &matching_ph_filt[i]);
+ }
+ for (i = 0; i < str_filter_block->filter_element_count; i++) {
+ ia_eq_filt_ele_struct* eq_filt_element =
+ &pstr_eq_filt_block->eq_filt_element[i];
+ ia_filt_ele_struct* str_filter_element =
+ &str_filter_block->str_filter_element[i];
+ WORD32 filterIndex = str_filter_element->filt_ele_idx;
+
+ if (unique_td_filt_ele[filterIndex].eq_filter_format ==
+ FILTER_ELEMENT_FORMAT_POLE_ZERO) {
+ err = impd_calc_filt_params_all(&(unique_td_filt_ele[filterIndex]),
+ &interm_filt_params);
+ if (err) return (err);
+
+ impd_calc_eq_filt_elements(&interm_filt_params, eq_filt_element);
+
+ eq_filt_element->format = FILTER_ELEMENT_FORMAT_POLE_ZERO;
+ } else {
+ impd_convert_fir_filt_params(
+ unique_td_filt_ele[filterIndex].fir_filt_order,
+ unique_td_filt_ele[filterIndex].fir_symmetry,
+ unique_td_filt_ele[filterIndex].fir_coeff,
+ &eq_filt_element->fir_filter);
+
+ eq_filt_element->format = FILTER_ELEMENT_FORMAT_FIR;
+ }
+ if (str_filter_element->filt_ele_gain_flag == 1) {
+ eq_filt_element->elementGainLinear =
+ (FLOAT32)(pow(10.0f, 0.05f * str_filter_element->filt_ele_gain));
+ } else {
+ eq_filt_element->elementGainLinear = 1.0f;
}
- pstr_eq_filt_block->element_count = str_filter_block->filter_element_count;
+ for (k = 0; k < unique_td_filt_ele[filterIndex].real_zero_count; k++) {
+ if (unique_td_filt_ele[filterIndex].real_zero_radius[k] > 0.0f) {
+ eq_filt_element->elementGainLinear =
+ -eq_filt_element->elementGainLinear;
+ }
+ }
+ impd_calc_phase_filt(&(unique_td_filt_ele[filterIndex]), i,
+ &matching_ph_filt[i]);
+ }
+ pstr_eq_filt_block->element_count = str_filter_block->filter_element_count;
- pstr_eq_filt_block->matching_ph_filt_ele_0 = matching_ph_filt[0];
+ pstr_eq_filt_block->matching_ph_filt_ele_0 = matching_ph_filt[0];
- return(0);
+ return (0);
}
-VOID impd_calc_cascade_phase_align_filt(ia_td_filter_cascade_struct* str_td_filter_cascade,
- WORD32 ch_group_cnt)
-{
- //WORD32 err = 0;
- WORD32 cascade_align_grp_cnt = 0;
- ia_cascade_align_group_struct pstr_cascade_align_grp[EQ_CHANNEL_GROUP_COUNT_MAX/2];
-
- impd_calc_cascade_align_groups(ch_group_cnt,
- str_td_filter_cascade->eq_phase_alignment_present,
- str_td_filter_cascade->eq_phase_alignment,
- &cascade_align_grp_cnt,
- pstr_cascade_align_grp);
- return;
+VOID impd_calc_cascade_phase_align_filt(
+ ia_td_filter_cascade_struct* str_td_filter_cascade, WORD32 ch_group_cnt) {
+ // WORD32 err = 0;
+ WORD32 cascade_align_grp_cnt = 0;
+ ia_cascade_align_group_struct
+ pstr_cascade_align_grp[EQ_CHANNEL_GROUP_COUNT_MAX / 2];
+
+ impd_calc_cascade_align_groups(
+ ch_group_cnt, str_td_filter_cascade->eq_phase_alignment_present,
+ str_td_filter_cascade->eq_phase_alignment, &cascade_align_grp_cnt,
+ pstr_cascade_align_grp);
+ return;
}
-
-WORD32 impd_calc_filt_cascade(ia_unique_td_filt_element* unique_td_filt_ele,
- ia_filt_block_struct* str_filter_block,
- ia_td_filter_cascade_struct* str_td_filter_cascade,
- WORD32 ch_group_cnt,
- ia_filt_cascade_td_struct filt_cascade_td[])
-{
- WORD32 i, err, g;
-
- for (g=0; g<ch_group_cnt; g++)
- {
- for (i=0; i<str_td_filter_cascade->str_filter_block_refs[g].filter_block_count; i++)
- {
- err = impd_calc_filt_block(unique_td_filt_ele,
- &(str_filter_block[str_td_filter_cascade->str_filter_block_refs[g].filter_block_index[i]]),
- &(filt_cascade_td[g].pstr_eq_filt_block[i]));
- if (err)
- return(err);
- }
- filt_cascade_td[g].block_count = i;
- filt_cascade_td[g].cascade_gain_linear = (FLOAT32)(pow(10.0f, 0.05f * str_td_filter_cascade->eq_cascade_gain[g]));
+WORD32 impd_calc_filt_cascade(
+ ia_unique_td_filt_element* unique_td_filt_ele,
+ ia_filt_block_struct* str_filter_block,
+ ia_td_filter_cascade_struct* str_td_filter_cascade, WORD32 ch_group_cnt,
+ ia_filt_cascade_td_struct filt_cascade_td[]) {
+ WORD32 i, err, g;
+
+ for (g = 0; g < ch_group_cnt; g++) {
+ for (i = 0;
+ i < str_td_filter_cascade->str_filter_block_refs[g].filter_block_count;
+ i++) {
+ err = impd_calc_filt_block(
+ unique_td_filt_ele,
+ &(str_filter_block[str_td_filter_cascade->str_filter_block_refs[g]
+ .filter_block_index[i]]),
+ &(filt_cascade_td[g].pstr_eq_filt_block[i]));
+ if (err) return (err);
}
+ filt_cascade_td[g].block_count = i;
+ filt_cascade_td[g].cascade_gain_linear = (FLOAT32)(
+ pow(10.0f, 0.05f * str_td_filter_cascade->eq_cascade_gain[g]));
+ }
- impd_calc_cascade_phase_align_filt(str_td_filter_cascade,
- ch_group_cnt);
- return(0);
+ impd_calc_cascade_phase_align_filt(str_td_filter_cascade, ch_group_cnt);
+ return (0);
}
-
VOID impd_calc_subband_eq(ia_eq_subband_gain_vector* str_eq_subband_gain_vector,
WORD32 eq_subband_gain_count,
- ia_subband_filt_struct* subband_filt)
-{
- WORD32 i;
-
- for (i=0; i<eq_subband_gain_count; i++)
- {
- subband_filt->subband_coeff[i] = str_eq_subband_gain_vector->eq_subband_gain[i];
- }
- subband_filt->coeff_count = eq_subband_gain_count;
- return ;
+ ia_subband_filt_struct* subband_filt) {
+ WORD32 i;
+
+ for (i = 0; i < eq_subband_gain_count; i++) {
+ subband_filt->subband_coeff[i] =
+ str_eq_subband_gain_vector->eq_subband_gain[i];
+ }
+ subband_filt->coeff_count = eq_subband_gain_count;
+ return;
}
-FLOAT32 impd_decode_eq_node_freq(WORD32 eq_node_freq_idx)
-{
- /*((FLOAT32)((log10(STEP_RATIO_F_HI) / log10(STEP_RATIO_F_LO) - 1.0f) / (STEP_RATIO_EQ_NODE_COUNT_MAX - 1.0f)))*/
- FLOAT32 step_ratio = 0.0739601809794f;
- return((FLOAT32)(pow(STEP_RATIO_F_LO, 1.0f + eq_node_freq_idx * step_ratio)));
+FLOAT32 impd_decode_eq_node_freq(WORD32 eq_node_freq_idx) {
+ /*((FLOAT32)((log10(STEP_RATIO_F_HI) / log10(STEP_RATIO_F_LO) - 1.0f) /
+ * (STEP_RATIO_EQ_NODE_COUNT_MAX - 1.0f)))*/
+ FLOAT32 step_ratio = 0.0739601809794f;
+ return (
+ (FLOAT32)(pow(STEP_RATIO_F_LO, 1.0f + eq_node_freq_idx * step_ratio)));
}
-FLOAT32 impd_calc_warp_freq_delta(FLOAT32 fsubband,
- FLOAT32 node_freq,
- WORD32 eq_node_freq_idx)
-{
- /*((FLOAT32)((log10(STEP_RATIO_F_HI) / log10(STEP_RATIO_F_LO) - 1.0f) / (STEP_RATIO_EQ_NODE_COUNT_MAX - 1.0f)))*/
- FLOAT32 step_ratio = 0.0739601809794f;
- return((FLOAT32)((log10(fsubband)/log10(node_freq) - 1.0f) / step_ratio - (FLOAT32) eq_node_freq_idx));
+FLOAT32 impd_calc_warp_freq_delta(FLOAT32 fsubband, FLOAT32 node_freq,
+ WORD32 eq_node_freq_idx) {
+ /*((FLOAT32)((log10(STEP_RATIO_F_HI) / log10(STEP_RATIO_F_LO) - 1.0f) /
+ * (STEP_RATIO_EQ_NODE_COUNT_MAX - 1.0f)))*/
+ FLOAT32 step_ratio = 0.0739601809794f;
+ return ((FLOAT32)((log10(fsubband) / log10(node_freq) - 1.0f) / step_ratio -
+ (FLOAT32)eq_node_freq_idx));
}
-VOID impd_interpolate_eq_gain(WORD32 band_step,
- FLOAT32 left_gain,
- FLOAT32 right_gain,
- FLOAT32 left_slope,
- FLOAT32 right_slope,
- FLOAT32 f,
- FLOAT32* interpolated_gain)
-{
- FLOAT32 k1, k2, a, b, c, d;
- FLOAT32 inv_band_step =(FLOAT32)( 1.0 / (FLOAT32)band_step);
- FLOAT32 inv_band_step_sqr = inv_band_step * inv_band_step; k1 = (right_gain - left_gain) * inv_band_step_sqr;
- left_slope = (FLOAT32) (left_slope / 3.128f);
- right_slope = (FLOAT32) (right_slope / 3.128f);
-
- k2 = right_slope + left_slope;
- a = inv_band_step * (inv_band_step * k2 - 2.0f * k1); b = 3.0f * k1 - inv_band_step * (k2 + left_slope);
- c = left_slope;
- d = left_gain;
- *interpolated_gain = (((a * f + b ) * f + c ) * f ) + d;
- return;
+VOID impd_interpolate_eq_gain(WORD32 band_step, FLOAT32 left_gain,
+ FLOAT32 right_gain, FLOAT32 left_slope,
+ FLOAT32 right_slope, FLOAT32 f,
+ FLOAT32* interpolated_gain) {
+ FLOAT32 k1, k2, a, b, c, d;
+ FLOAT32 inv_band_step = (FLOAT32)(1.0 / (FLOAT32)band_step);
+ FLOAT32 inv_band_step_sqr = inv_band_step * inv_band_step;
+ k1 = (right_gain - left_gain) * inv_band_step_sqr;
+ left_slope = (FLOAT32)(left_slope / 3.128f);
+ right_slope = (FLOAT32)(right_slope / 3.128f);
+
+ k2 = right_slope + left_slope;
+ a = inv_band_step * (inv_band_step * k2 - 2.0f * k1);
+ b = 3.0f * k1 - inv_band_step * (k2 + left_slope);
+ c = left_slope;
+ d = left_gain;
+ *interpolated_gain = (((a * f + b) * f + c) * f) + d;
+ return;
}
-WORD32 impd_interpolate_subband_spline(ia_eq_subband_gain_spline_struct* str_eq_subband_gain_spline,
- WORD32 eq_subband_gain_count,
- WORD32 eq_subband_gain_format,
- FLOAT32 sample_rate,
- ia_subband_filt_struct* subband_filt)
-{
- WORD32 b, n, err;
-
- FLOAT32 eq_gain[32];
- WORD32 eq_node_freq_idx[32];
- FLOAT32 eq_node_freq[32];
- FLOAT32 subband_center_freq[256];
- WORD32 num_eq_nodes = str_eq_subband_gain_spline->num_eq_nodes;
-
- FLOAT32* eq_slope = str_eq_subband_gain_spline->eq_slope;
- WORD32* eq_freq_delta = str_eq_subband_gain_spline->eq_freq_delta;
- FLOAT32 eq_gain_initial = str_eq_subband_gain_spline->eq_gain_initial;
- FLOAT32* eq_gain_delta = str_eq_subband_gain_spline->eq_gain_delta;
-
- FLOAT32* subband_coeff = subband_filt->subband_coeff;
- WORD32 max_eq_node_idx = 32;
-
- eq_gain[0] = eq_gain_initial;
- eq_node_freq_idx[0] = 0;
- eq_node_freq[0] = impd_decode_eq_node_freq(eq_node_freq_idx[0]);
- for (n=1; n<num_eq_nodes; n++) {
- eq_gain[n] = eq_gain[n-1] + eq_gain_delta[n];
- eq_node_freq_idx[n] = eq_node_freq_idx[n-1] + eq_freq_delta[n];
- eq_node_freq[n] = impd_decode_eq_node_freq(eq_node_freq_idx[n]);
- }
- if ((eq_node_freq[num_eq_nodes-1] < sample_rate * 0.5f) && (eq_node_freq_idx[num_eq_nodes-1] < max_eq_node_idx)) {
- eq_slope[num_eq_nodes] = 0;
- eq_gain[num_eq_nodes] = eq_gain[num_eq_nodes-1];
- eq_freq_delta[num_eq_nodes] = max_eq_node_idx - eq_node_freq_idx[num_eq_nodes-1];
- eq_node_freq_idx[num_eq_nodes] = max_eq_node_idx;
- eq_node_freq [num_eq_nodes] = impd_decode_eq_node_freq(eq_node_freq_idx[num_eq_nodes]); num_eq_nodes += 1;
- }
-
- err = impd_derive_subband_center_freq(eq_subband_gain_count, eq_subband_gain_format, sample_rate, subband_center_freq);
- if (err)
- return (err);
-
- for (n=0; n<num_eq_nodes-1; n++)
- {
- for (b=0; b<eq_subband_gain_count; b++)
- {
- FLOAT32 fSub;
- fSub = max(subband_center_freq[b], eq_node_freq[0]);
- fSub = min(fSub, eq_node_freq[num_eq_nodes-1]);
- if ((fSub >= eq_node_freq[n]) && (fSub <= eq_node_freq[n+1]))
- {
- FLOAT32 warpedDeltaFreq = impd_calc_warp_freq_delta (fSub, eq_node_freq[0], eq_node_freq_idx[n]);
- FLOAT32 gEqSubbandDb;
- impd_interpolate_eq_gain(eq_freq_delta[n+1], eq_gain[n], eq_gain[n+1],
- eq_slope[n], eq_slope[n+1], warpedDeltaFreq, &gEqSubbandDb);
-
- subband_coeff[b] = (FLOAT32)pow(2.0, gEqSubbandDb / 6.0f);
- }
- }
+WORD32 impd_interpolate_subband_spline(
+ ia_eq_subband_gain_spline_struct* str_eq_subband_gain_spline,
+ WORD32 eq_subband_gain_count, WORD32 eq_subband_gain_format,
+ FLOAT32 sample_rate, ia_subband_filt_struct* subband_filt) {
+ WORD32 b, n, err;
+
+ FLOAT32 eq_gain[32];
+ WORD32 eq_node_freq_idx[32];
+ FLOAT32 eq_node_freq[32];
+ FLOAT32 subband_center_freq[256];
+ WORD32 num_eq_nodes = str_eq_subband_gain_spline->num_eq_nodes;
+
+ FLOAT32* eq_slope = str_eq_subband_gain_spline->eq_slope;
+ WORD32* eq_freq_delta = str_eq_subband_gain_spline->eq_freq_delta;
+ FLOAT32 eq_gain_initial = str_eq_subband_gain_spline->eq_gain_initial;
+ FLOAT32* eq_gain_delta = str_eq_subband_gain_spline->eq_gain_delta;
+
+ FLOAT32* subband_coeff = subband_filt->subband_coeff;
+ WORD32 max_eq_node_idx = 32;
+
+ eq_gain[0] = eq_gain_initial;
+ eq_node_freq_idx[0] = 0;
+ eq_node_freq[0] = impd_decode_eq_node_freq(eq_node_freq_idx[0]);
+ for (n = 1; n < num_eq_nodes; n++) {
+ eq_gain[n] = eq_gain[n - 1] + eq_gain_delta[n];
+ eq_node_freq_idx[n] = eq_node_freq_idx[n - 1] + eq_freq_delta[n];
+ eq_node_freq[n] = impd_decode_eq_node_freq(eq_node_freq_idx[n]);
+ }
+ if ((eq_node_freq[num_eq_nodes - 1] < sample_rate * 0.5f) &&
+ (eq_node_freq_idx[num_eq_nodes - 1] < max_eq_node_idx)) {
+ eq_slope[num_eq_nodes] = 0;
+ eq_gain[num_eq_nodes] = eq_gain[num_eq_nodes - 1];
+ eq_freq_delta[num_eq_nodes] =
+ max_eq_node_idx - eq_node_freq_idx[num_eq_nodes - 1];
+ eq_node_freq_idx[num_eq_nodes] = max_eq_node_idx;
+ eq_node_freq[num_eq_nodes] =
+ impd_decode_eq_node_freq(eq_node_freq_idx[num_eq_nodes]);
+ num_eq_nodes += 1;
+ }
+
+ err = impd_derive_subband_center_freq(eq_subband_gain_count,
+ eq_subband_gain_format, sample_rate,
+ subband_center_freq);
+ if (err) return (err);
+
+ for (n = 0; n < num_eq_nodes - 1; n++) {
+ for (b = 0; b < eq_subband_gain_count; b++) {
+ FLOAT32 fSub;
+ fSub = max(subband_center_freq[b], eq_node_freq[0]);
+ fSub = min(fSub, eq_node_freq[num_eq_nodes - 1]);
+ if ((fSub >= eq_node_freq[n]) && (fSub <= eq_node_freq[n + 1])) {
+ FLOAT32 warpedDeltaFreq = impd_calc_warp_freq_delta(
+ fSub, eq_node_freq[0], eq_node_freq_idx[n]);
+ FLOAT32 gEqSubbandDb;
+ impd_interpolate_eq_gain(eq_freq_delta[n + 1], eq_gain[n],
+ eq_gain[n + 1], eq_slope[n], eq_slope[n + 1],
+ warpedDeltaFreq, &gEqSubbandDb);
+
+ subband_coeff[b] = (FLOAT32)pow(2.0, gEqSubbandDb / 6.0f);
+ }
}
- subband_filt->coeff_count = eq_subband_gain_count;
- return (0);
+ }
+ subband_filt->coeff_count = eq_subband_gain_count;
+ return (0);
}
WORD32 impd_calc_subband_gains(ia_eq_coeff_struct* str_eq_coeff,
WORD32 eq_ch_group_count,
- WORD32* subband_gains_index,
- FLOAT32 sample_rate,
+ WORD32* subband_gains_index, FLOAT32 sample_rate,
WORD32 eq_frame_size_subband,
- ia_subband_filt_struct* subband_filt)
-{
- WORD32 g, err;
- WORD32 eq_subband_gain_representation = str_eq_coeff->eq_subband_gain_representation;
- WORD32 eq_subband_gain_count = str_eq_coeff->eq_subband_gain_count;
- WORD32 eq_subband_gain_format = str_eq_coeff->eq_subband_gain_format;
-
- for (g=0; g<eq_ch_group_count; g++)
- {
- if (eq_subband_gain_representation == 1)
- {
- err = impd_interpolate_subband_spline(&(str_eq_coeff->str_eq_subband_gain_spline[subband_gains_index[g]]),
- eq_subband_gain_count,
- eq_subband_gain_format,
- sample_rate,
- &(subband_filt[g]));
- if (err)
- return(err);
- }
- else
- {
- impd_calc_subband_eq(&(str_eq_coeff->str_eq_subband_gain_vector[subband_gains_index[g]]),
- eq_subband_gain_count,
- &(subband_filt[g]));
- }
- subband_filt[g].eq_frame_size_subband = eq_frame_size_subband;
+ ia_subband_filt_struct* subband_filt) {
+ WORD32 g, err;
+ WORD32 eq_subband_gain_representation =
+ str_eq_coeff->eq_subband_gain_representation;
+ WORD32 eq_subband_gain_count = str_eq_coeff->eq_subband_gain_count;
+ WORD32 eq_subband_gain_format = str_eq_coeff->eq_subband_gain_format;
+
+ for (g = 0; g < eq_ch_group_count; g++) {
+ if (eq_subband_gain_representation == 1) {
+ err = impd_interpolate_subband_spline(
+ &(str_eq_coeff->str_eq_subband_gain_spline[subband_gains_index[g]]),
+ eq_subband_gain_count, eq_subband_gain_format, sample_rate,
+ &(subband_filt[g]));
+ if (err) return (err);
+ } else {
+ impd_calc_subband_eq(
+ &(str_eq_coeff->str_eq_subband_gain_vector[subband_gains_index[g]]),
+ eq_subband_gain_count, &(subband_filt[g]));
}
- return (0);
+ subband_filt[g].eq_frame_size_subband = eq_frame_size_subband;
+ }
+ return (0);
}
VOID impd_calc_filt_sect_delay(WORD32 section_count,
ia_filt_sect_struct* filt_section,
- FLOAT32* delay)
-{
- WORD32 i;
- FLOAT32 d = 0.0f;
- for (i=0; i<section_count; i++)
- {
- if (filt_section[i].b2 != 0.0f)
- {
- d += 1.0f;
- }
- else if (filt_section[i].b1 != 0.0f)
- {
- d += 0.5f;
- }
+ FLOAT32* delay) {
+ WORD32 i;
+ FLOAT32 d = 0.0f;
+ for (i = 0; i < section_count; i++) {
+ if (filt_section[i].b2 != 0.0f) {
+ d += 1.0f;
+ } else if (filt_section[i].b1 != 0.0f) {
+ d += 0.5f;
}
- *delay = d;
- return;
+ }
+ *delay = d;
+ return;
}
-VOID impd_get_eq_set_delay(ia_eq_set_struct* eq_set,
- WORD32* cascade_delay)
-{
- FLOAT32 delay, sect_delay;
- WORD32 k, g, c, b;
-
- delay = 0;
- for (c=0; c<eq_set->audio_num_chan; c++)
- {
- g = eq_set->eq_ch_group_of_channel[c];
- if (g>=0)
- {
- switch (eq_set->domain)
- {
- case EQ_FILTER_DOMAIN_TIME:
- {
- ia_filt_cascade_td_struct* filt_cascade_td = &eq_set->filt_cascade_td[g];
- for (b=0; b<filt_cascade_td->block_count; b++)
- {
- ia_eq_filt_ele_struct* eq_filt_element = &filt_cascade_td->pstr_eq_filt_block[b].eq_filt_element[0];
- switch (eq_filt_element->format)
- {
- case FILTER_ELEMENT_FORMAT_POLE_ZERO:
- impd_calc_filt_sect_delay(eq_filt_element->pstr_pole_zero_filt.section_count,
- eq_filt_element->pstr_pole_zero_filt.filt_section,
- &sect_delay);
- delay += sect_delay;
- if (eq_filt_element->pstr_pole_zero_filt.filt_coeffs_flag)
- {
- delay += 0.5f * (eq_filt_element->pstr_pole_zero_filt.fir_filter.coeff_count - 1);
- }
- break;
- case FILTER_ELEMENT_FORMAT_FIR:
- delay += 0.5f * (eq_filt_element->fir_filter.coeff_count - 1);
- break;
- default:
- break;
- }
- for (k=0; k < eq_filt_element->num_ph_align_filt; k++)
- {
- ia_ph_alignment_filt_struct* ph_alignment_filt = &eq_filt_element->ph_alignment_filt[k];
- impd_calc_filt_sect_delay(ph_alignment_filt->section_count,
- ph_alignment_filt->filt_section,
- &sect_delay);
- delay += sect_delay;
- }
- }
- for (b=0; b<filt_cascade_td->num_ph_align_filt; b++)
- {
- ia_ph_alignment_filt_struct* ph_alignment_filt = &filt_cascade_td->ph_alignment_filt[b];
- impd_calc_filt_sect_delay(ph_alignment_filt->section_count,
- ph_alignment_filt->filt_section,
- &sect_delay);
- delay += sect_delay;
- }
+VOID impd_get_eq_set_delay(ia_eq_set_struct* eq_set, WORD32* cascade_delay) {
+ FLOAT32 delay, sect_delay;
+ WORD32 k, g, c, b;
+
+ delay = 0;
+ for (c = 0; c < eq_set->audio_num_chan; c++) {
+ g = eq_set->eq_ch_group_of_channel[c];
+ if (g >= 0) {
+ switch (eq_set->domain) {
+ case EQ_FILTER_DOMAIN_TIME: {
+ ia_filt_cascade_td_struct* filt_cascade_td =
+ &eq_set->filt_cascade_td[g];
+ for (b = 0; b < filt_cascade_td->block_count; b++) {
+ ia_eq_filt_ele_struct* eq_filt_element =
+ &filt_cascade_td->pstr_eq_filt_block[b].eq_filt_element[0];
+ switch (eq_filt_element->format) {
+ case FILTER_ELEMENT_FORMAT_POLE_ZERO:
+ impd_calc_filt_sect_delay(
+ eq_filt_element->pstr_pole_zero_filt.section_count,
+ eq_filt_element->pstr_pole_zero_filt.filt_section,
+ &sect_delay);
+ delay += sect_delay;
+ if (eq_filt_element->pstr_pole_zero_filt.filt_coeffs_flag) {
+ delay += 0.5f * (eq_filt_element->pstr_pole_zero_filt
+ .fir_filter.coeff_count -
+ 1);
}
- break;
- case EQ_FILTER_DOMAIN_SUBBAND:
- case EQ_FILTER_DOMAIN_NONE:
- default:
- break;
+ break;
+ case FILTER_ELEMENT_FORMAT_FIR:
+ delay += 0.5f * (eq_filt_element->fir_filter.coeff_count - 1);
+ break;
+ default:
+ break;
}
- }
- break;
+ for (k = 0; k < eq_filt_element->num_ph_align_filt; k++) {
+ ia_ph_alignment_filt_struct* ph_alignment_filt =
+ &eq_filt_element->ph_alignment_filt[k];
+ impd_calc_filt_sect_delay(ph_alignment_filt->section_count,
+ ph_alignment_filt->filt_section,
+ &sect_delay);
+ delay += sect_delay;
+ }
+ }
+ for (b = 0; b < filt_cascade_td->num_ph_align_filt; b++) {
+ ia_ph_alignment_filt_struct* ph_alignment_filt =
+ &filt_cascade_td->ph_alignment_filt[b];
+ impd_calc_filt_sect_delay(ph_alignment_filt->section_count,
+ ph_alignment_filt->filt_section,
+ &sect_delay);
+ delay += sect_delay;
+ }
+ } break;
+ case EQ_FILTER_DOMAIN_SUBBAND:
+ case EQ_FILTER_DOMAIN_NONE:
+ default:
+ break;
+ }
}
- *cascade_delay = (WORD32)delay;
- return;
+ break;
+ }
+ *cascade_delay = (WORD32)delay;
+ return;
}
WORD32 impd_derive_eq_set(ia_eq_coeff_struct* str_eq_coeff,
ia_eq_instructions_struct* str_eq_instructions,
- FLOAT32 sample_rate,
- WORD32 drc_frame_size,
+ FLOAT32 sample_rate, WORD32 drc_frame_size,
WORD32 sub_band_domain_mode,
- ia_eq_set_struct* eq_set)
-{
- WORD32 err, i, eq_frame_size_subband;
-
- eq_set->domain = EQ_FILTER_DOMAIN_NONE;
-
- if (sub_band_domain_mode == SUBBAND_DOMAIN_MODE_OFF)
- {
- if (str_eq_instructions->td_filter_cascade_present== 1)
- {
- err = impd_calc_filt_cascade(str_eq_coeff->unique_td_filt_ele,
- str_eq_coeff->str_filter_block,
- &str_eq_instructions->str_td_filter_cascade,
- str_eq_instructions->eq_ch_group_count,
- eq_set->filt_cascade_td);
- if (err)
- return (err);
- }
-
- eq_set->domain |= EQ_FILTER_DOMAIN_TIME;
+ ia_eq_set_struct* eq_set) {
+ WORD32 err, i, eq_frame_size_subband;
+
+ eq_set->domain = EQ_FILTER_DOMAIN_NONE;
+
+ if (sub_band_domain_mode == SUBBAND_DOMAIN_MODE_OFF) {
+ if (str_eq_instructions->td_filter_cascade_present == 1) {
+ err = impd_calc_filt_cascade(
+ str_eq_coeff->unique_td_filt_ele, str_eq_coeff->str_filter_block,
+ &str_eq_instructions->str_td_filter_cascade,
+ str_eq_instructions->eq_ch_group_count, eq_set->filt_cascade_td);
+ if (err) return (err);
}
- if (sub_band_domain_mode != SUBBAND_DOMAIN_MODE_OFF)
- {
- switch (sub_band_domain_mode)
- {
- case SUBBAND_DOMAIN_MODE_QMF64:
- if (str_eq_coeff->eq_subband_gain_count != AUDIO_CODEC_SUBBAND_COUNT_QMF64)
- {
- return (-1);
- }
- eq_frame_size_subband = drc_frame_size / AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64;
- break;
- case SUBBAND_DOMAIN_MODE_QMF71:
- if (str_eq_coeff->eq_subband_gain_count != AUDIO_CODEC_SUBBAND_COUNT_QMF71)
- {
- return (-1);
- }
- eq_frame_size_subband = drc_frame_size / AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF71;
- break;
- case SUBBAND_DOMAIN_MODE_STFT256:
- if (str_eq_coeff->eq_subband_gain_count != AUDIO_CODEC_SUBBAND_COUNT_STFT256)
- {
- return (-1);
- }
- eq_frame_size_subband = drc_frame_size / AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_STFT256;
- break;
- default:
- return (-1);
- break;
+
+ eq_set->domain |= EQ_FILTER_DOMAIN_TIME;
+ }
+ if (sub_band_domain_mode != SUBBAND_DOMAIN_MODE_OFF) {
+ switch (sub_band_domain_mode) {
+ case SUBBAND_DOMAIN_MODE_QMF64:
+ if (str_eq_coeff->eq_subband_gain_count !=
+ AUDIO_CODEC_SUBBAND_COUNT_QMF64) {
+ return (-1);
}
- if (str_eq_instructions->subband_gains_present== 1)
- {
- err = impd_calc_subband_gains(str_eq_coeff,
- str_eq_instructions->eq_ch_group_count,
- str_eq_instructions->subband_gains_index,
- sample_rate,
- eq_frame_size_subband,
- eq_set->subband_filt);
- if (err)
- return (err);
+ eq_frame_size_subband =
+ drc_frame_size / AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64;
+ break;
+ case SUBBAND_DOMAIN_MODE_QMF71:
+ if (str_eq_coeff->eq_subband_gain_count !=
+ AUDIO_CODEC_SUBBAND_COUNT_QMF71) {
+ return (-1);
}
- else
- {
- if (str_eq_instructions->td_filter_cascade_present== 1)
- {
- err = impd_calc_subband_gains_td_cascade(str_eq_coeff->unique_td_filt_ele,
- str_eq_coeff->str_filter_block,
- &str_eq_instructions->str_td_filter_cascade,
- str_eq_coeff->eq_subband_gain_format,
- str_eq_instructions->eq_ch_group_count,
- sample_rate,
- eq_frame_size_subband,
- eq_set->subband_filt);
- if (err)
- return (err);
- }
-
+ eq_frame_size_subband =
+ drc_frame_size / AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF71;
+ break;
+ case SUBBAND_DOMAIN_MODE_STFT256:
+ if (str_eq_coeff->eq_subband_gain_count !=
+ AUDIO_CODEC_SUBBAND_COUNT_STFT256) {
+ return (-1);
}
- eq_set->domain |= EQ_FILTER_DOMAIN_SUBBAND;
+ eq_frame_size_subband =
+ drc_frame_size / AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_STFT256;
+ break;
+ default:
+ return (-1);
+ break;
}
- eq_set->audio_num_chan = str_eq_instructions->eq_channel_count;
- eq_set->eq_ch_group_count = str_eq_instructions->eq_ch_group_count;
-
- for (i=0; i<str_eq_instructions->eq_channel_count; i++)
- {
- eq_set->eq_ch_group_of_channel[i] = str_eq_instructions->eq_ch_group_of_channel[i];
+ if (str_eq_instructions->subband_gains_present == 1) {
+ err = impd_calc_subband_gains(
+ str_eq_coeff, str_eq_instructions->eq_ch_group_count,
+ str_eq_instructions->subband_gains_index, sample_rate,
+ eq_frame_size_subband, eq_set->subband_filt);
+ if (err) return (err);
+ } else {
+ if (str_eq_instructions->td_filter_cascade_present == 1) {
+ err = impd_calc_subband_gains_td_cascade(
+ str_eq_coeff->unique_td_filt_ele, str_eq_coeff->str_filter_block,
+ &str_eq_instructions->str_td_filter_cascade,
+ str_eq_coeff->eq_subband_gain_format,
+ str_eq_instructions->eq_ch_group_count, sample_rate,
+ eq_frame_size_subband, eq_set->subband_filt);
+ if (err) return (err);
+ }
}
+ eq_set->domain |= EQ_FILTER_DOMAIN_SUBBAND;
+ }
+ eq_set->audio_num_chan = str_eq_instructions->eq_channel_count;
+ eq_set->eq_ch_group_count = str_eq_instructions->eq_ch_group_count;
+
+ for (i = 0; i < str_eq_instructions->eq_channel_count; i++) {
+ eq_set->eq_ch_group_of_channel[i] =
+ str_eq_instructions->eq_ch_group_of_channel[i];
+ }
- return (0);
+ return (0);
}
-VOID impd_process_filt_sect(ia_filt_sect_struct filt_section[EQ_FILTER_SECTION_COUNT_MAX],
- WORD32 channel,
- FLOAT32* audio_out,
- WORD32 section_count)
-{
- WORD32 i;
-
- for(i = 0; i < section_count; i++)
- {
- ia_filt_sect_state_struct* filt_sect_state = &filt_section[i].filt_sect_state[channel];
- FLOAT32 audio_in = *audio_out;
- *audio_out = audio_in + filt_section[i].b1 * filt_sect_state->in_state_1
- + filt_section[i].b2 * filt_sect_state->in_state_2
- - filt_section[i].a1 * filt_sect_state->out_state_1
- - filt_section[i].a2 * filt_sect_state->out_state_2;
-
- filt_sect_state->in_state_2 = filt_sect_state->in_state_1;
- filt_sect_state->in_state_1 = audio_in;
- filt_sect_state->out_state_2 = filt_sect_state->out_state_1;
- filt_sect_state->out_state_1 = *audio_out;
- }
- return;
+VOID impd_process_filt_sect(
+ ia_filt_sect_struct filt_section[EQ_FILTER_SECTION_COUNT_MAX],
+ WORD32 channel, FLOAT32* audio_out, WORD32 section_count) {
+ WORD32 i;
+
+ for (i = 0; i < section_count; i++) {
+ ia_filt_sect_state_struct* filt_sect_state =
+ &filt_section[i].filt_sect_state[channel];
+ FLOAT32 audio_in = *audio_out;
+ *audio_out = audio_in + filt_section[i].b1 * filt_sect_state->in_state_1 +
+ filt_section[i].b2 * filt_sect_state->in_state_2 -
+ filt_section[i].a1 * filt_sect_state->out_state_1 -
+ filt_section[i].a2 * filt_sect_state->out_state_2;
+
+ filt_sect_state->in_state_2 = filt_sect_state->in_state_1;
+ filt_sect_state->in_state_1 = audio_in;
+ filt_sect_state->out_state_2 = filt_sect_state->out_state_1;
+ filt_sect_state->out_state_1 = *audio_out;
+ }
+ return;
}
-VOID impd_fir_filt_process(ia_fir_filter_struct* fir_filter,
- WORD32 channel,
- FLOAT32 audio_in,
- FLOAT32* audio_out)
-{
- WORD32 i;
- FLOAT32* coeff = fir_filter->coeff;
- FLOAT32* state = fir_filter->state[channel];
- FLOAT32 sum;
- sum = coeff[0] * audio_in;
- for (i=1; i<fir_filter->coeff_count; i++)
- {
- sum += coeff[i] * state[i-1];
- }
- *audio_out = sum;
- for (i=fir_filter->coeff_count-2; i>0; i--)
- {
- state[i] = state[i-1];
- }
- state[0] = audio_in;
- return;
+VOID impd_fir_filt_process(ia_fir_filter_struct* fir_filter, WORD32 channel,
+ FLOAT32 audio_in, FLOAT32* audio_out) {
+ WORD32 i;
+ FLOAT32* coeff = fir_filter->coeff;
+ FLOAT32* state = fir_filter->state[channel];
+ FLOAT32 sum;
+ sum = coeff[0] * audio_in;
+ for (i = 1; i < fir_filter->coeff_count; i++) {
+ sum += coeff[i] * state[i - 1];
+ }
+ *audio_out = sum;
+ for (i = fir_filter->coeff_count - 2; i > 0; i--) {
+ state[i] = state[i - 1];
+ }
+ state[0] = audio_in;
+ return;
}
VOID impd_audio_delay_process(ia_audio_delay_struct* audio_delay,
- WORD32 channel,
- FLOAT32 audio_in,
- FLOAT32* ptr_audio_out)
-{
- WORD32 i;
- FLOAT32* state = audio_delay->state[channel];
- if (audio_delay->delay > 0)
- {
- *ptr_audio_out = state[audio_delay->delay-1];
- for (i=audio_delay->delay-1; i>0; i--)
- {
- state[i] = state[i-1];
- }
- state[0] = audio_in;
- }
- else
- {
- *ptr_audio_out = audio_in;
+ WORD32 channel, FLOAT32 audio_in,
+ FLOAT32* ptr_audio_out) {
+ WORD32 i;
+ FLOAT32* state = audio_delay->state[channel];
+ if (audio_delay->delay > 0) {
+ *ptr_audio_out = state[audio_delay->delay - 1];
+ for (i = audio_delay->delay - 1; i > 0; i--) {
+ state[i] = state[i - 1];
}
- return;
+ state[0] = audio_in;
+ } else {
+ *ptr_audio_out = audio_in;
+ }
+ return;
}
-
VOID impd_pole_zero_filt_process(ia_pole_zero_filt_struct* pstr_pole_zero_filt,
- WORD32 channel,
- FLOAT32 audio_in,
- FLOAT32* ptr_audio_out)
-{
- FLOAT32 inp = audio_in;
- FLOAT32 out = inp;
-
- impd_process_filt_sect(pstr_pole_zero_filt->filt_section, channel, &out, pstr_pole_zero_filt->section_count);
- inp = out;
+ WORD32 channel, FLOAT32 audio_in,
+ FLOAT32* ptr_audio_out) {
+ FLOAT32 inp = audio_in;
+ FLOAT32 out = inp;
- if (pstr_pole_zero_filt->filt_coeffs_flag == 1)
- {
- impd_fir_filt_process(&pstr_pole_zero_filt->fir_filter, channel, inp, &out);
- inp = out;
- }
- impd_audio_delay_process(&pstr_pole_zero_filt->audio_delay, channel, inp, &out);
-
- *ptr_audio_out = out;
- return ;
-}
+ impd_process_filt_sect(pstr_pole_zero_filt->filt_section, channel, &out,
+ pstr_pole_zero_filt->section_count);
+ inp = out;
+ if (pstr_pole_zero_filt->filt_coeffs_flag == 1) {
+ impd_fir_filt_process(&pstr_pole_zero_filt->fir_filter, channel, inp, &out);
+ inp = out;
+ }
+ impd_audio_delay_process(&pstr_pole_zero_filt->audio_delay, channel, inp,
+ &out);
+ *ptr_audio_out = out;
+ return;
+}
VOID impd_subband_filter_process(ia_subband_filt_struct* pstr_subband_filt,
FLOAT32* ptr_audio_real_buff,
- FLOAT32* ptr_audio_imag_buff)
-{
- WORD32 i,j;
- WORD32 eq_frame_size_subband = pstr_subband_filt->eq_frame_size_subband;
- WORD32 coeff_count = pstr_subband_filt->coeff_count;
-
- FLOAT32* ptr_subband_coeff = pstr_subband_filt->subband_coeff;
-
- for (i=0; i < eq_frame_size_subband; i++)
- {
- for (j=0; j < coeff_count; j++)
- {
- ptr_audio_real_buff[j] *= ptr_subband_coeff[j];
- ptr_audio_imag_buff[j] *= ptr_subband_coeff[j];
- }
- ptr_audio_real_buff += coeff_count;
- ptr_audio_imag_buff += coeff_count;
- }
- return;
-}
+ FLOAT32* ptr_audio_imag_buff) {
+ WORD32 i, j;
+ WORD32 eq_frame_size_subband = pstr_subband_filt->eq_frame_size_subband;
+ WORD32 coeff_count = pstr_subband_filt->coeff_count;
+ FLOAT32* ptr_subband_coeff = pstr_subband_filt->subband_coeff;
+ for (i = 0; i < eq_frame_size_subband; i++) {
+ for (j = 0; j < coeff_count; j++) {
+ ptr_audio_real_buff[j] *= ptr_subband_coeff[j];
+ ptr_audio_imag_buff[j] *= ptr_subband_coeff[j];
+ }
+ ptr_audio_real_buff += coeff_count;
+ ptr_audio_imag_buff += coeff_count;
+ }
+ return;
+}
-VOID impd_phase_align_filt_process(ia_ph_alignment_filt_struct* ph_alignment_filt,
- WORD32 channel,
- FLOAT32* ptr_audio_out)
-{
- FLOAT32 audio_in = *ptr_audio_out;
- FLOAT32 inp = audio_in;
- FLOAT32 out = inp;
+VOID impd_phase_align_filt_process(
+ ia_ph_alignment_filt_struct* ph_alignment_filt, WORD32 channel,
+ FLOAT32* ptr_audio_out) {
+ FLOAT32 audio_in = *ptr_audio_out;
+ FLOAT32 inp = audio_in;
+ FLOAT32 out = inp;
- impd_process_filt_sect(ph_alignment_filt->filt_section, channel, &out, ph_alignment_filt->section_count);
- inp = out;
+ impd_process_filt_sect(ph_alignment_filt->filt_section, channel, &out,
+ ph_alignment_filt->section_count);
+ inp = out;
- impd_audio_delay_process(&ph_alignment_filt->audio_delay, channel, inp, &out);
+ impd_audio_delay_process(&ph_alignment_filt->audio_delay, channel, inp, &out);
- *ptr_audio_out = out * ph_alignment_filt->gain;
- return;
+ *ptr_audio_out = out * ph_alignment_filt->gain;
+ return;
}
+VOID impd_eq_filt_element_process(
+ ia_eq_filt_block_struct str_eq_filt_block[EQ_FILTER_BLOCK_COUNT_MAX],
+ WORD32 channel, FLOAT32 audio_in, FLOAT32* ptr_audio_out,
+ WORD32 block_count) {
+ WORD32 i;
+ FLOAT32 inp = audio_in;
+ FLOAT32 out = inp;
+ WORD32 k, j;
+ WORD32 element_count;
+ for (j = 0; j < block_count; j++) {
+ FLOAT32 sum = 0.0f;
+ element_count = str_eq_filt_block[j].element_count;
+ for (k = 0; k < element_count; k++) {
+ switch (str_eq_filt_block[j].eq_filt_element[k].format) {
+ case FILTER_ELEMENT_FORMAT_POLE_ZERO:
+ impd_pole_zero_filt_process(
+ &str_eq_filt_block[j].eq_filt_element[k].pstr_pole_zero_filt,
+ channel, inp, &out);
+ break;
+ case FILTER_ELEMENT_FORMAT_FIR:
+ impd_fir_filt_process(
+ &str_eq_filt_block[j].eq_filt_element[k].fir_filter, channel, inp,
+ &out);
+ break;
+ default:
+ break;
+ }
+ out *= str_eq_filt_block[j].eq_filt_element[k].elementGainLinear;
-VOID impd_eq_filt_element_process(ia_eq_filt_block_struct str_eq_filt_block[EQ_FILTER_BLOCK_COUNT_MAX],
- WORD32 channel,
- FLOAT32 audio_in,
- FLOAT32* ptr_audio_out,
- WORD32 block_count)
-{
- WORD32 i;
- FLOAT32 inp = audio_in;
- FLOAT32 out = inp;
- WORD32 k,j;
- WORD32 element_count;
- for(j = 0; j < block_count; j++)
- {
- FLOAT32 sum = 0.0f;
- element_count = str_eq_filt_block[j].element_count;
- for (k=0; k < element_count; k++)
- {
- switch (str_eq_filt_block[j].eq_filt_element[k].format)
- {
- case FILTER_ELEMENT_FORMAT_POLE_ZERO:
- impd_pole_zero_filt_process(&str_eq_filt_block[j].eq_filt_element[k].pstr_pole_zero_filt, channel, inp, &out);
- break;
- case FILTER_ELEMENT_FORMAT_FIR:
- impd_fir_filt_process(&str_eq_filt_block[j].eq_filt_element[k].fir_filter, channel, inp, &out);
- break;
- default:
- break;
- }
- out *= str_eq_filt_block[j].eq_filt_element[k].elementGainLinear;
-
- for (i=0; i < str_eq_filt_block[j].eq_filt_element[k].num_ph_align_filt; i++)
- {
- inp = out;
- impd_phase_align_filt_process(&str_eq_filt_block[j].eq_filt_element[k].ph_alignment_filt[i],
- channel,
- &out);
- }
- sum += out;
- }
- inp = sum;
+ for (i = 0; i < str_eq_filt_block[j].eq_filt_element[k].num_ph_align_filt;
+ i++) {
+ inp = out;
+ impd_phase_align_filt_process(
+ &str_eq_filt_block[j].eq_filt_element[k].ph_alignment_filt[i],
+ channel, &out);
+ }
+ sum += out;
}
- *ptr_audio_out = inp;
- return;
+ inp = sum;
+ }
+ *ptr_audio_out = inp;
+ return;
}
-
WORD32 impd_process_eq_set_time_domain(ia_eq_set_struct* pstr_eq_set,
- WORD32 channel,
- FLOAT32 *ptr_audio_in,
- FLOAT32 *ptr_audio_out,
- WORD32 frame_size)
-{
- WORD32 g=pstr_eq_set->eq_ch_group_of_channel[channel],i,j;
- //FLOAT32 sum = 0.0f;
- //FLOAT32 temp1 = 0.0f;
-
- if(pstr_eq_set==NULL || g<0)
- return 0;
-
- if (pstr_eq_set->domain | EQ_FILTER_DOMAIN_TIME)
- {
- for(i=0;i<frame_size;i++)
- {
- impd_eq_filt_element_process((pstr_eq_set->filt_cascade_td[g].pstr_eq_filt_block),
- channel,
- ptr_audio_in[i],
- &ptr_audio_out[i],
- pstr_eq_set->filt_cascade_td[g].block_count);
-
- for (j=0; j<pstr_eq_set->filt_cascade_td[g].num_ph_align_filt; j++)
- {
- impd_phase_align_filt_process(&pstr_eq_set->filt_cascade_td[g].ph_alignment_filt[j],
- channel,
- &ptr_audio_out[i]);
- }
-
- ptr_audio_out[i] = ptr_audio_out[i] * pstr_eq_set->filt_cascade_td[g].cascade_gain_linear;
- }
- }
- else
- {
- return -1;
+ WORD32 channel, FLOAT32* ptr_audio_in,
+ FLOAT32* ptr_audio_out,
+ WORD32 frame_size) {
+ WORD32 g = pstr_eq_set->eq_ch_group_of_channel[channel], i, j;
+ // FLOAT32 sum = 0.0f;
+ // FLOAT32 temp1 = 0.0f;
+
+ if (pstr_eq_set == NULL || g < 0) return 0;
+
+ if (pstr_eq_set->domain | EQ_FILTER_DOMAIN_TIME) {
+ for (i = 0; i < frame_size; i++) {
+ impd_eq_filt_element_process(
+ (pstr_eq_set->filt_cascade_td[g].pstr_eq_filt_block), channel,
+ ptr_audio_in[i], &ptr_audio_out[i],
+ pstr_eq_set->filt_cascade_td[g].block_count);
+
+ for (j = 0; j < pstr_eq_set->filt_cascade_td[g].num_ph_align_filt; j++) {
+ impd_phase_align_filt_process(
+ &pstr_eq_set->filt_cascade_td[g].ph_alignment_filt[j], channel,
+ &ptr_audio_out[i]);
+ }
+
+ ptr_audio_out[i] = ptr_audio_out[i] *
+ pstr_eq_set->filt_cascade_td[g].cascade_gain_linear;
}
- return 0;
+ } else {
+ return -1;
+ }
+ return 0;
}
WORD32 impd_process_eq_set_subband_domain(ia_eq_set_struct* pstr_eq_set,
WORD32 channel,
FLOAT32* ptr_audio_real_buff,
- FLOAT32* ptr_audio_imag_buff)
-{
- WORD32 g;
-
- if (pstr_eq_set != NULL)
- {
- g = pstr_eq_set->eq_ch_group_of_channel[channel];
- if (g >= 0)
- {
- if (pstr_eq_set->domain == 0)
- {
- return(-1);
- }
- else
- {
- impd_subband_filter_process(&pstr_eq_set->subband_filt[g],
- &ptr_audio_real_buff[0],
- &ptr_audio_imag_buff[0]);
- }
- }
+ FLOAT32* ptr_audio_imag_buff) {
+ WORD32 g;
+
+ if (pstr_eq_set != NULL) {
+ g = pstr_eq_set->eq_ch_group_of_channel[channel];
+ if (g >= 0) {
+ if (pstr_eq_set->domain == 0) {
+ return (-1);
+ } else {
+ impd_subband_filter_process(&pstr_eq_set->subband_filt[g],
+ &ptr_audio_real_buff[0],
+ &ptr_audio_imag_buff[0]);
+ }
}
- return (0);
+ }
+ return (0);
}
-
-
-
-
diff --git a/decoder/drc_src/impd_drc_eq.h b/decoder/drc_src/impd_drc_eq.h
index 74f40cc..dfcf0aa 100644
--- a/decoder/drc_src/impd_drc_eq.h
+++ b/decoder/drc_src/impd_drc_eq.h
@@ -23,173 +23,163 @@
#ifndef COMPILE_FOR_DRC_ENCODER
#endif
-#define EQ_CHANNEL_COUNT_MAX 8
-#define EQ_AUDIO_DELAY_MAX 1024
-#define EQ_FIR_FILTER_SIZE_MAX 128
-#define EQ_SUBBAND_COUNT_MAX 256
-#define EQ_INTERMEDIATE_2ND_ORDER_PARAMS_COUNT_MAX 32
-#define EQ_INTERMEDIATE_PARAMETER_COUNT_MAX 32
-#define EQ_FILTER_SECTION_COUNT_MAX 8
-#define EQ_FILTER_ELEMENT_COUNT_MAX 4
-#define EQ_FILTER_COUNT_MAX 4
-#define MATCHING_PHASE_FILTER_COUNT_MAX 32
-
-#define EQ_FILTER_DOMAIN_NONE 0
-#define EQ_FILTER_DOMAIN_TIME (1<<0)
-#define EQ_FILTER_DOMAIN_SUBBAND (1<<1)
+#define EQ_CHANNEL_COUNT_MAX 8
+#define EQ_AUDIO_DELAY_MAX 1024
+#define EQ_FIR_FILTER_SIZE_MAX 128
+#define EQ_SUBBAND_COUNT_MAX 256
+#define EQ_INTERMEDIATE_2ND_ORDER_PARAMS_COUNT_MAX 32
+#define EQ_INTERMEDIATE_PARAMETER_COUNT_MAX 32
+#define EQ_FILTER_SECTION_COUNT_MAX 8
+#define EQ_FILTER_ELEMENT_COUNT_MAX 4
+#define EQ_FILTER_COUNT_MAX 4
+#define MATCHING_PHASE_FILTER_COUNT_MAX 32
+
+#define EQ_FILTER_DOMAIN_NONE 0
+#define EQ_FILTER_DOMAIN_TIME (1 << 0)
+#define EQ_FILTER_DOMAIN_SUBBAND (1 << 1)
#ifdef __cplusplus
-extern "C"
-{
+extern "C" {
#endif
-
-
typedef struct {
- WORD32 delay;
- FLOAT32 state[EQ_CHANNEL_COUNT_MAX][EQ_AUDIO_DELAY_MAX];
+ WORD32 delay;
+ FLOAT32 state[EQ_CHANNEL_COUNT_MAX][EQ_AUDIO_DELAY_MAX];
} ia_audio_delay_struct;
typedef struct {
- FLOAT32 radius;
- FLOAT32 coeff[2];
+ FLOAT32 radius;
+ FLOAT32 coeff[2];
} ia_2nd_order_filt_params_struct;
typedef struct {
- WORD32 coeff_count;
- FLOAT32 coeff[EQ_FIR_FILTER_SIZE_MAX];
- FLOAT32 state[EQ_CHANNEL_COUNT_MAX][EQ_FIR_FILTER_SIZE_MAX];
+ WORD32 coeff_count;
+ FLOAT32 coeff[EQ_FIR_FILTER_SIZE_MAX];
+ FLOAT32 state[EQ_CHANNEL_COUNT_MAX][EQ_FIR_FILTER_SIZE_MAX];
} ia_fir_filter_struct;
typedef struct {
- WORD32 eq_frame_size_subband;
- WORD32 coeff_count;
- FLOAT32 subband_coeff[EQ_SUBBAND_COUNT_MAX];
+ WORD32 eq_frame_size_subband;
+ WORD32 coeff_count;
+ FLOAT32 subband_coeff[EQ_SUBBAND_COUNT_MAX];
} ia_subband_filt_struct;
typedef struct {
- WORD32 filter_format;
- WORD32 filter_param_count_of_zeros;
- ia_2nd_order_filt_params_struct ord_2_filt_params_of_zeros[EQ_INTERMEDIATE_2ND_ORDER_PARAMS_COUNT_MAX];
- WORD32 filter_param_count_of_poles;
- ia_2nd_order_filt_params_struct ord_2_filt_params_of_poles[EQ_INTERMEDIATE_2ND_ORDER_PARAMS_COUNT_MAX];
- WORD32 filter_param_count_of_fir;
- ia_fir_filter_struct fir_filter;
+ WORD32 filter_format;
+ WORD32 filter_param_count_of_zeros;
+ ia_2nd_order_filt_params_struct
+ ord_2_filt_params_of_zeros[EQ_INTERMEDIATE_2ND_ORDER_PARAMS_COUNT_MAX];
+ WORD32 filter_param_count_of_poles;
+ ia_2nd_order_filt_params_struct
+ ord_2_filt_params_of_poles[EQ_INTERMEDIATE_2ND_ORDER_PARAMS_COUNT_MAX];
+ WORD32 filter_param_count_of_fir;
+ ia_fir_filter_struct fir_filter;
} ia_interm_filt_params_struct;
typedef struct {
- WORD32 interm_filt_param_count;
- ia_interm_filt_params_struct interm_filt_params[EQ_INTERMEDIATE_PARAMETER_COUNT_MAX];
+ WORD32 interm_filt_param_count;
+ ia_interm_filt_params_struct
+ interm_filt_params[EQ_INTERMEDIATE_PARAMETER_COUNT_MAX];
} IntermediateParams;
typedef struct {
- FLOAT32 in_state_1;
- FLOAT32 in_state_2;
- FLOAT32 out_state_1;
- FLOAT32 out_state_2;
+ FLOAT32 in_state_1;
+ FLOAT32 in_state_2;
+ FLOAT32 out_state_1;
+ FLOAT32 out_state_2;
} ia_filt_sect_state_struct;
typedef struct {
- FLOAT32 a1;
- FLOAT32 a2;
- FLOAT32 b1;
- FLOAT32 b2;
- ia_filt_sect_state_struct filt_sect_state[EQ_CHANNEL_COUNT_MAX];
+ FLOAT32 a1;
+ FLOAT32 a2;
+ FLOAT32 b1;
+ FLOAT32 b2;
+ ia_filt_sect_state_struct filt_sect_state[EQ_CHANNEL_COUNT_MAX];
} ia_filt_sect_struct;
typedef struct {
- WORD32 member_count;
- WORD32 member_idx[EQ_CHANNEL_GROUP_COUNT_MAX];
+ WORD32 member_count;
+ WORD32 member_idx[EQ_CHANNEL_GROUP_COUNT_MAX];
} ia_cascade_align_group_struct;
typedef struct {
- WORD32 validity_flag;
- WORD32 num_matches_filter;
- WORD32 matches_filter[EQ_FILTER_SECTION_COUNT_MAX];
- FLOAT32 gain;
- WORD32 section_count;
- ia_filt_sect_struct filt_section[EQ_FILTER_SECTION_COUNT_MAX];
- ia_audio_delay_struct audio_delay;
+ WORD32 validity_flag;
+ WORD32 num_matches_filter;
+ WORD32 matches_filter[EQ_FILTER_SECTION_COUNT_MAX];
+ FLOAT32 gain;
+ WORD32 section_count;
+ ia_filt_sect_struct filt_section[EQ_FILTER_SECTION_COUNT_MAX];
+ ia_audio_delay_struct audio_delay;
} ia_ph_alignment_filt_struct;
typedef ia_ph_alignment_filt_struct ia_matching_ph_filt_struct;
typedef struct {
- WORD32 matches_cascade_idx;
- WORD32 all_pass_count;
- ia_matching_ph_filt_struct matching_ph_filt[MATCHING_PHASE_FILTER_COUNT_MAX];
+ WORD32 matches_cascade_idx;
+ WORD32 all_pass_count;
+ ia_matching_ph_filt_struct matching_ph_filt[MATCHING_PHASE_FILTER_COUNT_MAX];
} ia_all_pass_chain_struct;
typedef struct {
- WORD32 section_count;
- ia_filt_sect_struct filt_section[EQ_FILTER_SECTION_COUNT_MAX];
- WORD32 filt_coeffs_flag;
- ia_fir_filter_struct fir_filter;
- ia_audio_delay_struct audio_delay;
+ WORD32 section_count;
+ ia_filt_sect_struct filt_section[EQ_FILTER_SECTION_COUNT_MAX];
+ WORD32 filt_coeffs_flag;
+ ia_fir_filter_struct fir_filter;
+ ia_audio_delay_struct audio_delay;
} ia_pole_zero_filt_struct;
typedef struct {
- FLOAT32 elementGainLinear;
- WORD32 format;
- ia_pole_zero_filt_struct pstr_pole_zero_filt;
- ia_fir_filter_struct fir_filter;
- WORD32 num_ph_align_filt;
- ia_ph_alignment_filt_struct ph_alignment_filt[EQ_FILTER_ELEMENT_COUNT_MAX];
+ FLOAT32 elementGainLinear;
+ WORD32 format;
+ ia_pole_zero_filt_struct pstr_pole_zero_filt;
+ ia_fir_filter_struct fir_filter;
+ WORD32 num_ph_align_filt;
+ ia_ph_alignment_filt_struct ph_alignment_filt[EQ_FILTER_ELEMENT_COUNT_MAX];
} ia_eq_filt_ele_struct;
typedef struct {
- WORD32 element_count;
- ia_eq_filt_ele_struct eq_filt_element[EQ_FILTER_ELEMENT_COUNT_MAX];
- ia_matching_ph_filt_struct matching_ph_filt_ele_0;
+ WORD32 element_count;
+ ia_eq_filt_ele_struct eq_filt_element[EQ_FILTER_ELEMENT_COUNT_MAX];
+ ia_matching_ph_filt_struct matching_ph_filt_ele_0;
} ia_eq_filt_block_struct;
typedef struct {
- FLOAT32 cascade_gain_linear;
- WORD32 block_count;
- ia_eq_filt_block_struct pstr_eq_filt_block[EQ_FILTER_BLOCK_COUNT_MAX];
- WORD32 num_ph_align_filt;
- ia_ph_alignment_filt_struct ph_alignment_filt[EQ_FILTER_BLOCK_COUNT_MAX * EQ_FILTER_BLOCK_COUNT_MAX];
+ FLOAT32 cascade_gain_linear;
+ WORD32 block_count;
+ ia_eq_filt_block_struct pstr_eq_filt_block[EQ_FILTER_BLOCK_COUNT_MAX];
+ WORD32 num_ph_align_filt;
+ ia_ph_alignment_filt_struct
+ ph_alignment_filt[EQ_FILTER_BLOCK_COUNT_MAX * EQ_FILTER_BLOCK_COUNT_MAX];
} ia_filt_cascade_td_struct;
typedef struct {
- WORD32 domain;
- WORD32 audio_num_chan;
- WORD32 eq_ch_group_count;
- WORD32 eq_ch_group_of_channel[EQ_CHANNEL_COUNT_MAX];
- ia_filt_cascade_td_struct filt_cascade_td[EQ_CHANNEL_GROUP_COUNT_MAX];
- ia_subband_filt_struct subband_filt[EQ_CHANNEL_GROUP_COUNT_MAX];
+ WORD32 domain;
+ WORD32 audio_num_chan;
+ WORD32 eq_ch_group_count;
+ WORD32 eq_ch_group_of_channel[EQ_CHANNEL_COUNT_MAX];
+ ia_filt_cascade_td_struct filt_cascade_td[EQ_CHANNEL_GROUP_COUNT_MAX];
+ ia_subband_filt_struct subband_filt[EQ_CHANNEL_GROUP_COUNT_MAX];
} ia_eq_set_struct;
-
-
WORD32
-impd_derive_eq_set (ia_eq_coeff_struct* str_eq_coeff,
- ia_eq_instructions_struct* str_eq_instructions,
- FLOAT32 sample_rate,
- WORD32 drc_frame_size,
- WORD32 sub_band_domain_mode,
- ia_eq_set_struct* eq_set);
-
-VOID impd_get_eq_set_delay (ia_eq_set_struct* eq_set,
- WORD32* cascade_delay);
+impd_derive_eq_set(ia_eq_coeff_struct* str_eq_coeff,
+ ia_eq_instructions_struct* str_eq_instructions,
+ FLOAT32 sample_rate, WORD32 drc_frame_size,
+ WORD32 sub_band_domain_mode, ia_eq_set_struct* eq_set);
+
+VOID impd_get_eq_set_delay(ia_eq_set_struct* eq_set, WORD32* cascade_delay);
WORD32
-impd_process_eq_set_td(ia_eq_set_struct* eq_set,
- WORD32 channel,
- FLOAT32 audio_in,
- FLOAT32* audio_out);
-
-WORD32 impd_process_eq_set_time_domain(ia_eq_set_struct* eq_set,
- WORD32 channel,
- FLOAT32 *audio_in,
- FLOAT32 *audio_out,
+impd_process_eq_set_td(ia_eq_set_struct* eq_set, WORD32 channel,
+ FLOAT32 audio_in, FLOAT32* audio_out);
+
+WORD32 impd_process_eq_set_time_domain(ia_eq_set_struct* eq_set, WORD32 channel,
+ FLOAT32* audio_in, FLOAT32* audio_out,
WORD32 frame_size);
WORD32
-impd_process_eq_set_subband_domain(ia_eq_set_struct* eq_set,
- WORD32 channel,
+impd_process_eq_set_subband_domain(ia_eq_set_struct* eq_set, WORD32 channel,
FLOAT32* subbandSampleIn,
FLOAT32* subbandSampleOut);
-
#ifdef __cplusplus
}
#endif
diff --git a/decoder/drc_src/impd_drc_error_codes.h b/decoder/drc_src/impd_drc_error_codes.h
index 07e6edc..23462c2 100644
--- a/decoder/drc_src/impd_drc_error_codes.h
+++ b/decoder/drc_src/impd_drc_error_codes.h
@@ -18,42 +18,39 @@
* Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
*/
-
#ifndef IMPD_DRC_ERROR_CODES_H
#define IMPD_DRC_ERROR_CODES_H
-#define IA_ERROR_CODE WORD32
-#define IA_NO_ERROR 0x00000000
+#define IA_ERROR_CODE WORD32
+#define IA_NO_ERROR 0x00000000
/*API Non-Fatal Errors */
-#define IA_DRC_DEC_API_NONFATAL_NO_ERROR 0x00000000
-#define IA_DRC_DEC_API_NONFATAL_CMD_NOT_SUPPORTED 0x00000001
-#define IA_DRC_DEC_API_NONFATAL_CMD_TYPE_NOT_SUPPORTED 0x00000002
-
+#define IA_DRC_DEC_API_NONFATAL_NO_ERROR 0x00000000
+#define IA_DRC_DEC_API_NONFATAL_CMD_NOT_SUPPORTED 0x00000001
+#define IA_DRC_DEC_API_NONFATAL_CMD_TYPE_NOT_SUPPORTED 0x00000002
/*API Fatal Errors */
-#define IA_DRC_DEC_API_FATAL_INVALID_MEMTAB_INDEX 0xFFFF8000
-#define IA_DRC_DEC_API_FATAL_INVALID_LIB_ID_STRINGS_IDX 0xFFFF8001
-#define IA_DRC_DEC_API_FATAL_MEM_ALLOC 0xFFFF8002
-#define IA_DRC_DEC_API_FATAL_INVALID_CONFIG_PARAM 0xFFFF8003
-#define IA_DRC_DEC_API_FATAL_INVALID_EXECUTE_TYPE 0xFFFF8004
-#define IA_DRC_DEC_API_FATAL_INVALID_CMD 0xFFFF8005
-#define IA_DRC_DEC_API_FATAL_MEM_ALIGN 0xFFFF8006
+#define IA_DRC_DEC_API_FATAL_INVALID_MEMTAB_INDEX 0xFFFF8000
+#define IA_DRC_DEC_API_FATAL_INVALID_LIB_ID_STRINGS_IDX 0xFFFF8001
+#define IA_DRC_DEC_API_FATAL_MEM_ALLOC 0xFFFF8002
+#define IA_DRC_DEC_API_FATAL_INVALID_CONFIG_PARAM 0xFFFF8003
+#define IA_DRC_DEC_API_FATAL_INVALID_EXECUTE_TYPE 0xFFFF8004
+#define IA_DRC_DEC_API_FATAL_INVALID_CMD 0xFFFF8005
+#define IA_DRC_DEC_API_FATAL_MEM_ALIGN 0xFFFF8006
/*****************************************************************************/
/* Class 1: Configuration Errors */
/*****************************************************************************/
-
/* Non Fatal Errors */
-#define IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_NUM_OF_CHANNELS 0x00000800
-#define IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_SAMP_FREQ 0x00000801
-#define IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_PCM_SIZE 0x00000802
-#define IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_FRAME_SIZE 0x00000803
-#define IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_DELAY_MODE 0x00000804
-#define IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_DECODE_TYPE 0x00000805
-#define IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_PEAK_LIM_FLAG 0x00000806
-#define IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_CTRL_PARAM_IDX 0x00000807
-#define IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_GAIN_DELAY 0x00000808
-#define IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_CONST_DELAY_MODE 0x00000809
+#define IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_NUM_OF_CHANNELS 0x00000800
+#define IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_SAMP_FREQ 0x00000801
+#define IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_PCM_SIZE 0x00000802
+#define IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_FRAME_SIZE 0x00000803
+#define IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_DELAY_MODE 0x00000804
+#define IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_DECODE_TYPE 0x00000805
+#define IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_PEAK_LIM_FLAG 0x00000806
+#define IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_CTRL_PARAM_IDX 0x00000807
+#define IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_GAIN_DELAY 0x00000808
+#define IA_DRC_DEC_CONFIG_NON_FATAL_INVALID_CONST_DELAY_MODE 0x00000809
#endif
diff --git a/decoder/drc_src/impd_drc_extr_delta_coded_info.c b/decoder/drc_src/impd_drc_extr_delta_coded_info.c
index 94f0600..a1ca0b7 100644
--- a/decoder/drc_src/impd_drc_extr_delta_coded_info.c
+++ b/decoder/drc_src/impd_drc_extr_delta_coded_info.c
@@ -28,86 +28,68 @@
#include "impd_drc_rom.h"
WORD32 impd_init_tbls(const WORD32 num_gain_max_values,
- ia_tables_struct* str_tables)
-{
- impd_gen_delta_time_code_tbl (num_gain_max_values,
- str_tables->delta_time_code_table);
- return(0);
+ ia_tables_struct* str_tables) {
+ impd_gen_delta_time_code_tbl(num_gain_max_values,
+ str_tables->delta_time_code_table);
+ return (0);
}
-
-void
-impd_get_delta_gain_code_tbl(const WORD32 gain_coding_profile,
- ia_delta_gain_code_table_struct const** delta_time_code_tbl,
- WORD32 *num_entries)
-{
- if (gain_coding_profile==GAIN_CODING_PROFILE_CLIPPING)
- {
- *delta_time_code_tbl = ia_drc_gain_tbls_prof_2;
- *num_entries = NUM_GAIN_TBL_PROF_2_ENTRIES;
- }
- else
- {
- *delta_time_code_tbl = ia_drc_gain_tbls_prof_0_1;
- *num_entries = NUM_GAIN_TBL_PROF_0_1_ENTRIES;
- }
+void impd_get_delta_gain_code_tbl(
+ const WORD32 gain_coding_profile,
+ ia_delta_gain_code_table_struct const** delta_time_code_tbl,
+ WORD32* num_entries) {
+ if (gain_coding_profile == GAIN_CODING_PROFILE_CLIPPING) {
+ *delta_time_code_tbl = ia_drc_gain_tbls_prof_2;
+ *num_entries = NUM_GAIN_TBL_PROF_2_ENTRIES;
+ } else {
+ *delta_time_code_tbl = ia_drc_gain_tbls_prof_0_1;
+ *num_entries = NUM_GAIN_TBL_PROF_0_1_ENTRIES;
+ }
}
-void
-impd_gen_delta_time_code_tbl (const WORD32 num_gain_max_values,
- ia_delta_time_code_table_entry_struct* delta_time_code_tbl_item)
-{
- WORD32 n, k;
-
- WORD32 Z = 1;
- while((1<<Z)<2*num_gain_max_values)
- {
- Z++;
- }
+void impd_gen_delta_time_code_tbl(
+ const WORD32 num_gain_max_values,
+ ia_delta_time_code_table_entry_struct* delta_time_code_tbl_item) {
+ WORD32 n, k;
- delta_time_code_tbl_item[0].size = -1;
- delta_time_code_tbl_item[0].code = -1;
- delta_time_code_tbl_item[0].value = -1;
+ WORD32 Z = 1;
+ while ((1 << Z) < 2 * num_gain_max_values) {
+ Z++;
+ }
- delta_time_code_tbl_item[1].size = 2;
- delta_time_code_tbl_item[1].code = 0x0;
- delta_time_code_tbl_item[1].value = 1;
- for (n=0; n<4; n++)
- {
- delta_time_code_tbl_item[n+2].size = 4;
- delta_time_code_tbl_item[n+2].code = 0x4 + n;
- delta_time_code_tbl_item[n+2].value = n+2;
- }
- for (n=0; n<8; n++)
- {
- delta_time_code_tbl_item[n+6].size = 5;
- delta_time_code_tbl_item[n+6].code = 0x10 + n;
- delta_time_code_tbl_item[n+6].value = n+6;
- }
+ delta_time_code_tbl_item[0].size = -1;
+ delta_time_code_tbl_item[0].code = -1;
+ delta_time_code_tbl_item[0].value = -1;
- k = 2*num_gain_max_values-14+1;
- for (n=0; n<k; n++)
- {
- delta_time_code_tbl_item[n+14].size = 2+Z;
- delta_time_code_tbl_item[n+14].code = (0x3<<Z) + n;
- delta_time_code_tbl_item[n+14].value = n+14;
- }
+ delta_time_code_tbl_item[1].size = 2;
+ delta_time_code_tbl_item[1].code = 0x0;
+ delta_time_code_tbl_item[1].value = 1;
+ for (n = 0; n < 4; n++) {
+ delta_time_code_tbl_item[n + 2].size = 4;
+ delta_time_code_tbl_item[n + 2].code = 0x4 + n;
+ delta_time_code_tbl_item[n + 2].value = n + 2;
+ }
+ for (n = 0; n < 8; n++) {
+ delta_time_code_tbl_item[n + 6].size = 5;
+ delta_time_code_tbl_item[n + 6].code = 0x10 + n;
+ delta_time_code_tbl_item[n + 6].value = n + 6;
+ }
+ k = 2 * num_gain_max_values - 14 + 1;
+ for (n = 0; n < k; n++) {
+ delta_time_code_tbl_item[n + 14].size = 2 + Z;
+ delta_time_code_tbl_item[n + 14].code = (0x3 << Z) + n;
+ delta_time_code_tbl_item[n + 14].value = n + 14;
+ }
}
WORD32
-impd_get_delta_tmin (const WORD32 sampling_rate)
-{
- WORD32 lowerBound = (WORD32) (0.5f + 0.0005f * sampling_rate);
- WORD32 result = 1;
- if (sampling_rate < 1000)
- {
- return(UNEXPECTED_ERROR);
- }
- while (result <= lowerBound) result = result << 1;
- return result;
+impd_get_delta_tmin(const WORD32 sampling_rate) {
+ WORD32 lowerBound = (WORD32)(0.5f + 0.0005f * sampling_rate);
+ WORD32 result = 1;
+ if (sampling_rate < 1000) {
+ return (UNEXPECTED_ERROR);
+ }
+ while (result <= lowerBound) result = result << 1;
+ return result;
}
-
-
-
-
diff --git a/decoder/drc_src/impd_drc_extr_delta_coded_info.h b/decoder/drc_src/impd_drc_extr_delta_coded_info.h
index e2b1ad6..b9954c0 100644
--- a/decoder/drc_src/impd_drc_extr_delta_coded_info.h
+++ b/decoder/drc_src/impd_drc_extr_delta_coded_info.h
@@ -21,66 +21,65 @@
#define IMPD_DRC_TABLES_H
#ifdef __cplusplus
-extern "C"
-{
+extern "C" {
#endif
-#define N_DELTA_TIME_CODE_TABLE_ENTRIES_MAX (512+14)
+#define N_DELTA_TIME_CODE_TABLE_ENTRIES_MAX (512 + 14)
typedef struct {
- WORD32 size;
- WORD32 code;
- WORD32 value;
+ WORD32 size;
+ WORD32 code;
+ WORD32 value;
} ia_delta_time_code_table_entry_struct;
typedef struct {
- WORD32 size;
- WORD32 code;
- FLOAT32 value;
- WORD32 index;
+ WORD32 size;
+ WORD32 code;
+ FLOAT32 value;
+ WORD32 index;
} ia_slope_code_table_struct;
typedef struct {
- WORD32 size;
- WORD32 code;
- FLOAT32 value;
+ WORD32 size;
+ WORD32 code;
+ FLOAT32 value;
} ia_delta_gain_code_table_struct;
typedef struct {
- ia_delta_time_code_table_entry_struct delta_time_code_table[N_DELTA_TIME_CODE_TABLE_ENTRIES_MAX];
+ ia_delta_time_code_table_entry_struct
+ delta_time_code_table[N_DELTA_TIME_CODE_TABLE_ENTRIES_MAX];
} ia_tables_struct;
typedef struct {
- FLOAT32 in_out_ratio;
- FLOAT32 exp_lo;
- FLOAT32 exp_hi;
+ FLOAT32 in_out_ratio;
+ FLOAT32 exp_lo;
+ FLOAT32 exp_hi;
} ia_cicp_sigmoid_characteristic_param_struct;
typedef struct {
- FLOAT32 inLevel;
- FLOAT32 gain;
+ FLOAT32 inLevel;
+ FLOAT32 gain;
} ia_characteristic_node_coordinate_struct;
typedef struct {
- WORD32 coordinateCount;
- ia_characteristic_node_coordinate_struct characteristicNodeCoordinate[5];
+ WORD32 coordinateCount;
+ ia_characteristic_node_coordinate_struct characteristicNodeCoordinate[5];
} ia_cicp_node_characteristic_param;
WORD32
-impd_init_tbls(const WORD32 num_gain_max_values,
- ia_tables_struct* str_tables);
+impd_init_tbls(const WORD32 num_gain_max_values, ia_tables_struct* str_tables);
-void
-impd_gen_delta_time_code_tbl (const WORD32 num_gain_max_values,
- ia_delta_time_code_table_entry_struct* delta_time_code_tbl_item);
+void impd_gen_delta_time_code_tbl(
+ const WORD32 num_gain_max_values,
+ ia_delta_time_code_table_entry_struct* delta_time_code_tbl_item);
-void
-impd_get_delta_gain_code_tbl(const WORD32 gain_coding_profile,
- ia_delta_gain_code_table_struct const** delta_time_code_tbl,
- WORD32 *num_entries);
+void impd_get_delta_gain_code_tbl(
+ const WORD32 gain_coding_profile,
+ ia_delta_gain_code_table_struct const** delta_time_code_tbl,
+ WORD32* num_entries);
WORD32
-impd_get_delta_tmin (const WORD32 sampling_rate);
+impd_get_delta_tmin(const WORD32 sampling_rate);
#ifdef __cplusplus
}
diff --git a/decoder/drc_src/impd_drc_fiilter_bank.c b/decoder/drc_src/impd_drc_fiilter_bank.c
index 0bd94d7..f6637b6 100644
--- a/decoder/drc_src/impd_drc_fiilter_bank.c
+++ b/decoder/drc_src/impd_drc_fiilter_bank.c
@@ -29,477 +29,403 @@
#include "impd_drc_rom.h"
VOID impd_compute_filt_coeff(WORD32 crossover_freq_idx,
- ia_iir_filter_struct* pstr_lp_filt_coeff,
- ia_iir_filter_struct* pstr_hp_filt_coeff,
- ia_iir_filter_struct* pstr_ap_filt_coeff,
- WORD32 filter_type)
-{
- FLOAT32 gamma = normal_cross_freq[crossover_freq_idx].gamma;
- FLOAT32 delta = normal_cross_freq[crossover_freq_idx].delta;
-
- if(filter_type==0||filter_type==2){
- pstr_lp_filt_coeff->a0 = 1.0f;
- pstr_lp_filt_coeff->a1 = 2.0f * (gamma - delta);
- pstr_lp_filt_coeff->a2 = 2.0f * (gamma + delta) - 1.0f;
- pstr_lp_filt_coeff->b0 = gamma;
- pstr_lp_filt_coeff->b1 = 2.0f * gamma;
- pstr_lp_filt_coeff->b2 = gamma;
-
- pstr_hp_filt_coeff->a0 = 1.0f;
- pstr_hp_filt_coeff->a1 = pstr_lp_filt_coeff->a1;
- pstr_hp_filt_coeff->a2 = pstr_lp_filt_coeff->a2;
- pstr_hp_filt_coeff->b0 = delta;
- pstr_hp_filt_coeff->b1 = - 2.0f * delta;
- pstr_hp_filt_coeff->b2 = delta;
- }
-
- if(filter_type==1||filter_type==2){
- pstr_ap_filt_coeff->a0 = 1.0f;
- pstr_ap_filt_coeff->a1 = 2.0f * (gamma - delta);;
- pstr_ap_filt_coeff->a2 = 2.0f * (gamma + delta) - 1.0f;;
- pstr_ap_filt_coeff->b0 = pstr_ap_filt_coeff->a2;
- pstr_ap_filt_coeff->b1 = pstr_ap_filt_coeff->a1;
- pstr_ap_filt_coeff->b2 = pstr_ap_filt_coeff->a0;
- }
-
- return;
+ ia_iir_filter_struct* pstr_lp_filt_coeff,
+ ia_iir_filter_struct* pstr_hp_filt_coeff,
+ ia_iir_filter_struct* pstr_ap_filt_coeff,
+ WORD32 filter_type) {
+ FLOAT32 gamma = normal_cross_freq[crossover_freq_idx].gamma;
+ FLOAT32 delta = normal_cross_freq[crossover_freq_idx].delta;
+
+ if (filter_type == 0 || filter_type == 2) {
+ pstr_lp_filt_coeff->a0 = 1.0f;
+ pstr_lp_filt_coeff->a1 = 2.0f * (gamma - delta);
+ pstr_lp_filt_coeff->a2 = 2.0f * (gamma + delta) - 1.0f;
+ pstr_lp_filt_coeff->b0 = gamma;
+ pstr_lp_filt_coeff->b1 = 2.0f * gamma;
+ pstr_lp_filt_coeff->b2 = gamma;
+
+ pstr_hp_filt_coeff->a0 = 1.0f;
+ pstr_hp_filt_coeff->a1 = pstr_lp_filt_coeff->a1;
+ pstr_hp_filt_coeff->a2 = pstr_lp_filt_coeff->a2;
+ pstr_hp_filt_coeff->b0 = delta;
+ pstr_hp_filt_coeff->b1 = -2.0f * delta;
+ pstr_hp_filt_coeff->b2 = delta;
+ }
+
+ if (filter_type == 1 || filter_type == 2) {
+ pstr_ap_filt_coeff->a0 = 1.0f;
+ pstr_ap_filt_coeff->a1 = 2.0f * (gamma - delta);
+ ;
+ pstr_ap_filt_coeff->a2 = 2.0f * (gamma + delta) - 1.0f;
+ ;
+ pstr_ap_filt_coeff->b0 = pstr_ap_filt_coeff->a2;
+ pstr_ap_filt_coeff->b1 = pstr_ap_filt_coeff->a1;
+ pstr_ap_filt_coeff->b2 = pstr_ap_filt_coeff->a0;
+ }
+
+ return;
}
WORD32 impd_initialize_filt_bank(WORD32 num_sub_bands,
- ia_gain_params_struct* gain_params,
- ia_drc_filter_bank_struct* drc_filter_bank)
-{
- ia_two_band_filt_struct* str_two_band_bank;
- ia_three_band_filt_struct* str_three_band_bank;
- ia_four_band_filt_struct* str_four_band_bank;
- drc_filter_bank->complexity = 0;
- drc_filter_bank->num_bands = num_sub_bands;
-
-
- if(num_sub_bands==1){
- return 0;
- }
- else if(num_sub_bands==2){
- str_two_band_bank = &drc_filter_bank->str_two_band_bank;
- impd_compute_filt_coeff(gain_params[1].crossover_freq_idx,
- &(str_two_band_bank->low_pass),
- &(str_two_band_bank->high_pass),
- NULL,
- 0);
- }
- else if(num_sub_bands==3){
- str_three_band_bank = &drc_filter_bank->str_three_band_bank;
-
- impd_compute_filt_coeff(gain_params[1].crossover_freq_idx,
- &(str_three_band_bank->str_low_pass_stage_2),
- &(str_three_band_bank->str_high_pass_stage_2),
- &(str_three_band_bank->str_all_pass_stage_2),
- 2);
- impd_compute_filt_coeff(gain_params[2].crossover_freq_idx,
- &(str_three_band_bank->str_low_pass_stage_1),
- &(str_three_band_bank->str_high_pass_stage_1),
- NULL,
- 0);
- }
-
- else if(num_sub_bands==4){
- str_four_band_bank = &drc_filter_bank->str_four_band_bank;
-
- impd_compute_filt_coeff(gain_params[1].crossover_freq_idx,
- &(str_four_band_bank->str_low_pass_stage_3_low),
- &(str_four_band_bank->str_high_pass_stage_3_low),
- &(str_four_band_bank->str_all_pass_stage_2_high),
- 2);
- impd_compute_filt_coeff(gain_params[2].crossover_freq_idx,
- &(str_four_band_bank->str_low_pass_stage_1),
- &(str_four_band_bank->str_high_pass_stage_1),
- NULL,
- 0);
- impd_compute_filt_coeff(gain_params[3].crossover_freq_idx,
- &(str_four_band_bank->str_low_pass_stage_3_high),
- &(str_four_band_bank->str_high_pass_stage_3_high),
- &(str_four_band_bank->str_all_pass_stage_2_low),
- 2);
- }
- else {
- return -1;
- }
-
+ ia_gain_params_struct* gain_params,
+ ia_drc_filter_bank_struct* drc_filter_bank) {
+ ia_two_band_filt_struct* str_two_band_bank;
+ ia_three_band_filt_struct* str_three_band_bank;
+ ia_four_band_filt_struct* str_four_band_bank;
+ drc_filter_bank->complexity = 0;
+ drc_filter_bank->num_bands = num_sub_bands;
+
+ if (num_sub_bands == 1) {
return 0;
+ } else if (num_sub_bands == 2) {
+ str_two_band_bank = &drc_filter_bank->str_two_band_bank;
+ impd_compute_filt_coeff(gain_params[1].crossover_freq_idx,
+ &(str_two_band_bank->low_pass),
+ &(str_two_band_bank->high_pass), NULL, 0);
+ } else if (num_sub_bands == 3) {
+ str_three_band_bank = &drc_filter_bank->str_three_band_bank;
+
+ impd_compute_filt_coeff(gain_params[1].crossover_freq_idx,
+ &(str_three_band_bank->str_low_pass_stage_2),
+ &(str_three_band_bank->str_high_pass_stage_2),
+ &(str_three_band_bank->str_all_pass_stage_2), 2);
+ impd_compute_filt_coeff(gain_params[2].crossover_freq_idx,
+ &(str_three_band_bank->str_low_pass_stage_1),
+ &(str_three_band_bank->str_high_pass_stage_1), NULL,
+ 0);
+ }
+
+ else if (num_sub_bands == 4) {
+ str_four_band_bank = &drc_filter_bank->str_four_band_bank;
+
+ impd_compute_filt_coeff(gain_params[1].crossover_freq_idx,
+ &(str_four_band_bank->str_low_pass_stage_3_low),
+ &(str_four_band_bank->str_high_pass_stage_3_low),
+ &(str_four_band_bank->str_all_pass_stage_2_high),
+ 2);
+ impd_compute_filt_coeff(gain_params[2].crossover_freq_idx,
+ &(str_four_band_bank->str_low_pass_stage_1),
+ &(str_four_band_bank->str_high_pass_stage_1), NULL,
+ 0);
+ impd_compute_filt_coeff(gain_params[3].crossover_freq_idx,
+ &(str_four_band_bank->str_low_pass_stage_3_high),
+ &(str_four_band_bank->str_high_pass_stage_3_high),
+ &(str_four_band_bank->str_all_pass_stage_2_low), 2);
+ } else {
+ return -1;
+ }
+
+ return 0;
}
-WORD32 impd_init_all_filter_banks( ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc,
- ia_drc_instructions_struct* str_drc_instruction_str,
- ia_filter_banks_struct* ia_filter_banks_struct)
-{
- WORD32 err_code=0;
- WORD32 b, g, i, k, m, s , crossover_freq_idx, num_ch_in_groups, num_ph_align_ch_groups;
- WORD32 match_found = 0, num_filter;
- WORD32 cascade_cross_idx[CHANNEL_GROUP_COUNT_MAX+1][CHANNEL_GROUP_COUNT_MAX * 3];
- WORD32 count[CHANNEL_GROUP_COUNT_MAX + 1];
-
- num_ch_in_groups = 0;
- num_ph_align_ch_groups = str_drc_instruction_str->num_drc_ch_groups;
-
-
- for (g=0; g<str_drc_instruction_str->num_drc_ch_groups; g++)
- {
- num_ch_in_groups += str_drc_instruction_str->num_chan_per_ch_group[g];
- }
-
- if (num_ch_in_groups < str_drc_instruction_str->audio_num_chan)
- {
- num_ph_align_ch_groups++;
- }
-
- ia_filter_banks_struct->nfilter_banks = str_drc_instruction_str->num_drc_ch_groups;
- ia_filter_banks_struct->num_ph_align_ch_groups = num_ph_align_ch_groups;
-
- if (str_p_loc_drc_coefficients_uni_drc == NULL)
- {
- ia_filter_banks_struct->str_drc_filter_bank->num_bands = 1;
+WORD32 impd_init_all_filter_banks(
+ ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc,
+ ia_drc_instructions_struct* str_drc_instruction_str,
+ ia_filter_banks_struct* ia_filter_banks_struct) {
+ WORD32 err_code = 0;
+ WORD32 b, g, i, k, m, s, crossover_freq_idx, num_ch_in_groups,
+ num_ph_align_ch_groups;
+ WORD32 match_found = 0, num_filter;
+ WORD32 cascade_cross_idx[CHANNEL_GROUP_COUNT_MAX + 1]
+ [CHANNEL_GROUP_COUNT_MAX * 3];
+ WORD32 count[CHANNEL_GROUP_COUNT_MAX + 1];
+
+ num_ch_in_groups = 0;
+ num_ph_align_ch_groups = str_drc_instruction_str->num_drc_ch_groups;
+
+ for (g = 0; g < str_drc_instruction_str->num_drc_ch_groups; g++) {
+ num_ch_in_groups += str_drc_instruction_str->num_chan_per_ch_group[g];
+ }
+
+ if (num_ch_in_groups < str_drc_instruction_str->audio_num_chan) {
+ num_ph_align_ch_groups++;
+ }
+
+ ia_filter_banks_struct->nfilter_banks =
+ str_drc_instruction_str->num_drc_ch_groups;
+ ia_filter_banks_struct->num_ph_align_ch_groups = num_ph_align_ch_groups;
+
+ if (str_p_loc_drc_coefficients_uni_drc == NULL) {
+ ia_filter_banks_struct->str_drc_filter_bank->num_bands = 1;
+ } else {
+ for (g = 0; g < str_drc_instruction_str->num_drc_ch_groups; g++) {
+ err_code = impd_initialize_filt_bank(
+ str_p_loc_drc_coefficients_uni_drc
+ ->gain_set_params[str_drc_instruction_str
+ ->gain_set_index_for_channel_group[g]]
+ .band_count,
+ str_p_loc_drc_coefficients_uni_drc
+ ->gain_set_params[str_drc_instruction_str
+ ->gain_set_index_for_channel_group[g]]
+ .gain_params,
+ &(ia_filter_banks_struct->str_drc_filter_bank[g]));
+ if (err_code != 0) return (err_code);
}
- else
- {
- for (g=0; g<str_drc_instruction_str->num_drc_ch_groups; g++)
- {
- err_code = impd_initialize_filt_bank(str_p_loc_drc_coefficients_uni_drc->gain_set_params[str_drc_instruction_str->gain_set_index_for_channel_group[g]].band_count,
- str_p_loc_drc_coefficients_uni_drc->gain_set_params[str_drc_instruction_str->gain_set_index_for_channel_group[g]].gain_params,
- &(ia_filter_banks_struct->str_drc_filter_bank[g]));
- if (err_code!=0)
- return (err_code);
+ }
+
+ for (g = 0; g < CHANNEL_GROUP_COUNT_MAX + 1; g++) {
+ count[g] = 0;
+ }
+ for (g = 0; g < str_drc_instruction_str->num_drc_ch_groups; g++) {
+ for (b = 1;
+ b < str_p_loc_drc_coefficients_uni_drc
+ ->gain_set_params[str_drc_instruction_str
+ ->gain_set_index_for_channel_group[g]]
+ .band_count;
+ b++) {
+ crossover_freq_idx =
+ str_p_loc_drc_coefficients_uni_drc
+ ->gain_set_params[str_drc_instruction_str
+ ->gain_set_index_for_channel_group[g]]
+ .gain_params[b]
+ .crossover_freq_idx;
+ for (k = 0; k < num_ph_align_ch_groups; k++) {
+ if (k != g) {
+ cascade_cross_idx[k][count[k]] = crossover_freq_idx;
+ count[k]++;
+ if (count[k] > CHANNEL_GROUP_COUNT_MAX * 3) {
+ return -1;
+ }
}
+ }
}
-
- for (g=0; g<CHANNEL_GROUP_COUNT_MAX + 1; g++)
- {
- count[g] = 0;
- }
- for (g=0; g<str_drc_instruction_str->num_drc_ch_groups; g++)
- {
- for (b=1; b<str_p_loc_drc_coefficients_uni_drc->gain_set_params[str_drc_instruction_str->gain_set_index_for_channel_group[g]].band_count; b++)
- {
- crossover_freq_idx = str_p_loc_drc_coefficients_uni_drc->gain_set_params[str_drc_instruction_str->gain_set_index_for_channel_group[g]].gain_params[b].crossover_freq_idx;
- for (k=0; k<num_ph_align_ch_groups; k++)
- {
- if (k!=g)
- {
- cascade_cross_idx[k][count[k]] = crossover_freq_idx;
- count[k]++;
- if (count[k] > CHANNEL_GROUP_COUNT_MAX * 3)
- {
- return -1 ;
- }
- }
- }
+ }
+
+ i = 0;
+ while (i < count[0]) {
+ crossover_freq_idx = cascade_cross_idx[0][i];
+ match_found = 0;
+ for (g = 1; g < num_ph_align_ch_groups; g++) {
+ match_found = 0;
+ for (k = 0; k < count[g]; k++) {
+ if (cascade_cross_idx[g][k] == crossover_freq_idx) {
+ match_found = 1;
+ break;
}
+ }
+ if (match_found == 0) break;
}
-
- i=0;
- while (i<count[0])
- {
- crossover_freq_idx = cascade_cross_idx[0][i];
- match_found = 0;
- for (g=1; g<num_ph_align_ch_groups; g++)
- {
- match_found = 0;
- for (k=0; k<count[g]; k++)
- {
- if (cascade_cross_idx[g][k] == crossover_freq_idx)
- {
- match_found = 1;
- break;
- }
+ if (match_found == 1) {
+ for (g = 0; g < num_ph_align_ch_groups; g++) {
+ for (m = 0; m < count[g]; m++) {
+ if (cascade_cross_idx[g][m] == crossover_freq_idx) {
+ for (s = m + 1; s < count[g]; s++) {
+ cascade_cross_idx[g][s - 1] = cascade_cross_idx[g][s];
}
- if (match_found == 0)
+ count[g]--;
break;
+ }
}
- if (match_found == 1)
- {
- for (g=0; g<num_ph_align_ch_groups; g++)
- {
- for (m=0; m<count[g]; m++)
- {
- if (cascade_cross_idx[g][m] == crossover_freq_idx)
- {
- for (s=m+1; s<count[g]; s++)
- {
- cascade_cross_idx[g][s-1] = cascade_cross_idx[g][s];
- }
- count[g]--;
- break;
- }
- }
- }
- i = 0;
- }
- else
- {
- i++;
- }
+ }
+ i = 0;
+ } else {
+ i++;
}
-
- for (g=0; g<num_ph_align_ch_groups; g++)
- {
- num_filter = count[g];
- if(num_filter>0){
- for(i=0;i<num_filter;i++){
- impd_compute_filt_coeff(cascade_cross_idx[g][i],
- NULL,
- NULL,
- &(ia_filter_banks_struct->str_drc_filter_bank[g].str_all_pass_cascade.str_all_pass_cascade_filter[i].str_all_pass_stage),
- 1);
- }
- ia_filter_banks_struct->str_drc_filter_bank[g].str_all_pass_cascade.num_filter = num_filter;
- }
-
- if (err_code!=0)
- return (err_code);
+ }
+
+ for (g = 0; g < num_ph_align_ch_groups; g++) {
+ num_filter = count[g];
+ if (num_filter > 0) {
+ for (i = 0; i < num_filter; i++) {
+ impd_compute_filt_coeff(
+ cascade_cross_idx[g][i], NULL, NULL,
+ &(ia_filter_banks_struct->str_drc_filter_bank[g]
+ .str_all_pass_cascade.str_all_pass_cascade_filter[i]
+ .str_all_pass_stage),
+ 1);
+ }
+ ia_filter_banks_struct->str_drc_filter_bank[g]
+ .str_all_pass_cascade.num_filter = num_filter;
}
- return 0;
-}
+ if (err_code != 0) return (err_code);
+ }
+ return 0;
+}
VOID impd_iir_second_order_filter_all_pass(ia_iir_filter_struct* filter,
- WORD32 chan_idx,
- WORD32 frame_len,
- FLOAT32* input,
- FLOAT32* output)
-{
- WORD32 i;
- FLOAT32 tmp;
- FLOAT32 a1 = filter->a1;
- FLOAT32 a2 = filter->a2;
- FLOAT32 b0 = filter->b0;
- FLOAT32 b1 = filter->b1;
- FLOAT32 b2 = filter->b2;
-
- FLOAT32 st1 = filter->x_p[chan_idx*2];
- FLOAT32 st2 = filter->y_p[chan_idx*2];
-
- for (i=0; i<frame_len; i++)
- {
- tmp = input[i];
- output[i] = b0 * tmp + st1;
- st1 = b1 * tmp - a1 * output[i] + st2;
- st2 = b2 * tmp - a2 * output[i];
- }
- filter->x_p[chan_idx*2] = st1;
- filter->y_p[chan_idx*2] = st2;
-
- return;
+ WORD32 chan_idx, WORD32 frame_len,
+ FLOAT32* input, FLOAT32* output) {
+ WORD32 i;
+ FLOAT32 tmp;
+ FLOAT32 a1 = filter->a1;
+ FLOAT32 a2 = filter->a2;
+ FLOAT32 b0 = filter->b0;
+ FLOAT32 b1 = filter->b1;
+ FLOAT32 b2 = filter->b2;
+
+ FLOAT32 st1 = filter->x_p[chan_idx * 2];
+ FLOAT32 st2 = filter->y_p[chan_idx * 2];
+
+ for (i = 0; i < frame_len; i++) {
+ tmp = input[i];
+ output[i] = b0 * tmp + st1;
+ st1 = b1 * tmp - a1 * output[i] + st2;
+ st2 = b2 * tmp - a2 * output[i];
+ }
+ filter->x_p[chan_idx * 2] = st1;
+ filter->y_p[chan_idx * 2] = st2;
+
+ return;
}
VOID impd_apply_low_high_filter(ia_iir_filter_struct* pstr_lp_filt_coeff,
- ia_iir_filter_struct* pstr_hp_filt_coeff,
- WORD32 chan_idx,
- WORD32 frame_len,
- FLOAT32* input,
- FLOAT32* output[])
-{
- WORD32 i;
- FLOAT32 tmp, tmp1;
- FLOAT32 a1_l = pstr_lp_filt_coeff->a1;
- FLOAT32 a2_l = pstr_lp_filt_coeff->a2;
- FLOAT32 b0_l = pstr_lp_filt_coeff->b0;
- FLOAT32 b1_l = pstr_lp_filt_coeff->b1;
- FLOAT32 b2_l = pstr_lp_filt_coeff->b2;
-
- FLOAT32 st1_l = pstr_lp_filt_coeff->x_p[chan_idx*2+0];
- FLOAT32 st2_l = pstr_lp_filt_coeff->x_p[chan_idx*2+1];
- FLOAT32 st3_l = pstr_lp_filt_coeff->y_p[chan_idx*2+0];
- FLOAT32 st4_l = pstr_lp_filt_coeff->y_p[chan_idx*2+1];
-
- FLOAT32 a1_h = pstr_hp_filt_coeff->a1;
- FLOAT32 a2_h = pstr_hp_filt_coeff->a2;
- FLOAT32 b0_h = pstr_hp_filt_coeff->b0;
- FLOAT32 b1_h = pstr_hp_filt_coeff->b1;
- FLOAT32 b2_h = pstr_hp_filt_coeff->b2;
-
- FLOAT32 st1_h = pstr_hp_filt_coeff->x_p[chan_idx*2+0];
- FLOAT32 st2_h = pstr_hp_filt_coeff->x_p[chan_idx*2+1];
- FLOAT32 st3_h = pstr_hp_filt_coeff->y_p[chan_idx*2+0];
- FLOAT32 st4_h = pstr_hp_filt_coeff->y_p[chan_idx*2+1];
-
- FLOAT32* output_low = output[0];
- FLOAT32* output_high = output[1];
-
- for (i=0; i<frame_len; i++)
- {
- tmp1 = input[i];
- tmp = b0_l * tmp1 + st1_l;
- st1_l = b1_l * tmp1 - a1_l * tmp + st2_l;
- st2_l = b2_l * tmp1 - a2_l * tmp;
-
- output_low[i] = b0_l * tmp + st3_l;
- st3_l = b1_l * tmp - a1_l * output_low[i] + st4_l;
- st4_l = b2_l * tmp - a2_l * output_low[i];
-
- tmp = b0_h * tmp1 + st1_h;
- st1_h = b1_h * tmp1 - a1_h * tmp + st2_h;
- st2_h = b2_h * tmp1 - a2_h * tmp;
-
- output_high[i] = b0_h * tmp + st3_h;
- st3_h = b1_h * tmp - a1_h * output_high[i] + st4_h;
- st4_h = b2_h * tmp - a2_h * output_high[i];
- }
- pstr_lp_filt_coeff->x_p[chan_idx*2+0] = st1_l;
- pstr_lp_filt_coeff->x_p[chan_idx*2+1] = st2_l;
- pstr_lp_filt_coeff->y_p[chan_idx*2+0] = st3_l;
- pstr_lp_filt_coeff->y_p[chan_idx*2+1] = st4_l;
-
- pstr_hp_filt_coeff->x_p[chan_idx*2+0] = st1_h;
- pstr_hp_filt_coeff->x_p[chan_idx*2+1] = st2_h;
- pstr_hp_filt_coeff->y_p[chan_idx*2+0] = st3_h;
- pstr_hp_filt_coeff->y_p[chan_idx*2+1] = st4_h;
-
- return;
+ ia_iir_filter_struct* pstr_hp_filt_coeff,
+ WORD32 chan_idx, WORD32 frame_len,
+ FLOAT32* input, FLOAT32* output[]) {
+ WORD32 i;
+ FLOAT32 tmp, tmp1;
+ FLOAT32 a1_l = pstr_lp_filt_coeff->a1;
+ FLOAT32 a2_l = pstr_lp_filt_coeff->a2;
+ FLOAT32 b0_l = pstr_lp_filt_coeff->b0;
+ FLOAT32 b1_l = pstr_lp_filt_coeff->b1;
+ FLOAT32 b2_l = pstr_lp_filt_coeff->b2;
+
+ FLOAT32 st1_l = pstr_lp_filt_coeff->x_p[chan_idx * 2 + 0];
+ FLOAT32 st2_l = pstr_lp_filt_coeff->x_p[chan_idx * 2 + 1];
+ FLOAT32 st3_l = pstr_lp_filt_coeff->y_p[chan_idx * 2 + 0];
+ FLOAT32 st4_l = pstr_lp_filt_coeff->y_p[chan_idx * 2 + 1];
+
+ FLOAT32 a1_h = pstr_hp_filt_coeff->a1;
+ FLOAT32 a2_h = pstr_hp_filt_coeff->a2;
+ FLOAT32 b0_h = pstr_hp_filt_coeff->b0;
+ FLOAT32 b1_h = pstr_hp_filt_coeff->b1;
+ FLOAT32 b2_h = pstr_hp_filt_coeff->b2;
+
+ FLOAT32 st1_h = pstr_hp_filt_coeff->x_p[chan_idx * 2 + 0];
+ FLOAT32 st2_h = pstr_hp_filt_coeff->x_p[chan_idx * 2 + 1];
+ FLOAT32 st3_h = pstr_hp_filt_coeff->y_p[chan_idx * 2 + 0];
+ FLOAT32 st4_h = pstr_hp_filt_coeff->y_p[chan_idx * 2 + 1];
+
+ FLOAT32* output_low = output[0];
+ FLOAT32* output_high = output[1];
+
+ for (i = 0; i < frame_len; i++) {
+ tmp1 = input[i];
+ tmp = b0_l * tmp1 + st1_l;
+ st1_l = b1_l * tmp1 - a1_l * tmp + st2_l;
+ st2_l = b2_l * tmp1 - a2_l * tmp;
+
+ output_low[i] = b0_l * tmp + st3_l;
+ st3_l = b1_l * tmp - a1_l * output_low[i] + st4_l;
+ st4_l = b2_l * tmp - a2_l * output_low[i];
+
+ tmp = b0_h * tmp1 + st1_h;
+ st1_h = b1_h * tmp1 - a1_h * tmp + st2_h;
+ st2_h = b2_h * tmp1 - a2_h * tmp;
+
+ output_high[i] = b0_h * tmp + st3_h;
+ st3_h = b1_h * tmp - a1_h * output_high[i] + st4_h;
+ st4_h = b2_h * tmp - a2_h * output_high[i];
+ }
+ pstr_lp_filt_coeff->x_p[chan_idx * 2 + 0] = st1_l;
+ pstr_lp_filt_coeff->x_p[chan_idx * 2 + 1] = st2_l;
+ pstr_lp_filt_coeff->y_p[chan_idx * 2 + 0] = st3_l;
+ pstr_lp_filt_coeff->y_p[chan_idx * 2 + 1] = st4_l;
+
+ pstr_hp_filt_coeff->x_p[chan_idx * 2 + 0] = st1_h;
+ pstr_hp_filt_coeff->x_p[chan_idx * 2 + 1] = st2_h;
+ pstr_hp_filt_coeff->y_p[chan_idx * 2 + 0] = st3_h;
+ pstr_hp_filt_coeff->y_p[chan_idx * 2 + 1] = st4_h;
+
+ return;
}
VOID impd_two_band_filter_process(ia_two_band_filt_struct* str_two_band_bank,
- WORD32 chan_idx,
- WORD32 frame_len,
- FLOAT32* input,
- FLOAT32* output[])
-{
- ia_iir_filter_struct* pstr_lp_filt_coeff=&str_two_band_bank->low_pass;
- ia_iir_filter_struct* pstr_hp_filt_coeff=&str_two_band_bank->high_pass;
-
- impd_apply_low_high_filter(pstr_lp_filt_coeff,
- pstr_hp_filt_coeff,
- chan_idx,
- frame_len,
- input,
- output);
- return;
+ WORD32 chan_idx, WORD32 frame_len,
+ FLOAT32* input, FLOAT32* output[]) {
+ ia_iir_filter_struct* pstr_lp_filt_coeff = &str_two_band_bank->low_pass;
+ ia_iir_filter_struct* pstr_hp_filt_coeff = &str_two_band_bank->high_pass;
+
+ impd_apply_low_high_filter(pstr_lp_filt_coeff, pstr_hp_filt_coeff, chan_idx,
+ frame_len, input, output);
+ return;
}
+VOID impd_three_band_filter_process(
+ ia_three_band_filt_struct* str_three_band_bank, WORD32 c, WORD32 size,
+ FLOAT32* input, FLOAT32* output[]) {
+ WORD32 err_code = 0;
+ ia_iir_filter_struct* all_pass_filter;
+ ia_iir_filter_struct* pstr_lp_filt_coeff =
+ &str_three_band_bank->str_low_pass_stage_1;
+ ia_iir_filter_struct* pstr_hp_filt_coeff =
+ &str_three_band_bank->str_high_pass_stage_1;
+ FLOAT32* output1[2];
+ output1[0] = output[0];
+ output1[1] = output[1];
+
+ impd_apply_low_high_filter(pstr_lp_filt_coeff, pstr_hp_filt_coeff, c, size,
+ input, output1);
+
+ all_pass_filter = &str_three_band_bank->str_all_pass_stage_2;
+
+ impd_iir_second_order_filter_all_pass(all_pass_filter, c, size, output1[1],
+ output[2]);
+ pstr_lp_filt_coeff = &str_three_band_bank->str_low_pass_stage_2;
+ pstr_hp_filt_coeff = &str_three_band_bank->str_high_pass_stage_2;
+
+ impd_apply_low_high_filter(pstr_lp_filt_coeff, pstr_hp_filt_coeff, c, size,
+ output1[0], output1);
+
+ return;
+}
+VOID impd_four_band_filter_process(ia_four_band_filt_struct* str_four_band_bank,
+ WORD32 cha_idx, WORD32 win_size,
+ FLOAT32* input, FLOAT32* output[]) {
+ WORD32 err_code = 0;
+ ia_iir_filter_struct* all_pass_filter;
+ ia_iir_filter_struct* pstr_lp_filt_coeff =
+ &str_four_band_bank->str_low_pass_stage_1;
+ ia_iir_filter_struct* pstr_hp_filt_coeff =
+ &str_four_band_bank->str_high_pass_stage_1;
+ FLOAT32* output1[2];
+ FLOAT32* output2[2];
+ output1[0] = output[0];
+ output1[1] = output[1];
+ output2[0] = output[2];
+ output2[1] = output[3];
-VOID impd_three_band_filter_process(ia_three_band_filt_struct* str_three_band_bank,
- WORD32 c,
- WORD32 size,
- FLOAT32* input,
- FLOAT32* output[])
-{
- WORD32 err_code=0;
- ia_iir_filter_struct* all_pass_filter;
- ia_iir_filter_struct* pstr_lp_filt_coeff=&str_three_band_bank->str_low_pass_stage_1;
- ia_iir_filter_struct* pstr_hp_filt_coeff=&str_three_band_bank->str_high_pass_stage_1;
- FLOAT32* output1[2];
- output1[0]=output[0];
- output1[1]=output[1];
-
- impd_apply_low_high_filter(pstr_lp_filt_coeff,
- pstr_hp_filt_coeff,
- c,
- size,
- input,
- output1);
-
- all_pass_filter =&str_three_band_bank->str_all_pass_stage_2;
-
- impd_iir_second_order_filter_all_pass(all_pass_filter,
- c,
- size,
- output1[1],
- output[2]);
- pstr_lp_filt_coeff=&str_three_band_bank->str_low_pass_stage_2;
- pstr_hp_filt_coeff=&str_three_band_bank->str_high_pass_stage_2;
-
-
- impd_apply_low_high_filter(pstr_lp_filt_coeff,
- pstr_hp_filt_coeff,
- c,
- size,
- output1[0],
- output1);
-
- return;
+ impd_apply_low_high_filter(pstr_lp_filt_coeff, pstr_hp_filt_coeff, cha_idx,
+ win_size, input, output1);
-}
+ all_pass_filter = &str_four_band_bank->str_all_pass_stage_2_low;
+ impd_iir_second_order_filter_all_pass(all_pass_filter, cha_idx, win_size,
+ output1[0], output1[0]);
-VOID impd_four_band_filter_process(ia_four_band_filt_struct* str_four_band_bank,
- WORD32 cha_idx,
- WORD32 win_size,
- FLOAT32* input,
- FLOAT32* output[])
-{
- WORD32 err_code=0;
- ia_iir_filter_struct* all_pass_filter;
- ia_iir_filter_struct* pstr_lp_filt_coeff=&str_four_band_bank->str_low_pass_stage_1;
- ia_iir_filter_struct* pstr_hp_filt_coeff=&str_four_band_bank->str_high_pass_stage_1;
- FLOAT32* output1[2];
- FLOAT32* output2[2];
- output1[0]=output[0];
- output1[1]=output[1];
- output2[0]=output[2];
- output2[1]=output[3];
-
- impd_apply_low_high_filter(pstr_lp_filt_coeff,
- pstr_hp_filt_coeff,
- cha_idx,
- win_size,
- input,
- output1);
-
- all_pass_filter =&str_four_band_bank->str_all_pass_stage_2_low;
-
- impd_iir_second_order_filter_all_pass(all_pass_filter,
- cha_idx,
- win_size,
- output1[0],
- output1[0]);
-
-
- all_pass_filter =&str_four_band_bank->str_all_pass_stage_2_high;
-
- impd_iir_second_order_filter_all_pass(all_pass_filter,
- cha_idx,
- win_size,
- output1[1],
- output2[0]);
-
- pstr_lp_filt_coeff = &str_four_band_bank->str_low_pass_stage_3_low;
- pstr_hp_filt_coeff = &str_four_band_bank->str_high_pass_stage_3_low;
-
-
- impd_apply_low_high_filter(pstr_lp_filt_coeff,
- pstr_hp_filt_coeff,
- cha_idx,
- win_size,
- output1[0],
- output1);
-
- pstr_lp_filt_coeff = &str_four_band_bank->str_low_pass_stage_3_high;
- pstr_hp_filt_coeff = &str_four_band_bank->str_high_pass_stage_3_high;
-
- impd_apply_low_high_filter(pstr_lp_filt_coeff,
- pstr_hp_filt_coeff,
- cha_idx,
- win_size,
- output2[0],
- output2);
-
- return;
+ all_pass_filter = &str_four_band_bank->str_all_pass_stage_2_high;
+
+ impd_iir_second_order_filter_all_pass(all_pass_filter, cha_idx, win_size,
+ output1[1], output2[0]);
+
+ pstr_lp_filt_coeff = &str_four_band_bank->str_low_pass_stage_3_low;
+ pstr_hp_filt_coeff = &str_four_band_bank->str_high_pass_stage_3_low;
+
+ impd_apply_low_high_filter(pstr_lp_filt_coeff, pstr_hp_filt_coeff, cha_idx,
+ win_size, output1[0], output1);
+
+ pstr_lp_filt_coeff = &str_four_band_bank->str_low_pass_stage_3_high;
+ pstr_hp_filt_coeff = &str_four_band_bank->str_high_pass_stage_3_high;
+
+ impd_apply_low_high_filter(pstr_lp_filt_coeff, pstr_hp_filt_coeff, cha_idx,
+ win_size, output2[0], output2);
+
+ return;
}
-VOID impd_all_pass_cascade_process(ia_all_pass_cascade_struct *str_all_pass_cascade,
- WORD32 ch_idx,
- WORD32 win_size,
- FLOAT32* input)
-{
- WORD32 i;
-
- for (i=0; i<str_all_pass_cascade->num_filter; i++)
- {
- impd_iir_second_order_filter_all_pass (&(str_all_pass_cascade->str_all_pass_cascade_filter[i].str_all_pass_stage),
- ch_idx,
- win_size,
- input,
- input);
- }
+VOID impd_all_pass_cascade_process(
+ ia_all_pass_cascade_struct* str_all_pass_cascade, WORD32 ch_idx,
+ WORD32 win_size, FLOAT32* input) {
+ WORD32 i;
+
+ for (i = 0; i < str_all_pass_cascade->num_filter; i++) {
+ impd_iir_second_order_filter_all_pass(
+ &(str_all_pass_cascade->str_all_pass_cascade_filter[i]
+ .str_all_pass_stage),
+ ch_idx, win_size, input, input);
+ }
- return;
+ return;
} \ No newline at end of file
diff --git a/decoder/drc_src/impd_drc_filter_bank.c b/decoder/drc_src/impd_drc_filter_bank.c
index 7c7886f..e63bea5 100644
--- a/decoder/drc_src/impd_drc_filter_bank.c
+++ b/decoder/drc_src/impd_drc_filter_bank.c
@@ -29,477 +29,403 @@
#include "impd_drc_rom.h"
VOID impd_compute_filt_coeff(WORD32 crossover_freq_idx,
- ia_iir_filter_struct* pstr_lp_filt_coeff,
- ia_iir_filter_struct* pstr_hp_filt_coeff,
- ia_iir_filter_struct* pstr_ap_filt_coeff,
- WORD32 filter_type)
-{
- FLOAT32 gamma = normal_cross_freq[crossover_freq_idx].gamma;
- FLOAT32 delta = normal_cross_freq[crossover_freq_idx].delta;
-
- if(filter_type==0||filter_type==2){
- pstr_lp_filt_coeff->a0 = 1.0f;
- pstr_lp_filt_coeff->a1 = 2.0f * (gamma - delta);
- pstr_lp_filt_coeff->a2 = 2.0f * (gamma + delta) - 1.0f;
- pstr_lp_filt_coeff->b0 = gamma;
- pstr_lp_filt_coeff->b1 = 2.0f * gamma;
- pstr_lp_filt_coeff->b2 = gamma;
-
- pstr_hp_filt_coeff->a0 = 1.0f;
- pstr_hp_filt_coeff->a1 = pstr_lp_filt_coeff->a1;
- pstr_hp_filt_coeff->a2 = pstr_lp_filt_coeff->a2;
- pstr_hp_filt_coeff->b0 = delta;
- pstr_hp_filt_coeff->b1 = - 2.0f * delta;
- pstr_hp_filt_coeff->b2 = delta;
- }
-
- if(filter_type==1||filter_type==2){
- pstr_ap_filt_coeff->a0 = 1.0f;
- pstr_ap_filt_coeff->a1 = 2.0f * (gamma - delta);;
- pstr_ap_filt_coeff->a2 = 2.0f * (gamma + delta) - 1.0f;;
- pstr_ap_filt_coeff->b0 = pstr_ap_filt_coeff->a2;
- pstr_ap_filt_coeff->b1 = pstr_ap_filt_coeff->a1;
- pstr_ap_filt_coeff->b2 = pstr_ap_filt_coeff->a0;
- }
-
- return;
+ ia_iir_filter_struct* pstr_lp_filt_coeff,
+ ia_iir_filter_struct* pstr_hp_filt_coeff,
+ ia_iir_filter_struct* pstr_ap_filt_coeff,
+ WORD32 filter_type) {
+ FLOAT32 gamma = normal_cross_freq[crossover_freq_idx].gamma;
+ FLOAT32 delta = normal_cross_freq[crossover_freq_idx].delta;
+
+ if (filter_type == 0 || filter_type == 2) {
+ pstr_lp_filt_coeff->a0 = 1.0f;
+ pstr_lp_filt_coeff->a1 = 2.0f * (gamma - delta);
+ pstr_lp_filt_coeff->a2 = 2.0f * (gamma + delta) - 1.0f;
+ pstr_lp_filt_coeff->b0 = gamma;
+ pstr_lp_filt_coeff->b1 = 2.0f * gamma;
+ pstr_lp_filt_coeff->b2 = gamma;
+
+ pstr_hp_filt_coeff->a0 = 1.0f;
+ pstr_hp_filt_coeff->a1 = pstr_lp_filt_coeff->a1;
+ pstr_hp_filt_coeff->a2 = pstr_lp_filt_coeff->a2;
+ pstr_hp_filt_coeff->b0 = delta;
+ pstr_hp_filt_coeff->b1 = -2.0f * delta;
+ pstr_hp_filt_coeff->b2 = delta;
+ }
+
+ if (filter_type == 1 || filter_type == 2) {
+ pstr_ap_filt_coeff->a0 = 1.0f;
+ pstr_ap_filt_coeff->a1 = 2.0f * (gamma - delta);
+ ;
+ pstr_ap_filt_coeff->a2 = 2.0f * (gamma + delta) - 1.0f;
+ ;
+ pstr_ap_filt_coeff->b0 = pstr_ap_filt_coeff->a2;
+ pstr_ap_filt_coeff->b1 = pstr_ap_filt_coeff->a1;
+ pstr_ap_filt_coeff->b2 = pstr_ap_filt_coeff->a0;
+ }
+
+ return;
}
WORD32 impd_initialize_filt_bank(WORD32 num_sub_bands,
- ia_gain_params_struct* gain_params,
- ia_drc_filter_bank_struct* drc_filter_bank)
-{
- ia_two_band_filt_struct* str_two_band_bank;
- ia_three_band_filt_struct* str_three_band_bank;
- ia_four_band_filt_struct* str_four_band_bank;
- drc_filter_bank->complexity = 0;
- drc_filter_bank->num_bands = num_sub_bands;
-
-
- if(num_sub_bands==1){
- return 0;
- }
- else if(num_sub_bands==2){
- str_two_band_bank = &drc_filter_bank->str_two_band_bank;
- impd_compute_filt_coeff(gain_params[1].crossover_freq_idx,
- &(str_two_band_bank->low_pass),
- &(str_two_band_bank->high_pass),
- NULL,
- 0);
- }
- else if(num_sub_bands==3){
- str_three_band_bank = &drc_filter_bank->str_three_band_bank;
-
- impd_compute_filt_coeff(gain_params[1].crossover_freq_idx,
- &(str_three_band_bank->str_low_pass_stage_2),
- &(str_three_band_bank->str_high_pass_stage_2),
- &(str_three_band_bank->str_all_pass_stage_2),
- 2);
- impd_compute_filt_coeff(gain_params[2].crossover_freq_idx,
- &(str_three_band_bank->str_low_pass_stage_1),
- &(str_three_band_bank->str_high_pass_stage_1),
- NULL,
- 0);
- }
-
- else if(num_sub_bands==4){
- str_four_band_bank = &drc_filter_bank->str_four_band_bank;
-
- impd_compute_filt_coeff(gain_params[1].crossover_freq_idx,
- &(str_four_band_bank->str_low_pass_stage_3_low),
- &(str_four_band_bank->str_high_pass_stage_3_low),
- &(str_four_band_bank->str_all_pass_stage_2_high),
- 2);
- impd_compute_filt_coeff(gain_params[2].crossover_freq_idx,
- &(str_four_band_bank->str_low_pass_stage_1),
- &(str_four_band_bank->str_high_pass_stage_1),
- NULL,
- 0);
- impd_compute_filt_coeff(gain_params[3].crossover_freq_idx,
- &(str_four_band_bank->str_low_pass_stage_3_high),
- &(str_four_band_bank->str_high_pass_stage_3_high),
- &(str_four_band_bank->str_all_pass_stage_2_low),
- 2);
- }
- else {
- return -1;
- }
-
+ ia_gain_params_struct* gain_params,
+ ia_drc_filter_bank_struct* drc_filter_bank) {
+ ia_two_band_filt_struct* str_two_band_bank;
+ ia_three_band_filt_struct* str_three_band_bank;
+ ia_four_band_filt_struct* str_four_band_bank;
+ drc_filter_bank->complexity = 0;
+ drc_filter_bank->num_bands = num_sub_bands;
+
+ if (num_sub_bands == 1) {
return 0;
+ } else if (num_sub_bands == 2) {
+ str_two_band_bank = &drc_filter_bank->str_two_band_bank;
+ impd_compute_filt_coeff(gain_params[1].crossover_freq_idx,
+ &(str_two_band_bank->low_pass),
+ &(str_two_band_bank->high_pass), NULL, 0);
+ } else if (num_sub_bands == 3) {
+ str_three_band_bank = &drc_filter_bank->str_three_band_bank;
+
+ impd_compute_filt_coeff(gain_params[1].crossover_freq_idx,
+ &(str_three_band_bank->str_low_pass_stage_2),
+ &(str_three_band_bank->str_high_pass_stage_2),
+ &(str_three_band_bank->str_all_pass_stage_2), 2);
+ impd_compute_filt_coeff(gain_params[2].crossover_freq_idx,
+ &(str_three_band_bank->str_low_pass_stage_1),
+ &(str_three_band_bank->str_high_pass_stage_1), NULL,
+ 0);
+ }
+
+ else if (num_sub_bands == 4) {
+ str_four_band_bank = &drc_filter_bank->str_four_band_bank;
+
+ impd_compute_filt_coeff(gain_params[1].crossover_freq_idx,
+ &(str_four_band_bank->str_low_pass_stage_3_low),
+ &(str_four_band_bank->str_high_pass_stage_3_low),
+ &(str_four_band_bank->str_all_pass_stage_2_high),
+ 2);
+ impd_compute_filt_coeff(gain_params[2].crossover_freq_idx,
+ &(str_four_band_bank->str_low_pass_stage_1),
+ &(str_four_band_bank->str_high_pass_stage_1), NULL,
+ 0);
+ impd_compute_filt_coeff(gain_params[3].crossover_freq_idx,
+ &(str_four_band_bank->str_low_pass_stage_3_high),
+ &(str_four_band_bank->str_high_pass_stage_3_high),
+ &(str_four_band_bank->str_all_pass_stage_2_low), 2);
+ } else {
+ return -1;
+ }
+
+ return 0;
}
-WORD32 impd_init_all_filter_banks( ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc,
- ia_drc_instructions_struct* str_drc_instruction_str,
- ia_filter_banks_struct* ia_filter_banks_struct)
-{
- WORD32 err_code=0;
- WORD32 b, g, i, k, m, s , crossover_freq_idx, num_ch_in_groups, num_ph_align_ch_groups;
- WORD32 match_found = 0, num_filter;
- WORD32 cascade_cross_idx[CHANNEL_GROUP_COUNT_MAX+1][CHANNEL_GROUP_COUNT_MAX * 3];
- WORD32 count[CHANNEL_GROUP_COUNT_MAX + 1];
-
- num_ch_in_groups = 0;
- num_ph_align_ch_groups = str_drc_instruction_str->num_drc_ch_groups;
-
-
- for (g=0; g<str_drc_instruction_str->num_drc_ch_groups; g++)
- {
- num_ch_in_groups += str_drc_instruction_str->num_chan_per_ch_group[g];
- }
-
- if (num_ch_in_groups < str_drc_instruction_str->audio_num_chan)
- {
- num_ph_align_ch_groups++;
- }
-
- ia_filter_banks_struct->nfilter_banks = str_drc_instruction_str->num_drc_ch_groups;
- ia_filter_banks_struct->num_ph_align_ch_groups = num_ph_align_ch_groups;
-
- if (str_p_loc_drc_coefficients_uni_drc == NULL)
- {
- ia_filter_banks_struct->str_drc_filter_bank->num_bands = 1;
+WORD32 impd_init_all_filter_banks(
+ ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc,
+ ia_drc_instructions_struct* str_drc_instruction_str,
+ ia_filter_banks_struct* ia_filter_banks_struct) {
+ WORD32 err_code = 0;
+ WORD32 b, g, i, k, m, s, crossover_freq_idx, num_ch_in_groups,
+ num_ph_align_ch_groups;
+ WORD32 match_found = 0, num_filter;
+ WORD32 cascade_cross_idx[CHANNEL_GROUP_COUNT_MAX + 1]
+ [CHANNEL_GROUP_COUNT_MAX * 3];
+ WORD32 count[CHANNEL_GROUP_COUNT_MAX + 1];
+
+ num_ch_in_groups = 0;
+ num_ph_align_ch_groups = str_drc_instruction_str->num_drc_ch_groups;
+
+ for (g = 0; g < str_drc_instruction_str->num_drc_ch_groups; g++) {
+ num_ch_in_groups += str_drc_instruction_str->num_chan_per_ch_group[g];
+ }
+
+ if (num_ch_in_groups < str_drc_instruction_str->audio_num_chan) {
+ num_ph_align_ch_groups++;
+ }
+
+ ia_filter_banks_struct->nfilter_banks =
+ str_drc_instruction_str->num_drc_ch_groups;
+ ia_filter_banks_struct->num_ph_align_ch_groups = num_ph_align_ch_groups;
+
+ if (str_p_loc_drc_coefficients_uni_drc == NULL) {
+ ia_filter_banks_struct->str_drc_filter_bank->num_bands = 1;
+ } else {
+ for (g = 0; g < str_drc_instruction_str->num_drc_ch_groups; g++) {
+ err_code = impd_initialize_filt_bank(
+ str_p_loc_drc_coefficients_uni_drc
+ ->gain_set_params[str_drc_instruction_str
+ ->gain_set_index_for_channel_group[g]]
+ .band_count,
+ str_p_loc_drc_coefficients_uni_drc
+ ->gain_set_params[str_drc_instruction_str
+ ->gain_set_index_for_channel_group[g]]
+ .gain_params,
+ &(ia_filter_banks_struct->str_drc_filter_bank[g]));
+ if (err_code != 0) return (err_code);
}
- else
- {
- for (g=0; g<str_drc_instruction_str->num_drc_ch_groups; g++)
- {
- err_code = impd_initialize_filt_bank(str_p_loc_drc_coefficients_uni_drc->gain_set_params[str_drc_instruction_str->gain_set_index_for_channel_group[g]].band_count,
- str_p_loc_drc_coefficients_uni_drc->gain_set_params[str_drc_instruction_str->gain_set_index_for_channel_group[g]].gain_params,
- &(ia_filter_banks_struct->str_drc_filter_bank[g]));
- if (err_code!=0)
- return (err_code);
+ }
+
+ for (g = 0; g < CHANNEL_GROUP_COUNT_MAX + 1; g++) {
+ count[g] = 0;
+ }
+ for (g = 0; g < str_drc_instruction_str->num_drc_ch_groups; g++) {
+ for (b = 1;
+ b < str_p_loc_drc_coefficients_uni_drc
+ ->gain_set_params[str_drc_instruction_str
+ ->gain_set_index_for_channel_group[g]]
+ .band_count;
+ b++) {
+ crossover_freq_idx =
+ str_p_loc_drc_coefficients_uni_drc
+ ->gain_set_params[str_drc_instruction_str
+ ->gain_set_index_for_channel_group[g]]
+ .gain_params[b]
+ .crossover_freq_idx;
+ for (k = 0; k < num_ph_align_ch_groups; k++) {
+ if (k != g) {
+ cascade_cross_idx[k][count[k]] = crossover_freq_idx;
+ count[k]++;
+ if (count[k] > CHANNEL_GROUP_COUNT_MAX * 3) {
+ return -1;
+ }
}
+ }
}
-
- for (g=0; g<CHANNEL_GROUP_COUNT_MAX + 1; g++)
- {
- count[g] = 0;
- }
- for (g=0; g<str_drc_instruction_str->num_drc_ch_groups; g++)
- {
- for (b=1; b<str_p_loc_drc_coefficients_uni_drc->gain_set_params[str_drc_instruction_str->gain_set_index_for_channel_group[g]].band_count; b++)
- {
- crossover_freq_idx = str_p_loc_drc_coefficients_uni_drc->gain_set_params[str_drc_instruction_str->gain_set_index_for_channel_group[g]].gain_params[b].crossover_freq_idx;
- for (k=0; k<num_ph_align_ch_groups; k++)
- {
- if (k!=g)
- {
- cascade_cross_idx[k][count[k]] = crossover_freq_idx;
- count[k]++;
- if (count[k] > CHANNEL_GROUP_COUNT_MAX * 3)
- {
- return -1 ;
- }
- }
- }
+ }
+
+ i = 0;
+ while (i < count[0]) {
+ crossover_freq_idx = cascade_cross_idx[0][i];
+ match_found = 0;
+ for (g = 1; g < num_ph_align_ch_groups; g++) {
+ match_found = 0;
+ for (k = 0; k < count[g]; k++) {
+ if (cascade_cross_idx[g][k] == crossover_freq_idx) {
+ match_found = 1;
+ break;
}
+ }
+ if (match_found == 0) break;
}
-
- i=0;
- while (i<count[0])
- {
- crossover_freq_idx = cascade_cross_idx[0][i];
- match_found = 0;
- for (g=1; g<num_ph_align_ch_groups; g++)
- {
- match_found = 0;
- for (k=0; k<count[g]; k++)
- {
- if (cascade_cross_idx[g][k] == crossover_freq_idx)
- {
- match_found = 1;
- break;
- }
+ if (match_found == 1) {
+ for (g = 0; g < num_ph_align_ch_groups; g++) {
+ for (m = 0; m < count[g]; m++) {
+ if (cascade_cross_idx[g][m] == crossover_freq_idx) {
+ for (s = m + 1; s < count[g]; s++) {
+ cascade_cross_idx[g][s - 1] = cascade_cross_idx[g][s];
}
- if (match_found == 0)
+ count[g]--;
break;
+ }
}
- if (match_found == 1)
- {
- for (g=0; g<num_ph_align_ch_groups; g++)
- {
- for (m=0; m<count[g]; m++)
- {
- if (cascade_cross_idx[g][m] == crossover_freq_idx)
- {
- for (s=m+1; s<count[g]; s++)
- {
- cascade_cross_idx[g][s-1] = cascade_cross_idx[g][s];
- }
- count[g]--;
- break;
- }
- }
- }
- i = 0;
- }
- else
- {
- i++;
- }
+ }
+ i = 0;
+ } else {
+ i++;
}
-
- for (g=0; g<num_ph_align_ch_groups; g++)
- {
- num_filter = count[g];
- if(num_filter>0){
- for(i=0;i<num_filter;i++){
- impd_compute_filt_coeff(cascade_cross_idx[g][i],
- NULL,
- NULL,
- &(ia_filter_banks_struct->str_drc_filter_bank[g].str_all_pass_cascade.str_all_pass_cascade_filter[i].str_all_pass_stage),
- 1);
- }
- ia_filter_banks_struct->str_drc_filter_bank[g].str_all_pass_cascade.num_filter = num_filter;
- }
-
- if (err_code!=0)
- return (err_code);
+ }
+
+ for (g = 0; g < num_ph_align_ch_groups; g++) {
+ num_filter = count[g];
+ if (num_filter > 0) {
+ for (i = 0; i < num_filter; i++) {
+ impd_compute_filt_coeff(
+ cascade_cross_idx[g][i], NULL, NULL,
+ &(ia_filter_banks_struct->str_drc_filter_bank[g]
+ .str_all_pass_cascade.str_all_pass_cascade_filter[i]
+ .str_all_pass_stage),
+ 1);
+ }
+ ia_filter_banks_struct->str_drc_filter_bank[g]
+ .str_all_pass_cascade.num_filter = num_filter;
}
- return 0;
-}
+ if (err_code != 0) return (err_code);
+ }
+ return 0;
+}
VOID impd_iir_second_order_filter_all_pass(ia_iir_filter_struct* filter,
- WORD32 chan_idx,
- WORD32 frame_len,
- FLOAT32* input,
- FLOAT32* output)
-{
- WORD32 i;
- FLOAT32 tmp;
- FLOAT32 a1 = filter->a1;
- FLOAT32 a2 = filter->a2;
- FLOAT32 b0 = filter->b0;
- FLOAT32 b1 = filter->b1;
- FLOAT32 b2 = filter->b2;
-
- FLOAT32 st1 = filter->x_p[chan_idx*2];
- FLOAT32 st2 = filter->y_p[chan_idx*2];
-
- for (i=0; i<frame_len; i++)
- {
- tmp = input[i];
- output[i] = b0 * tmp + st1;
- st1 = b1 * tmp - a1 * output[i] + st2;
- st2 = b2 * tmp - a2 * output[i];
- }
- filter->x_p[chan_idx*2] = st1;
- filter->y_p[chan_idx*2] = st2;
-
- return;
+ WORD32 chan_idx, WORD32 frame_len,
+ FLOAT32* input, FLOAT32* output) {
+ WORD32 i;
+ FLOAT32 tmp;
+ FLOAT32 a1 = filter->a1;
+ FLOAT32 a2 = filter->a2;
+ FLOAT32 b0 = filter->b0;
+ FLOAT32 b1 = filter->b1;
+ FLOAT32 b2 = filter->b2;
+
+ FLOAT32 st1 = filter->x_p[chan_idx * 2];
+ FLOAT32 st2 = filter->y_p[chan_idx * 2];
+
+ for (i = 0; i < frame_len; i++) {
+ tmp = input[i];
+ output[i] = b0 * tmp + st1;
+ st1 = b1 * tmp - a1 * output[i] + st2;
+ st2 = b2 * tmp - a2 * output[i];
+ }
+ filter->x_p[chan_idx * 2] = st1;
+ filter->y_p[chan_idx * 2] = st2;
+
+ return;
}
VOID impd_apply_low_high_filter(ia_iir_filter_struct* pstr_lp_filt_coeff,
- ia_iir_filter_struct* pstr_hp_filt_coeff,
- WORD32 chan_idx,
- WORD32 frame_len,
- FLOAT32* input,
- FLOAT32* output[])
-{
- WORD32 i;
- FLOAT32 tmp, tmp1;
- FLOAT32 a1_l = pstr_lp_filt_coeff->a1;
- FLOAT32 a2_l = pstr_lp_filt_coeff->a2;
- FLOAT32 b0_l = pstr_lp_filt_coeff->b0;
- FLOAT32 b1_l = pstr_lp_filt_coeff->b1;
- FLOAT32 b2_l = pstr_lp_filt_coeff->b2;
-
- FLOAT32 st1_l = pstr_lp_filt_coeff->x_p[chan_idx*2+0];
- FLOAT32 st2_l = pstr_lp_filt_coeff->x_p[chan_idx*2+1];
- FLOAT32 st3_l = pstr_lp_filt_coeff->y_p[chan_idx*2+0];
- FLOAT32 st4_l = pstr_lp_filt_coeff->y_p[chan_idx*2+1];
-
- FLOAT32 a1_h = pstr_hp_filt_coeff->a1;
- FLOAT32 a2_h = pstr_hp_filt_coeff->a2;
- FLOAT32 b0_h = pstr_hp_filt_coeff->b0;
- FLOAT32 b1_h = pstr_hp_filt_coeff->b1;
- FLOAT32 b2_h = pstr_hp_filt_coeff->b2;
-
- FLOAT32 st1_h = pstr_hp_filt_coeff->x_p[chan_idx*2+0];
- FLOAT32 st2_h = pstr_hp_filt_coeff->x_p[chan_idx*2+1];
- FLOAT32 st3_h = pstr_hp_filt_coeff->y_p[chan_idx*2+0];
- FLOAT32 st4_h = pstr_hp_filt_coeff->y_p[chan_idx*2+1];
-
- FLOAT32* output_low = output[0];
- FLOAT32* output_high = output[1];
-
- for (i=0; i<frame_len; i++)
- {
- tmp1 = input[i];
- tmp = b0_l * tmp1 + st1_l;
- st1_l = b1_l * tmp1 - a1_l * tmp + st2_l;
- st2_l = b2_l * tmp1 - a2_l * tmp;
-
- output_low[i] = b0_l * tmp + st3_l;
- st3_l = b1_l * tmp - a1_l * output_low[i] + st4_l;
- st4_l = b2_l * tmp - a2_l * output_low[i];
-
- tmp = b0_h * tmp1 + st1_h;
- st1_h = b1_h * tmp1 - a1_h * tmp + st2_h;
- st2_h = b2_h * tmp1 - a2_h * tmp;
-
- output_high[i] = b0_h * tmp + st3_h;
- st3_h = b1_h * tmp - a1_h * output_high[i] + st4_h;
- st4_h = b2_h * tmp - a2_h * output_high[i];
- }
- pstr_lp_filt_coeff->x_p[chan_idx*2+0] = st1_l;
- pstr_lp_filt_coeff->x_p[chan_idx*2+1] = st2_l;
- pstr_lp_filt_coeff->y_p[chan_idx*2+0] = st3_l;
- pstr_lp_filt_coeff->y_p[chan_idx*2+1] = st4_l;
-
- pstr_hp_filt_coeff->x_p[chan_idx*2+0] = st1_h;
- pstr_hp_filt_coeff->x_p[chan_idx*2+1] = st2_h;
- pstr_hp_filt_coeff->y_p[chan_idx*2+0] = st3_h;
- pstr_hp_filt_coeff->y_p[chan_idx*2+1] = st4_h;
-
- return;
+ ia_iir_filter_struct* pstr_hp_filt_coeff,
+ WORD32 chan_idx, WORD32 frame_len,
+ FLOAT32* input, FLOAT32* output[]) {
+ WORD32 i;
+ FLOAT32 tmp, tmp1;
+ FLOAT32 a1_l = pstr_lp_filt_coeff->a1;
+ FLOAT32 a2_l = pstr_lp_filt_coeff->a2;
+ FLOAT32 b0_l = pstr_lp_filt_coeff->b0;
+ FLOAT32 b1_l = pstr_lp_filt_coeff->b1;
+ FLOAT32 b2_l = pstr_lp_filt_coeff->b2;
+
+ FLOAT32 st1_l = pstr_lp_filt_coeff->x_p[chan_idx * 2 + 0];
+ FLOAT32 st2_l = pstr_lp_filt_coeff->x_p[chan_idx * 2 + 1];
+ FLOAT32 st3_l = pstr_lp_filt_coeff->y_p[chan_idx * 2 + 0];
+ FLOAT32 st4_l = pstr_lp_filt_coeff->y_p[chan_idx * 2 + 1];
+
+ FLOAT32 a1_h = pstr_hp_filt_coeff->a1;
+ FLOAT32 a2_h = pstr_hp_filt_coeff->a2;
+ FLOAT32 b0_h = pstr_hp_filt_coeff->b0;
+ FLOAT32 b1_h = pstr_hp_filt_coeff->b1;
+ FLOAT32 b2_h = pstr_hp_filt_coeff->b2;
+
+ FLOAT32 st1_h = pstr_hp_filt_coeff->x_p[chan_idx * 2 + 0];
+ FLOAT32 st2_h = pstr_hp_filt_coeff->x_p[chan_idx * 2 + 1];
+ FLOAT32 st3_h = pstr_hp_filt_coeff->y_p[chan_idx * 2 + 0];
+ FLOAT32 st4_h = pstr_hp_filt_coeff->y_p[chan_idx * 2 + 1];
+
+ FLOAT32* output_low = output[0];
+ FLOAT32* output_high = output[1];
+
+ for (i = 0; i < frame_len; i++) {
+ tmp1 = input[i];
+ tmp = b0_l * tmp1 + st1_l;
+ st1_l = b1_l * tmp1 - a1_l * tmp + st2_l;
+ st2_l = b2_l * tmp1 - a2_l * tmp;
+
+ output_low[i] = b0_l * tmp + st3_l;
+ st3_l = b1_l * tmp - a1_l * output_low[i] + st4_l;
+ st4_l = b2_l * tmp - a2_l * output_low[i];
+
+ tmp = b0_h * tmp1 + st1_h;
+ st1_h = b1_h * tmp1 - a1_h * tmp + st2_h;
+ st2_h = b2_h * tmp1 - a2_h * tmp;
+
+ output_high[i] = b0_h * tmp + st3_h;
+ st3_h = b1_h * tmp - a1_h * output_high[i] + st4_h;
+ st4_h = b2_h * tmp - a2_h * output_high[i];
+ }
+ pstr_lp_filt_coeff->x_p[chan_idx * 2 + 0] = st1_l;
+ pstr_lp_filt_coeff->x_p[chan_idx * 2 + 1] = st2_l;
+ pstr_lp_filt_coeff->y_p[chan_idx * 2 + 0] = st3_l;
+ pstr_lp_filt_coeff->y_p[chan_idx * 2 + 1] = st4_l;
+
+ pstr_hp_filt_coeff->x_p[chan_idx * 2 + 0] = st1_h;
+ pstr_hp_filt_coeff->x_p[chan_idx * 2 + 1] = st2_h;
+ pstr_hp_filt_coeff->y_p[chan_idx * 2 + 0] = st3_h;
+ pstr_hp_filt_coeff->y_p[chan_idx * 2 + 1] = st4_h;
+
+ return;
}
VOID impd_two_band_filter_process(ia_two_band_filt_struct* str_two_band_bank,
- WORD32 chan_idx,
- WORD32 frame_len,
- FLOAT32* input,
- FLOAT32* output[])
-{
- ia_iir_filter_struct* pstr_lp_filt_coeff=&str_two_band_bank->low_pass;
- ia_iir_filter_struct* pstr_hp_filt_coeff=&str_two_band_bank->high_pass;
-
- impd_apply_low_high_filter(pstr_lp_filt_coeff,
- pstr_hp_filt_coeff,
- chan_idx,
- frame_len,
- input,
- output);
- return;
+ WORD32 chan_idx, WORD32 frame_len,
+ FLOAT32* input, FLOAT32* output[]) {
+ ia_iir_filter_struct* pstr_lp_filt_coeff = &str_two_band_bank->low_pass;
+ ia_iir_filter_struct* pstr_hp_filt_coeff = &str_two_band_bank->high_pass;
+
+ impd_apply_low_high_filter(pstr_lp_filt_coeff, pstr_hp_filt_coeff, chan_idx,
+ frame_len, input, output);
+ return;
}
+VOID impd_three_band_filter_process(
+ ia_three_band_filt_struct* str_three_band_bank, WORD32 c, WORD32 size,
+ FLOAT32* input, FLOAT32* output[]) {
+ // WORD32 err_code=0;
+ ia_iir_filter_struct* all_pass_filter;
+ ia_iir_filter_struct* pstr_lp_filt_coeff =
+ &str_three_band_bank->str_low_pass_stage_1;
+ ia_iir_filter_struct* pstr_hp_filt_coeff =
+ &str_three_band_bank->str_high_pass_stage_1;
+ FLOAT32* output1[2];
+ output1[0] = output[0];
+ output1[1] = output[1];
+
+ impd_apply_low_high_filter(pstr_lp_filt_coeff, pstr_hp_filt_coeff, c, size,
+ input, output1);
+
+ all_pass_filter = &str_three_band_bank->str_all_pass_stage_2;
+
+ impd_iir_second_order_filter_all_pass(all_pass_filter, c, size, output1[1],
+ output[2]);
+ pstr_lp_filt_coeff = &str_three_band_bank->str_low_pass_stage_2;
+ pstr_hp_filt_coeff = &str_three_band_bank->str_high_pass_stage_2;
+
+ impd_apply_low_high_filter(pstr_lp_filt_coeff, pstr_hp_filt_coeff, c, size,
+ output1[0], output1);
+
+ return;
+}
+VOID impd_four_band_filter_process(ia_four_band_filt_struct* str_four_band_bank,
+ WORD32 cha_idx, WORD32 win_size,
+ FLOAT32* input, FLOAT32* output[]) {
+ // WORD32 err_code=0;
+ ia_iir_filter_struct* all_pass_filter;
+ ia_iir_filter_struct* pstr_lp_filt_coeff =
+ &str_four_band_bank->str_low_pass_stage_1;
+ ia_iir_filter_struct* pstr_hp_filt_coeff =
+ &str_four_band_bank->str_high_pass_stage_1;
+ FLOAT32* output1[2];
+ FLOAT32* output2[2];
+ output1[0] = output[0];
+ output1[1] = output[1];
+ output2[0] = output[2];
+ output2[1] = output[3];
-VOID impd_three_band_filter_process(ia_three_band_filt_struct* str_three_band_bank,
- WORD32 c,
- WORD32 size,
- FLOAT32* input,
- FLOAT32* output[])
-{
-// WORD32 err_code=0;
- ia_iir_filter_struct* all_pass_filter;
- ia_iir_filter_struct* pstr_lp_filt_coeff=&str_three_band_bank->str_low_pass_stage_1;
- ia_iir_filter_struct* pstr_hp_filt_coeff=&str_three_band_bank->str_high_pass_stage_1;
- FLOAT32* output1[2];
- output1[0]=output[0];
- output1[1]=output[1];
-
- impd_apply_low_high_filter(pstr_lp_filt_coeff,
- pstr_hp_filt_coeff,
- c,
- size,
- input,
- output1);
-
- all_pass_filter =&str_three_band_bank->str_all_pass_stage_2;
-
- impd_iir_second_order_filter_all_pass(all_pass_filter,
- c,
- size,
- output1[1],
- output[2]);
- pstr_lp_filt_coeff=&str_three_band_bank->str_low_pass_stage_2;
- pstr_hp_filt_coeff=&str_three_band_bank->str_high_pass_stage_2;
-
-
- impd_apply_low_high_filter(pstr_lp_filt_coeff,
- pstr_hp_filt_coeff,
- c,
- size,
- output1[0],
- output1);
-
- return;
+ impd_apply_low_high_filter(pstr_lp_filt_coeff, pstr_hp_filt_coeff, cha_idx,
+ win_size, input, output1);
-}
+ all_pass_filter = &str_four_band_bank->str_all_pass_stage_2_low;
+ impd_iir_second_order_filter_all_pass(all_pass_filter, cha_idx, win_size,
+ output1[0], output1[0]);
-VOID impd_four_band_filter_process(ia_four_band_filt_struct* str_four_band_bank,
- WORD32 cha_idx,
- WORD32 win_size,
- FLOAT32* input,
- FLOAT32* output[])
-{
-// WORD32 err_code=0;
- ia_iir_filter_struct* all_pass_filter;
- ia_iir_filter_struct* pstr_lp_filt_coeff=&str_four_band_bank->str_low_pass_stage_1;
- ia_iir_filter_struct* pstr_hp_filt_coeff=&str_four_band_bank->str_high_pass_stage_1;
- FLOAT32* output1[2];
- FLOAT32* output2[2];
- output1[0]=output[0];
- output1[1]=output[1];
- output2[0]=output[2];
- output2[1]=output[3];
-
- impd_apply_low_high_filter(pstr_lp_filt_coeff,
- pstr_hp_filt_coeff,
- cha_idx,
- win_size,
- input,
- output1);
-
- all_pass_filter =&str_four_band_bank->str_all_pass_stage_2_low;
-
- impd_iir_second_order_filter_all_pass(all_pass_filter,
- cha_idx,
- win_size,
- output1[0],
- output1[0]);
-
-
- all_pass_filter =&str_four_band_bank->str_all_pass_stage_2_high;
-
- impd_iir_second_order_filter_all_pass(all_pass_filter,
- cha_idx,
- win_size,
- output1[1],
- output2[0]);
-
- pstr_lp_filt_coeff = &str_four_band_bank->str_low_pass_stage_3_low;
- pstr_hp_filt_coeff = &str_four_band_bank->str_high_pass_stage_3_low;
-
-
- impd_apply_low_high_filter(pstr_lp_filt_coeff,
- pstr_hp_filt_coeff,
- cha_idx,
- win_size,
- output1[0],
- output1);
-
- pstr_lp_filt_coeff = &str_four_band_bank->str_low_pass_stage_3_high;
- pstr_hp_filt_coeff = &str_four_band_bank->str_high_pass_stage_3_high;
-
- impd_apply_low_high_filter(pstr_lp_filt_coeff,
- pstr_hp_filt_coeff,
- cha_idx,
- win_size,
- output2[0],
- output2);
-
- return;
+ all_pass_filter = &str_four_band_bank->str_all_pass_stage_2_high;
+
+ impd_iir_second_order_filter_all_pass(all_pass_filter, cha_idx, win_size,
+ output1[1], output2[0]);
+
+ pstr_lp_filt_coeff = &str_four_band_bank->str_low_pass_stage_3_low;
+ pstr_hp_filt_coeff = &str_four_band_bank->str_high_pass_stage_3_low;
+
+ impd_apply_low_high_filter(pstr_lp_filt_coeff, pstr_hp_filt_coeff, cha_idx,
+ win_size, output1[0], output1);
+
+ pstr_lp_filt_coeff = &str_four_band_bank->str_low_pass_stage_3_high;
+ pstr_hp_filt_coeff = &str_four_band_bank->str_high_pass_stage_3_high;
+
+ impd_apply_low_high_filter(pstr_lp_filt_coeff, pstr_hp_filt_coeff, cha_idx,
+ win_size, output2[0], output2);
+
+ return;
}
-VOID impd_all_pass_cascade_process(ia_all_pass_cascade_struct *str_all_pass_cascade,
- WORD32 ch_idx,
- WORD32 win_size,
- FLOAT32* input)
-{
- WORD32 i;
-
- for (i=0; i<str_all_pass_cascade->num_filter; i++)
- {
- impd_iir_second_order_filter_all_pass (&(str_all_pass_cascade->str_all_pass_cascade_filter[i].str_all_pass_stage),
- ch_idx,
- win_size,
- input,
- input);
- }
+VOID impd_all_pass_cascade_process(
+ ia_all_pass_cascade_struct* str_all_pass_cascade, WORD32 ch_idx,
+ WORD32 win_size, FLOAT32* input) {
+ WORD32 i;
+
+ for (i = 0; i < str_all_pass_cascade->num_filter; i++) {
+ impd_iir_second_order_filter_all_pass(
+ &(str_all_pass_cascade->str_all_pass_cascade_filter[i]
+ .str_all_pass_stage),
+ ch_idx, win_size, input, input);
+ }
- return;
+ return;
} \ No newline at end of file
diff --git a/decoder/drc_src/impd_drc_filter_bank.h b/decoder/drc_src/impd_drc_filter_bank.h
index d0bf66b..331f0b8 100644
--- a/decoder/drc_src/impd_drc_filter_bank.h
+++ b/decoder/drc_src/impd_drc_filter_bank.h
@@ -21,145 +21,130 @@
#define IMPD_DRC_FILTER_BANK_H
#define FILTER_BANK_PARAMETER_COUNT 16
-#define CASCADE_ALLPASS_COUNT_MAX 9
-#define QMF_NUM_FILT_BANDS 64
-#define QMF_FILT_RESOLUTION 64
+#define CASCADE_ALLPASS_COUNT_MAX 9
+#define QMF_NUM_FILT_BANDS 64
+#define QMF_FILT_RESOLUTION 64
+typedef struct ia_drc_qmf_filt_struct {
+ FLOAT64* ana_buff;
+ FLOAT64* syn_buff;
+ FLOAT64 ana_tab_real[QMF_NUM_FILT_BANDS][2 * QMF_NUM_FILT_BANDS];
+ FLOAT64 ana_tab_imag[QMF_NUM_FILT_BANDS][2 * QMF_NUM_FILT_BANDS];
+ FLOAT64 syn_tab_real[2 * QMF_NUM_FILT_BANDS][QMF_NUM_FILT_BANDS];
+ FLOAT64 syn_tab_imag[2 * QMF_NUM_FILT_BANDS][QMF_NUM_FILT_BANDS];
-typedef struct ia_drc_qmf_filt_struct
-{
-
-FLOAT64* ana_buff;
-FLOAT64* syn_buff;
-FLOAT64 ana_tab_real[QMF_NUM_FILT_BANDS][2*QMF_NUM_FILT_BANDS];
-FLOAT64 ana_tab_imag[QMF_NUM_FILT_BANDS][2*QMF_NUM_FILT_BANDS];
-FLOAT64 syn_tab_real[2*QMF_NUM_FILT_BANDS][QMF_NUM_FILT_BANDS];
-FLOAT64 syn_tab_imag[2*QMF_NUM_FILT_BANDS][QMF_NUM_FILT_BANDS];
-
-}ia_drc_qmf_filt_struct;
+} ia_drc_qmf_filt_struct;
typedef struct {
- FLOAT32 f_cross_norm;
- FLOAT32 gamma;
- FLOAT32 delta;
+ FLOAT32 f_cross_norm;
+ FLOAT32 gamma;
+ FLOAT32 delta;
} ia_filter_bank_params_struct;
-
typedef struct {
- FLOAT32 s00;
- FLOAT32 s01;
- FLOAT32 s10;
- FLOAT32 s11;
+ FLOAT32 s00;
+ FLOAT32 s01;
+ FLOAT32 s10;
+ FLOAT32 s11;
} ia_lr_filter_state_struct;
-
typedef struct {
- FLOAT32 s0;
- FLOAT32 s1;
+ FLOAT32 s0;
+ FLOAT32 s1;
} ia_all_pass_filter_state_struct;
typedef struct {
- FLOAT32 a0;
- FLOAT32 a1;
- FLOAT32 a2;
- FLOAT32 b0;
- FLOAT32 b1;
- FLOAT32 b2;
- FLOAT32 x_p[MAX_CHANNEL_COUNT*2];
- FLOAT32 y_p[MAX_CHANNEL_COUNT*2];
+ FLOAT32 a0;
+ FLOAT32 a1;
+ FLOAT32 a2;
+ FLOAT32 b0;
+ FLOAT32 b1;
+ FLOAT32 b2;
+ FLOAT32 x_p[MAX_CHANNEL_COUNT * 2];
+ FLOAT32 y_p[MAX_CHANNEL_COUNT * 2];
} ia_iir_filter_struct;
typedef struct {
- ia_iir_filter_struct low_pass;
- ia_iir_filter_struct high_pass;
+ ia_iir_filter_struct low_pass;
+ ia_iir_filter_struct high_pass;
} ia_two_band_filt_struct;
typedef struct {
- ia_iir_filter_struct str_low_pass_stage_1;
- ia_iir_filter_struct str_high_pass_stage_1;
- ia_iir_filter_struct str_low_pass_stage_2;
- ia_iir_filter_struct str_high_pass_stage_2;
- ia_iir_filter_struct str_all_pass_stage_2;
+ ia_iir_filter_struct str_low_pass_stage_1;
+ ia_iir_filter_struct str_high_pass_stage_1;
+ ia_iir_filter_struct str_low_pass_stage_2;
+ ia_iir_filter_struct str_high_pass_stage_2;
+ ia_iir_filter_struct str_all_pass_stage_2;
} ia_three_band_filt_struct;
typedef struct {
- ia_iir_filter_struct str_low_pass_stage_1;
- ia_iir_filter_struct str_high_pass_stage_1;
- ia_iir_filter_struct str_all_pass_stage_2_high;
- ia_iir_filter_struct str_all_pass_stage_2_low;
- ia_iir_filter_struct str_low_pass_stage_3_high;
- ia_iir_filter_struct str_high_pass_stage_3_high;
- ia_iir_filter_struct str_low_pass_stage_3_low;
- ia_iir_filter_struct str_high_pass_stage_3_low;
+ ia_iir_filter_struct str_low_pass_stage_1;
+ ia_iir_filter_struct str_high_pass_stage_1;
+ ia_iir_filter_struct str_all_pass_stage_2_high;
+ ia_iir_filter_struct str_all_pass_stage_2_low;
+ ia_iir_filter_struct str_low_pass_stage_3_high;
+ ia_iir_filter_struct str_high_pass_stage_3_high;
+ ia_iir_filter_struct str_low_pass_stage_3_low;
+ ia_iir_filter_struct str_high_pass_stage_3_low;
} ia_four_band_filt_struct;
typedef struct {
- ia_iir_filter_struct str_all_pass_stage;
-} ia_all_pass_filter_sturct;
+ ia_iir_filter_struct str_all_pass_stage;
+} ia_all_pass_filter_sturct;
typedef struct {
- ia_all_pass_filter_sturct str_all_pass_cascade_filter[CASCADE_ALLPASS_COUNT_MAX];
- WORD32 num_filter;
-} ia_all_pass_cascade_struct;
+ ia_all_pass_filter_sturct
+ str_all_pass_cascade_filter[CASCADE_ALLPASS_COUNT_MAX];
+ WORD32 num_filter;
+} ia_all_pass_cascade_struct;
typedef struct {
- WORD32 num_bands;
- WORD32 complexity;
- ia_two_band_filt_struct str_two_band_bank;
- ia_three_band_filt_struct str_three_band_bank;
- ia_four_band_filt_struct str_four_band_bank;
- ia_all_pass_cascade_struct str_all_pass_cascade;
+ WORD32 num_bands;
+ WORD32 complexity;
+ ia_two_band_filt_struct str_two_band_bank;
+ ia_three_band_filt_struct str_three_band_bank;
+ ia_four_band_filt_struct str_four_band_bank;
+ ia_all_pass_cascade_struct str_all_pass_cascade;
} ia_drc_filter_bank_struct;
typedef struct {
- WORD32 nfilter_banks;
- WORD32 num_ph_align_ch_groups;
- WORD32 complexity;
- ia_drc_filter_bank_struct str_drc_filter_bank[8];
+ WORD32 nfilter_banks;
+ WORD32 num_ph_align_ch_groups;
+ WORD32 complexity;
+ ia_drc_filter_bank_struct str_drc_filter_bank[8];
} ia_filter_banks_struct;
-
WORD32
-impd_init_all_filter_banks( ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc,
- ia_drc_instructions_struct* str_drc_instruction_str,
- ia_filter_banks_struct* ia_filter_banks_struct);
+impd_init_all_filter_banks(
+ ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc,
+ ia_drc_instructions_struct* str_drc_instruction_str,
+ ia_filter_banks_struct* ia_filter_banks_struct);
VOID impd_two_band_filter_process(ia_two_band_filt_struct* str_two_band_bank,
- WORD32 c,
- WORD32 size,
- FLOAT32* audio_in,
- FLOAT32* audio_out[]);
+ WORD32 c, WORD32 size, FLOAT32* audio_in,
+ FLOAT32* audio_out[]);
-VOID impd_three_band_filter_process(ia_three_band_filt_struct* str_three_band_bank,
- WORD32 c,
- WORD32 size,
- FLOAT32* audio_in,
- FLOAT32* audio_out[]);
+VOID impd_three_band_filter_process(
+ ia_three_band_filt_struct* str_three_band_bank, WORD32 c, WORD32 size,
+ FLOAT32* audio_in, FLOAT32* audio_out[]);
VOID impd_four_band_filter_process(ia_four_band_filt_struct* str_four_band_bank,
- WORD32 c,
- WORD32 size,
- FLOAT32* audio_in,
- FLOAT32* audio_out[]);
+ WORD32 c, WORD32 size, FLOAT32* audio_in,
+ FLOAT32* audio_out[]);
-VOID impd_all_pass_cascade_process(ia_all_pass_cascade_struct *str_all_pass_cascade,
- WORD32 c,
- WORD32 size,
- FLOAT32* audio_in);
+VOID impd_all_pass_cascade_process(
+ ia_all_pass_cascade_struct* str_all_pass_cascade, WORD32 c, WORD32 size,
+ FLOAT32* audio_in);
WORD32
-impd_shape_filt_block_init(ia_shape_filter_block_params_struct* pstr_shape_filter_block_params,
- shape_filter_block* shape_filter_block);
+impd_shape_filt_block_init(
+ ia_shape_filter_block_params_struct* pstr_shape_filter_block_params,
+ shape_filter_block* shape_filter_block);
WORD32
impd_shape_filt_block_adapt(const FLOAT32 drc_gain,
- shape_filter_block* shape_filter_block);
-
-
+ shape_filter_block* shape_filter_block);
-WORD32 impd_shape_filt_block_time_process(shape_filter_block* shape_filter_block,
- FLOAT32* drc_gain,
- const WORD32 channel,
- FLOAT32 *audio_in,
- WORD32 start,
- WORD32 end);
+WORD32 impd_shape_filt_block_time_process(
+ shape_filter_block* shape_filter_block, FLOAT32* drc_gain,
+ const WORD32 channel, FLOAT32* audio_in, WORD32 start, WORD32 end);
#endif
diff --git a/decoder/drc_src/impd_drc_gain_dec.c b/decoder/drc_src/impd_drc_gain_dec.c
index c8c5545..accce93 100644
--- a/decoder/drc_src/impd_drc_gain_dec.c
+++ b/decoder/drc_src/impd_drc_gain_dec.c
@@ -34,724 +34,747 @@
#include "impd_drc_eq.h"
#include "impd_drc_gain_decoder.h"
-extern ia_cicp_sigmoid_characteristic_param_struct pstr_cicp_sigmoid_characteristic_param[];
-
-WORD32 impd_gain_db_to_lin (ia_interp_params_struct* interp_params_str,
- WORD32 drc_band,
- FLOAT32 in_param_db_gain,
- FLOAT32 in_param_db_slope,
- FLOAT32* out_param_lin_gain,
- FLOAT32* out_param_lin_slope)
-{
-
- FLOAT32 loc_db_gain = in_param_db_gain;
- FLOAT32 gain_ratio = 1.0;
-
- ia_gain_modifiers_struct* pstr_gain_modifiers = interp_params_str->pstr_gain_modifiers;
- if (interp_params_str->gain_modification_flag) {
-
- if ((interp_params_str->characteristic_index > 0) && (loc_db_gain != 0.0f)){
-
- gain_ratio = 1.0f;
- }
-
+extern ia_cicp_sigmoid_characteristic_param_struct
+ pstr_cicp_sigmoid_characteristic_param[];
+
+WORD32 impd_gain_db_to_lin(ia_interp_params_struct* interp_params_str,
+ WORD32 drc_band, FLOAT32 in_param_db_gain,
+ FLOAT32 in_param_db_slope,
+ FLOAT32* out_param_lin_gain,
+ FLOAT32* out_param_lin_slope) {
+ FLOAT32 loc_db_gain = in_param_db_gain;
+ FLOAT32 gain_ratio = 1.0;
+
+ ia_gain_modifiers_struct* pstr_gain_modifiers =
+ interp_params_str->pstr_gain_modifiers;
+ if (interp_params_str->gain_modification_flag) {
+ if ((interp_params_str->characteristic_index > 0) &&
+ (loc_db_gain != 0.0f)) {
+ gain_ratio = 1.0f;
+ }
- if (loc_db_gain < 0.0f) {
- gain_ratio *= interp_params_str->compress;
- }
- else {
- gain_ratio *= interp_params_str->boost;
- }
+ if (loc_db_gain < 0.0f) {
+ gain_ratio *= interp_params_str->compress;
+ } else {
+ gain_ratio *= interp_params_str->boost;
}
- if (pstr_gain_modifiers->gain_scaling_flag[drc_band] == 1) {
- if (loc_db_gain < 0.0) {
- gain_ratio *= pstr_gain_modifiers->attn_scaling[drc_band];
- }
- else {
- gain_ratio *= pstr_gain_modifiers->ampl_scaling[drc_band];
- }
+ }
+ if (pstr_gain_modifiers->gain_scaling_flag[drc_band] == 1) {
+ if (loc_db_gain < 0.0) {
+ gain_ratio *= pstr_gain_modifiers->attn_scaling[drc_band];
+ } else {
+ gain_ratio *= pstr_gain_modifiers->ampl_scaling[drc_band];
}
- if ((interp_params_str->pstr_ducking_modifiers->ducking_scaling_flag == 1) && (interp_params_str->ducking_flag == 1)) {
- gain_ratio *= interp_params_str->pstr_ducking_modifiers->ducking_scaling;
+ }
+ if ((interp_params_str->pstr_ducking_modifiers->ducking_scaling_flag == 1) &&
+ (interp_params_str->ducking_flag == 1)) {
+ gain_ratio *= interp_params_str->pstr_ducking_modifiers->ducking_scaling;
+ }
+
+ {
+ *out_param_lin_gain =
+ (FLOAT32)pow(2.0, (FLOAT64)(gain_ratio * loc_db_gain / 6.0f));
+ *out_param_lin_slope = SLOPE_FACTOR_DB_TO_LINEAR * gain_ratio *
+ *out_param_lin_gain * in_param_db_slope;
+
+ if (pstr_gain_modifiers->gain_offset_flag[drc_band] == 1) {
+ *out_param_lin_gain *= (FLOAT32)pow(
+ 2.0, (FLOAT64)(pstr_gain_modifiers->gain_offset[drc_band] / 6.0f));
}
-
- {
- *out_param_lin_gain = (FLOAT32)pow(2.0, (FLOAT64)(gain_ratio * loc_db_gain / 6.0f));
- *out_param_lin_slope = SLOPE_FACTOR_DB_TO_LINEAR * gain_ratio * *out_param_lin_gain * in_param_db_slope;
-
- if (pstr_gain_modifiers->gain_offset_flag[drc_band] == 1) {
- *out_param_lin_gain *= (FLOAT32)pow(2.0, (FLOAT64)(pstr_gain_modifiers->gain_offset[drc_band]/6.0f));
- }
- if ((interp_params_str->limiter_peak_target_present == 1) && (interp_params_str->clipping_flag == 1)) {
- *out_param_lin_gain *= (FLOAT32)pow(2.0, max(0.0, -interp_params_str->limiter_peak_target - interp_params_str->loudness_normalization_gain_db)/6.0);
- if (*out_param_lin_gain >= 1.0) {
- *out_param_lin_gain = 1.0;
- *out_param_lin_slope = 0.0;
- }
- }
+ if ((interp_params_str->limiter_peak_target_present == 1) &&
+ (interp_params_str->clipping_flag == 1)) {
+ *out_param_lin_gain *= (FLOAT32)pow(
+ 2.0, max(0.0, -interp_params_str->limiter_peak_target -
+ interp_params_str->loudness_normalization_gain_db) /
+ 6.0);
+ if (*out_param_lin_gain >= 1.0) {
+ *out_param_lin_gain = 1.0;
+ *out_param_lin_slope = 0.0;
+ }
}
- return (0);
+ }
+ return (0);
}
-
-
-
-
-
-
WORD32
-impd_compressor_io_sigmoid(ia_split_drc_characteristic_struct* split_drc_characteristic,
- FLOAT32 in_db_level,
- FLOAT32* out_db_gain)
-{
- FLOAT32 tmp;
- FLOAT32 in_out_ratio = split_drc_characteristic->in_out_ratio;
- FLOAT32 gainDbLimit = split_drc_characteristic->gain;
- FLOAT32 exp = split_drc_characteristic->exp;
-
- tmp = (DRC_INPUT_LOUDNESS_TARGET - in_db_level) * in_out_ratio;
- if (exp < 1000.0f) {
- FLOAT32 x = tmp/gainDbLimit;
- if (x < 0.0f)
- {
- return(UNEXPECTED_ERROR);
- }
- *out_db_gain = (FLOAT32)(tmp / pow(1.0f + pow(x, exp), 1.0f/exp));
- } else {
- *out_db_gain = tmp;
- }
- if (split_drc_characteristic->flip_sign == 1) {
- *out_db_gain = - *out_db_gain;
+impd_compressor_io_sigmoid(
+ ia_split_drc_characteristic_struct* split_drc_characteristic,
+ FLOAT32 in_db_level, FLOAT32* out_db_gain) {
+ FLOAT32 tmp;
+ FLOAT32 in_out_ratio = split_drc_characteristic->in_out_ratio;
+ FLOAT32 gainDbLimit = split_drc_characteristic->gain;
+ FLOAT32 exp = split_drc_characteristic->exp;
+
+ tmp = (DRC_INPUT_LOUDNESS_TARGET - in_db_level) * in_out_ratio;
+ if (exp < 1000.0f) {
+ FLOAT32 x = tmp / gainDbLimit;
+ if (x < 0.0f) {
+ return (UNEXPECTED_ERROR);
}
- return (0);
+ *out_db_gain = (FLOAT32)(tmp / pow(1.0f + pow(x, exp), 1.0f / exp));
+ } else {
+ *out_db_gain = tmp;
+ }
+ if (split_drc_characteristic->flip_sign == 1) {
+ *out_db_gain = -*out_db_gain;
+ }
+ return (0);
}
WORD32
-impd_compressor_io_sigmoid_inv(ia_split_drc_characteristic_struct* split_drc_characteristic,
- FLOAT32 loc_db_gain,
- FLOAT32* in_level)
-{
- FLOAT32 in_out_ratio = split_drc_characteristic->in_out_ratio;
- FLOAT32 gainDbLimit = split_drc_characteristic->gain;
- FLOAT32 exp = split_drc_characteristic->exp;
- FLOAT32 tmp = loc_db_gain;
-
- if (split_drc_characteristic->flip_sign == 1) {
- tmp = - loc_db_gain;
+impd_compressor_io_sigmoid_inv(
+ ia_split_drc_characteristic_struct* split_drc_characteristic,
+ FLOAT32 loc_db_gain, FLOAT32* in_level) {
+ FLOAT32 in_out_ratio = split_drc_characteristic->in_out_ratio;
+ FLOAT32 gainDbLimit = split_drc_characteristic->gain;
+ FLOAT32 exp = split_drc_characteristic->exp;
+ FLOAT32 tmp = loc_db_gain;
+
+ if (split_drc_characteristic->flip_sign == 1) {
+ tmp = -loc_db_gain;
+ }
+ if (exp < 1000.0f) {
+ FLOAT32 x = tmp / gainDbLimit;
+ if (x < 0.0f) {
+ return (UNEXPECTED_ERROR);
}
- if (exp < 1000.0f) {
- FLOAT32 x = tmp/gainDbLimit;
- if (x < 0.0f)
- {
- return(UNEXPECTED_ERROR);
- }
- tmp = (FLOAT32)(tmp / pow(1.0f - pow(x, exp), 1.0f / exp));
- }
- *in_level = DRC_INPUT_LOUDNESS_TARGET - tmp / in_out_ratio;
+ tmp = (FLOAT32)(tmp / pow(1.0f - pow(x, exp), 1.0f / exp));
+ }
+ *in_level = DRC_INPUT_LOUDNESS_TARGET - tmp / in_out_ratio;
- return(0);
+ return (0);
}
WORD32
-impd_compressor_io_nodes_lt(ia_split_drc_characteristic_struct* split_drc_characteristic,
- FLOAT32 in_db_level,
- FLOAT32 *out_db_gain)
-{
- WORD32 n;
- FLOAT32 w;
- FLOAT32* node_level = split_drc_characteristic->node_level;
- FLOAT32* node_gain = split_drc_characteristic->node_gain;
-
- if (in_db_level > DRC_INPUT_LOUDNESS_TARGET)
- {
- return (UNEXPECTED_ERROR);
- }
- for (n=1; n<=split_drc_characteristic->characteristic_node_count; n++) {
- if ((in_db_level <= node_level[n-1]) && (in_db_level > node_level[n])) {
- w = (node_level[n]- in_db_level)/(node_level[n]-node_level[n-1]);
- *out_db_gain =(FLOAT32) (w * node_gain[n-1] + (1.0-w) * node_gain[n]);
- }
+impd_compressor_io_nodes_lt(
+ ia_split_drc_characteristic_struct* split_drc_characteristic,
+ FLOAT32 in_db_level, FLOAT32* out_db_gain) {
+ WORD32 n;
+ FLOAT32 w;
+ FLOAT32* node_level = split_drc_characteristic->node_level;
+ FLOAT32* node_gain = split_drc_characteristic->node_gain;
+
+ if (in_db_level > DRC_INPUT_LOUDNESS_TARGET) {
+ return (UNEXPECTED_ERROR);
+ }
+ for (n = 1; n <= split_drc_characteristic->characteristic_node_count; n++) {
+ if ((in_db_level <= node_level[n - 1]) && (in_db_level > node_level[n])) {
+ w = (node_level[n] - in_db_level) / (node_level[n] - node_level[n - 1]);
+ *out_db_gain = (FLOAT32)(w * node_gain[n - 1] + (1.0 - w) * node_gain[n]);
}
- *out_db_gain = node_gain[split_drc_characteristic->characteristic_node_count];
- return (0);
+ }
+ *out_db_gain = node_gain[split_drc_characteristic->characteristic_node_count];
+ return (0);
}
WORD32
-impd_compressor_io_nodes_rt(ia_split_drc_characteristic_struct* split_drc_characteristic,
- FLOAT32 in_db_level,
- FLOAT32 *out_db_gain)
-{
- WORD32 n;
- FLOAT32 w;
- FLOAT32* node_level = split_drc_characteristic->node_level;
- FLOAT32* node_gain = split_drc_characteristic->node_gain;
-
- if (in_db_level < DRC_INPUT_LOUDNESS_TARGET)
- {
- return (UNEXPECTED_ERROR);
+impd_compressor_io_nodes_rt(
+ ia_split_drc_characteristic_struct* split_drc_characteristic,
+ FLOAT32 in_db_level, FLOAT32* out_db_gain) {
+ WORD32 n;
+ FLOAT32 w;
+ FLOAT32* node_level = split_drc_characteristic->node_level;
+ FLOAT32* node_gain = split_drc_characteristic->node_gain;
+
+ if (in_db_level < DRC_INPUT_LOUDNESS_TARGET) {
+ return (UNEXPECTED_ERROR);
+ }
+ for (n = 1; n <= split_drc_characteristic->characteristic_node_count; n++) {
+ if ((in_db_level >= node_level[n - 1]) && (in_db_level < node_level[n])) {
+ w = (FLOAT32)(node_level[n] - in_db_level) /
+ (node_level[n] - node_level[n - 1]);
+ *out_db_gain = (FLOAT32)(w * node_gain[n - 1] + (1.0 - w) * node_gain[n]);
}
- for (n=1; n<=split_drc_characteristic->characteristic_node_count; n++) {
- if ((in_db_level >= node_level[n-1]) && (in_db_level < node_level[n])) {
- w =(FLOAT32) (node_level[n]- in_db_level)/(node_level[n]-node_level[n-1]);
- *out_db_gain = (FLOAT32)(w * node_gain[n-1] + (1.0-w) * node_gain[n]);
- }
- }
- *out_db_gain = (node_gain[split_drc_characteristic->characteristic_node_count]);
- return (0);
+ }
+ *out_db_gain =
+ (node_gain[split_drc_characteristic->characteristic_node_count]);
+ return (0);
}
-
WORD32
-impd_compressor_io_nodes_inverse(ia_split_drc_characteristic_struct* split_drc_characteristic,
- FLOAT32 loc_db_gain,
- FLOAT32 *in_level)
-{
- WORD32 n;
- FLOAT32 w;
- FLOAT32* node_level = split_drc_characteristic->node_level;
- FLOAT32* node_gain = split_drc_characteristic->node_gain;
- WORD32 node_count = split_drc_characteristic->characteristic_node_count;
-
- if (node_gain[1] < 0.0f) {
- if (loc_db_gain <= node_gain[node_count]) {
- *in_level = node_level[node_count];
- }
- else {
- if (loc_db_gain >= 0.0f) {
- *in_level = DRC_INPUT_LOUDNESS_TARGET;
- }
- else {
- for (n=1; n<=node_count; n++) {
- if ((loc_db_gain <= node_gain[n-1]) && (loc_db_gain > node_gain[n])) {
- w = (node_gain[n]-loc_db_gain)/(node_gain[n]-node_gain[n-1]);
- *in_level =(FLOAT32) (w * node_level[n-1] + (1.0-w) * node_level[n]);
- }
- }
- }
- }
+impd_compressor_io_nodes_inverse(
+ ia_split_drc_characteristic_struct* split_drc_characteristic,
+ FLOAT32 loc_db_gain, FLOAT32* in_level) {
+ WORD32 n;
+ FLOAT32 w;
+ FLOAT32* node_level = split_drc_characteristic->node_level;
+ FLOAT32* node_gain = split_drc_characteristic->node_gain;
+ WORD32 node_count = split_drc_characteristic->characteristic_node_count;
+
+ if (node_gain[1] < 0.0f) {
+ if (loc_db_gain <= node_gain[node_count]) {
+ *in_level = node_level[node_count];
+ } else {
+ if (loc_db_gain >= 0.0f) {
+ *in_level = DRC_INPUT_LOUDNESS_TARGET;
+ } else {
+ for (n = 1; n <= node_count; n++) {
+ if ((loc_db_gain <= node_gain[n - 1]) &&
+ (loc_db_gain > node_gain[n])) {
+ w = (node_gain[n] - loc_db_gain) /
+ (node_gain[n] - node_gain[n - 1]);
+ *in_level =
+ (FLOAT32)(w * node_level[n - 1] + (1.0 - w) * node_level[n]);
+ }
+ }
+ }
}
- else {
- if (loc_db_gain >= node_gain[node_count]) {
- *in_level = node_level[node_count];
- }
- else {
- if (loc_db_gain <= 0.0f) {
- *in_level = DRC_INPUT_LOUDNESS_TARGET;
- }
- else {
- for (n=1; n<=node_count; n++) {
- if ((loc_db_gain >= node_gain[n-1]) && (loc_db_gain < node_gain[n])) {
- w = (FLOAT32)(node_gain[n]-loc_db_gain)/(node_gain[n]-node_gain[n-1]);
- *in_level =(FLOAT32) (w * node_level[n-1] + (1.0-w) * node_level[n]);
- }
- }
- }
- }
+ } else {
+ if (loc_db_gain >= node_gain[node_count]) {
+ *in_level = node_level[node_count];
+ } else {
+ if (loc_db_gain <= 0.0f) {
+ *in_level = DRC_INPUT_LOUDNESS_TARGET;
+ } else {
+ for (n = 1; n <= node_count; n++) {
+ if ((loc_db_gain >= node_gain[n - 1]) &&
+ (loc_db_gain < node_gain[n])) {
+ w = (FLOAT32)(node_gain[n] - loc_db_gain) /
+ (node_gain[n] - node_gain[n - 1]);
+ *in_level =
+ (FLOAT32)(w * node_level[n - 1] + (1.0 - w) * node_level[n]);
+ }
+ }
+ }
}
- return (0);
+ }
+ return (0);
}
-
WORD32
-impd_map_gain (
- ia_split_drc_characteristic_struct* split_drc_characteristic_source,
- ia_split_drc_characteristic_struct* split_drc_characteristic_target,
- FLOAT32 gain_in_db,
- FLOAT32* gain_out_db)
-{
- FLOAT32 inLevel;
- WORD32 err = 0;
-
- switch (split_drc_characteristic_source->characteristic_format) {
- case CHARACTERISTIC_SIGMOID:
- err = impd_compressor_io_sigmoid_inv(split_drc_characteristic_source, gain_in_db, &inLevel);
- if (err) return (err);
- break;
- case CHARACTERISTIC_NODES:
- err = impd_compressor_io_nodes_inverse(split_drc_characteristic_source, gain_in_db, &inLevel);
- if (err) return (err);
- break;
- case CHARACTERISTIC_PASS_THRU:
- inLevel = gain_in_db;
- break;
- default:
- return(UNEXPECTED_ERROR);
- break;
- }
- switch (split_drc_characteristic_target->characteristic_format) {
- case CHARACTERISTIC_SIGMOID:
- err = impd_compressor_io_sigmoid(split_drc_characteristic_target, inLevel, gain_out_db);
- if (err) return (err);
- break;
- case CHARACTERISTIC_NODES:
- if (inLevel < DRC_INPUT_LOUDNESS_TARGET) {
- err = impd_compressor_io_nodes_lt(split_drc_characteristic_target, inLevel, gain_out_db);
- if (err) return (err);
- }
- else {
- err = impd_compressor_io_nodes_rt(split_drc_characteristic_target, inLevel, gain_out_db);
- if (err) return (err);
- }
- break;
- case CHARACTERISTIC_PASS_THRU:
- *gain_out_db = inLevel;
- break;
- default:
- break;
- }
- return (0);
+impd_map_gain(
+ ia_split_drc_characteristic_struct* split_drc_characteristic_source,
+ ia_split_drc_characteristic_struct* split_drc_characteristic_target,
+ FLOAT32 gain_in_db, FLOAT32* gain_out_db) {
+ FLOAT32 inLevel;
+ WORD32 err = 0;
+
+ switch (split_drc_characteristic_source->characteristic_format) {
+ case CHARACTERISTIC_SIGMOID:
+ err = impd_compressor_io_sigmoid_inv(split_drc_characteristic_source,
+ gain_in_db, &inLevel);
+ if (err) return (err);
+ break;
+ case CHARACTERISTIC_NODES:
+ err = impd_compressor_io_nodes_inverse(split_drc_characteristic_source,
+ gain_in_db, &inLevel);
+ if (err) return (err);
+ break;
+ case CHARACTERISTIC_PASS_THRU:
+ inLevel = gain_in_db;
+ break;
+ default:
+ return (UNEXPECTED_ERROR);
+ break;
+ }
+ switch (split_drc_characteristic_target->characteristic_format) {
+ case CHARACTERISTIC_SIGMOID:
+ err = impd_compressor_io_sigmoid(split_drc_characteristic_target, inLevel,
+ gain_out_db);
+ if (err) return (err);
+ break;
+ case CHARACTERISTIC_NODES:
+ if (inLevel < DRC_INPUT_LOUDNESS_TARGET) {
+ err = impd_compressor_io_nodes_lt(split_drc_characteristic_target,
+ inLevel, gain_out_db);
+ if (err) return (err);
+ } else {
+ err = impd_compressor_io_nodes_rt(split_drc_characteristic_target,
+ inLevel, gain_out_db);
+ if (err) return (err);
+ }
+ break;
+ case CHARACTERISTIC_PASS_THRU:
+ *gain_out_db = inLevel;
+ break;
+ default:
+ break;
+ }
+ return (0);
}
WORD32
-impd_conv_to_linear_domain (ia_interp_params_struct* interp_params_str,
- WORD32 drc_band,
- FLOAT32 in_param_db_gain,
- FLOAT32 in_param_db_slope,
- FLOAT32* out_param_lin_gain,
- FLOAT32* out_param_lin_slope)
-{
- WORD32 err = 0;
- FLOAT32 loc_db_gain = in_param_db_gain;
- FLOAT32 gain_ratio = 1.0;
- FLOAT32 mapped_db_gain;
- ia_gain_modifiers_struct* pstr_gain_modifiers = interp_params_str->pstr_gain_modifiers;
- if (interp_params_str->gain_modification_flag) {
- ia_split_drc_characteristic_struct* split_drc_characteristic_source;
-
- WORD32 slopeIsNegative;
-
- if (interp_params_str->drc_characteristic_present) {
- if (interp_params_str->drc_source_characteristic_cicp_format)
- {
-
- }
- else {
- slopeIsNegative = 0;
- split_drc_characteristic_source = interp_params_str->split_source_characteristic_left;
- if (split_drc_characteristic_source->characteristic_format == 0)
- {
- slopeIsNegative = 1;
- }
- else
- {
- if (split_drc_characteristic_source->node_gain[1] > 0.0f) {
- slopeIsNegative = 1;
- }
- }
- if (loc_db_gain == 0.0f) {
- if (((pstr_gain_modifiers->target_characteristic_left_present[drc_band] == 1) &&
- (interp_params_str->split_target_characteristic_left->characteristic_format == CHARACTERISTIC_PASS_THRU)) ||
- ((pstr_gain_modifiers->target_characteristic_right_present[drc_band] == 1) &&
- (interp_params_str->split_target_characteristic_right->characteristic_format == CHARACTERISTIC_PASS_THRU)))
- {
- mapped_db_gain = DRC_INPUT_LOUDNESS_TARGET;
- loc_db_gain = DRC_INPUT_LOUDNESS_TARGET;
- }
- }
- else
- {
- if (((loc_db_gain > 0.0f) && (slopeIsNegative == 1)) || ((loc_db_gain < 0.0f) && (slopeIsNegative == 0)))
- {
- if (pstr_gain_modifiers->target_characteristic_left_present[drc_band] == 1)
- {
- err = impd_map_gain(split_drc_characteristic_source, interp_params_str->split_target_characteristic_left, loc_db_gain, &mapped_db_gain);
- if (err) return (err);
- gain_ratio = mapped_db_gain / loc_db_gain;
- }
-
- }
- else if (((loc_db_gain < 0.0f) && (slopeIsNegative == 1)) || ((loc_db_gain > 0.0f) && (slopeIsNegative == 0)))
- {
- if (pstr_gain_modifiers->target_characteristic_right_present[drc_band] == 1)
- {
- split_drc_characteristic_source = interp_params_str->split_source_characteristic_right;
- err = impd_map_gain(split_drc_characteristic_source, interp_params_str->split_target_characteristic_right, loc_db_gain, &mapped_db_gain);
- if (err) return (err);
- gain_ratio = mapped_db_gain / loc_db_gain;
- }
- }
- }
+impd_conv_to_linear_domain(ia_interp_params_struct* interp_params_str,
+ WORD32 drc_band, FLOAT32 in_param_db_gain,
+ FLOAT32 in_param_db_slope,
+ FLOAT32* out_param_lin_gain,
+ FLOAT32* out_param_lin_slope) {
+ WORD32 err = 0;
+ FLOAT32 loc_db_gain = in_param_db_gain;
+ FLOAT32 gain_ratio = 1.0;
+ FLOAT32 mapped_db_gain;
+ ia_gain_modifiers_struct* pstr_gain_modifiers =
+ interp_params_str->pstr_gain_modifiers;
+ if (interp_params_str->gain_modification_flag) {
+ ia_split_drc_characteristic_struct* split_drc_characteristic_source;
+
+ WORD32 slopeIsNegative;
+
+ if (interp_params_str->drc_characteristic_present) {
+ if (interp_params_str->drc_source_characteristic_cicp_format) {
+ } else {
+ slopeIsNegative = 0;
+ split_drc_characteristic_source =
+ interp_params_str->split_source_characteristic_left;
+ if (split_drc_characteristic_source->characteristic_format == 0) {
+ slopeIsNegative = 1;
+ } else {
+ if (split_drc_characteristic_source->node_gain[1] > 0.0f) {
+ slopeIsNegative = 1;
+ }
+ }
+ if (loc_db_gain == 0.0f) {
+ if (((pstr_gain_modifiers
+ ->target_characteristic_left_present[drc_band] == 1) &&
+ (interp_params_str->split_target_characteristic_left
+ ->characteristic_format == CHARACTERISTIC_PASS_THRU)) ||
+ ((pstr_gain_modifiers
+ ->target_characteristic_right_present[drc_band] == 1) &&
+ (interp_params_str->split_target_characteristic_right
+ ->characteristic_format == CHARACTERISTIC_PASS_THRU))) {
+ mapped_db_gain = DRC_INPUT_LOUDNESS_TARGET;
+ loc_db_gain = DRC_INPUT_LOUDNESS_TARGET;
+ }
+ } else {
+ if (((loc_db_gain > 0.0f) && (slopeIsNegative == 1)) ||
+ ((loc_db_gain < 0.0f) && (slopeIsNegative == 0))) {
+ if (pstr_gain_modifiers
+ ->target_characteristic_left_present[drc_band] == 1) {
+ err = impd_map_gain(
+ split_drc_characteristic_source,
+ interp_params_str->split_target_characteristic_left,
+ loc_db_gain, &mapped_db_gain);
+ if (err) return (err);
+ gain_ratio = mapped_db_gain / loc_db_gain;
}
- }
- if (loc_db_gain < 0.0f) {
- gain_ratio *= interp_params_str->compress;
- }
- else {
- gain_ratio *= interp_params_str->boost;
+ } else if (((loc_db_gain < 0.0f) && (slopeIsNegative == 1)) ||
+ ((loc_db_gain > 0.0f) && (slopeIsNegative == 0))) {
+ if (pstr_gain_modifiers
+ ->target_characteristic_right_present[drc_band] == 1) {
+ split_drc_characteristic_source =
+ interp_params_str->split_source_characteristic_right;
+ err = impd_map_gain(
+ split_drc_characteristic_source,
+ interp_params_str->split_target_characteristic_right,
+ loc_db_gain, &mapped_db_gain);
+ if (err) return (err);
+ gain_ratio = mapped_db_gain / loc_db_gain;
+ }
+ }
}
+ }
}
- if (pstr_gain_modifiers->gain_scaling_flag[drc_band] == 1) {
- if (loc_db_gain < 0.0) {
- gain_ratio *= pstr_gain_modifiers->attn_scaling[drc_band];
- }
- else {
- gain_ratio *= pstr_gain_modifiers->ampl_scaling[drc_band];
- }
+
+ if (loc_db_gain < 0.0f) {
+ gain_ratio *= interp_params_str->compress;
+ } else {
+ gain_ratio *= interp_params_str->boost;
}
- if ((interp_params_str->pstr_ducking_modifiers->ducking_scaling_flag == 1) && (interp_params_str->ducking_flag == 1)) {
- gain_ratio *= interp_params_str->pstr_ducking_modifiers->ducking_scaling;
+ }
+ if (pstr_gain_modifiers->gain_scaling_flag[drc_band] == 1) {
+ if (loc_db_gain < 0.0) {
+ gain_ratio *= pstr_gain_modifiers->attn_scaling[drc_band];
+ } else {
+ gain_ratio *= pstr_gain_modifiers->ampl_scaling[drc_band];
}
-
- if (interp_params_str->interpolation_loud_eq == 1)
- {
- *out_param_lin_gain = gain_ratio * loc_db_gain + pstr_gain_modifiers->gain_offset[drc_band];
- *out_param_lin_slope = 0.0f;
+ }
+ if ((interp_params_str->pstr_ducking_modifiers->ducking_scaling_flag == 1) &&
+ (interp_params_str->ducking_flag == 1)) {
+ gain_ratio *= interp_params_str->pstr_ducking_modifiers->ducking_scaling;
+ }
+
+ if (interp_params_str->interpolation_loud_eq == 1) {
+ *out_param_lin_gain =
+ gain_ratio * loc_db_gain + pstr_gain_modifiers->gain_offset[drc_band];
+ *out_param_lin_slope = 0.0f;
+ } else {
+ *out_param_lin_gain =
+ (FLOAT32)pow(2.0, (FLOAT64)(gain_ratio * loc_db_gain / 6.0f));
+ *out_param_lin_slope = SLOPE_FACTOR_DB_TO_LINEAR * gain_ratio *
+ *out_param_lin_gain * in_param_db_slope;
+
+ if (pstr_gain_modifiers->gain_offset_flag[drc_band] == 1) {
+ *out_param_lin_gain *= (FLOAT32)pow(
+ 2.0, (FLOAT64)(pstr_gain_modifiers->gain_offset[drc_band] / 6.0f));
}
- else
- {
- *out_param_lin_gain = (FLOAT32)pow(2.0, (FLOAT64)(gain_ratio * loc_db_gain / 6.0f));
- *out_param_lin_slope = SLOPE_FACTOR_DB_TO_LINEAR * gain_ratio * *out_param_lin_gain * in_param_db_slope;
-
- if (pstr_gain_modifiers->gain_offset_flag[drc_band] == 1) {
- *out_param_lin_gain *= (FLOAT32)pow(2.0, (FLOAT64)(pstr_gain_modifiers->gain_offset[drc_band]/6.0f));
- }
- if ((interp_params_str->limiter_peak_target_present == 1) && (interp_params_str->clipping_flag == 1)) {
- *out_param_lin_gain *= (FLOAT32)pow(2.0, max(0.0, -interp_params_str->limiter_peak_target - interp_params_str->loudness_normalization_gain_db)/6.0);
- if (*out_param_lin_gain >= 1.0) {
- *out_param_lin_gain = 1.0;
- *out_param_lin_slope = 0.0;
- }
- }
+ if ((interp_params_str->limiter_peak_target_present == 1) &&
+ (interp_params_str->clipping_flag == 1)) {
+ *out_param_lin_gain *= (FLOAT32)pow(
+ 2.0, max(0.0, -interp_params_str->limiter_peak_target -
+ interp_params_str->loudness_normalization_gain_db) /
+ 6.0);
+ if (*out_param_lin_gain >= 1.0) {
+ *out_param_lin_gain = 1.0;
+ *out_param_lin_slope = 0.0;
+ }
}
- return (0);
+ }
+ return (0);
}
WORD32 impd_interpolate_drc_gain(ia_interp_params_struct* interp_params_str,
- WORD32 drc_band,
- WORD32 gain_step_tdomain,
- FLOAT32 gain0,
- FLOAT32 gain1,
- FLOAT32 slope0,
- FLOAT32 slope1,
- FLOAT32* result)
-{
- WORD32 err = 0;
- WORD32 n;
- FLOAT32 k1, k2, a, b, c, d;
- FLOAT32 slope_t1;
- FLOAT32 slope_t2;
- FLOAT32 gain_t1;
- FLOAT32 gain_t2;
-
- WORD32 cubic_interpolation = 1;
- WORD32 node_inser;
- FLOAT32 node_inser_float;
-
- if (gain_step_tdomain <= 0)
- {
- return (UNEXPECTED_ERROR);
- }
+ WORD32 drc_band, WORD32 gain_step_tdomain,
+ FLOAT32 gain0, FLOAT32 gain1, FLOAT32 slope0,
+ FLOAT32 slope1, FLOAT32* result) {
+ WORD32 err = 0;
+ WORD32 n;
+ FLOAT32 k1, k2, a, b, c, d;
+ FLOAT32 slope_t1;
+ FLOAT32 slope_t2;
+ FLOAT32 gain_t1;
+ FLOAT32 gain_t2;
+
+ WORD32 cubic_interpolation = 1;
+ WORD32 node_inser;
+ FLOAT32 node_inser_float;
+
+ if (gain_step_tdomain <= 0) {
+ return (UNEXPECTED_ERROR);
+ }
+
+ if (interp_params_str->gain_interpolation_type ==
+ GAIN_INTERPOLATION_TYPE_SPLINE) {
+ err = impd_conv_to_linear_domain(interp_params_str, drc_band, gain0, slope0,
+ &gain_t1, &slope_t1);
+ if (err) return (err);
+ err = impd_conv_to_linear_domain(interp_params_str, drc_band, gain1, slope1,
+ &gain_t2, &slope_t2);
+ if (err) return (err);
+
+ slope_t1 = slope_t1 / (FLOAT32)interp_params_str->delta_tmin;
+ slope_t2 = slope_t2 / (FLOAT32)interp_params_str->delta_tmin;
+ if ((FLOAT32)fabs((FLOAT64)slope_t1) > (FLOAT32)fabs((FLOAT64)slope_t2)) {
+ node_inser_float = 2.0f *
+ (gain_t2 - gain_t1 - slope_t2 * gain_step_tdomain) /
+ (slope_t1 - slope_t2);
+ node_inser = (WORD32)(0.5f + node_inser_float);
+ if ((node_inser >= 0) && (node_inser < gain_step_tdomain)) {
+ cubic_interpolation = 0;
+
+ result[0] = gain_t1;
+ result[gain_step_tdomain] = gain_t2;
- if (interp_params_str->gain_interpolation_type == GAIN_INTERPOLATION_TYPE_SPLINE) {
- err = impd_conv_to_linear_domain(interp_params_str, drc_band, gain0, slope0, &gain_t1, &slope_t1);
- if (err)
- return (err);
- err = impd_conv_to_linear_domain (interp_params_str, drc_band, gain1, slope1, &gain_t2, &slope_t2);
- if (err)
- return (err);
-
- slope_t1 = slope_t1/(FLOAT32) interp_params_str->delta_tmin;
- slope_t2 = slope_t2/(FLOAT32) interp_params_str->delta_tmin;
- if ((FLOAT32)fabs((FLOAT64)slope_t1) > (FLOAT32)fabs((FLOAT64)slope_t2)) {
- node_inser_float = 2.0f * (gain_t2 - gain_t1 - slope_t2 * gain_step_tdomain) /
- (slope_t1 - slope_t2);
- node_inser = (WORD32) (0.5f + node_inser_float);
- if ((node_inser >= 0) && (node_inser < gain_step_tdomain)) {
- cubic_interpolation = 0;
-
- result[0] = gain_t1;
- result[gain_step_tdomain] = gain_t2;
-
- a = 0.5f*(slope_t2 - slope_t1) / node_inser_float;
- b = slope_t1;
- c = gain_t1;
- for (n=1; n<node_inser; n++) {
- FLOAT32 t = (FLOAT32) n;
- result[n] = (a * t + b ) * t + c;
- result[n] = max(0.0f, result[n]);
- }
- a = slope_t2;
- b = gain_t2;
- for ( ; n<gain_step_tdomain; n++) {
- FLOAT32 t = (FLOAT32) (n - gain_step_tdomain);
- result[n] = a * t + b;
- }
- }
- }
- else if ((FLOAT32)fabs((FLOAT64)slope_t1) < (FLOAT32)fabs((FLOAT64)slope_t2))
- {
- node_inser_float = 2.0f * (gain_t1 - gain_t2 + slope_t1 * gain_step_tdomain) /
- (slope_t1 - slope_t2);
- node_inser_float = gain_step_tdomain - node_inser_float;
- node_inser = (WORD32) (0.5f + node_inser_float);
- if ((node_inser >= 0) && (node_inser < gain_step_tdomain)) {
- cubic_interpolation = 0;
-
- result[0] = gain_t1;
- result[gain_step_tdomain] = gain_t2;
-
- a = slope_t1;
- b = gain_t1;
- for (n=1; n<node_inser; n++) {
- FLOAT32 t = (FLOAT32) n;
- result[n] = a * t + b;
- }
- a = (slope_t2 - slope_t1) / (2.0f * (gain_step_tdomain - node_inser_float));
- b = - slope_t2;
- c = gain_t2;
- for ( ; n<gain_step_tdomain; n++) {
- FLOAT32 t = (FLOAT32) (gain_step_tdomain-n);
- result[n] = (a * t + b ) * t + c;
- result[n] = max(0.0f, result[n]);
- }
- }
+ a = 0.5f * (slope_t2 - slope_t1) / node_inser_float;
+ b = slope_t1;
+ c = gain_t1;
+ for (n = 1; n < node_inser; n++) {
+ FLOAT32 t = (FLOAT32)n;
+ result[n] = (a * t + b) * t + c;
+ result[n] = max(0.0f, result[n]);
}
+ a = slope_t2;
+ b = gain_t2;
+ for (; n < gain_step_tdomain; n++) {
+ FLOAT32 t = (FLOAT32)(n - gain_step_tdomain);
+ result[n] = a * t + b;
+ }
+ }
+ } else if ((FLOAT32)fabs((FLOAT64)slope_t1) <
+ (FLOAT32)fabs((FLOAT64)slope_t2)) {
+ node_inser_float = 2.0f *
+ (gain_t1 - gain_t2 + slope_t1 * gain_step_tdomain) /
+ (slope_t1 - slope_t2);
+ node_inser_float = gain_step_tdomain - node_inser_float;
+ node_inser = (WORD32)(0.5f + node_inser_float);
+ if ((node_inser >= 0) && (node_inser < gain_step_tdomain)) {
+ cubic_interpolation = 0;
+
+ result[0] = gain_t1;
+ result[gain_step_tdomain] = gain_t2;
- if (cubic_interpolation == 1)
- {
- FLOAT32 gain_step_inv = 1.0f / (FLOAT32)gain_step_tdomain;
- FLOAT32 gain_step_inv2 = gain_step_inv * gain_step_inv;
-
- k1 = (gain_t2 - gain_t1) * gain_step_inv2;
- k2 = slope_t2 + slope_t1;
-
- a = gain_step_inv * (gain_step_inv * k2 - 2.0f * k1);
- b = 3.0f * k1 - gain_step_inv * (k2 + slope_t1);
- c = slope_t1;
- d = gain_t1;
-
- result[0] = gain_t1;
- result[gain_step_tdomain] = gain_t2;
- for (n=1; n<gain_step_tdomain; n++) {
- FLOAT32 t = (FLOAT32) n;
- result[n] = (((a * t + b ) * t + c ) * t ) + d;
- result[n] = max(0.0f, result[n]);
- }
- }
+ a = slope_t1;
+ b = gain_t1;
+ for (n = 1; n < node_inser; n++) {
+ FLOAT32 t = (FLOAT32)n;
+ result[n] = a * t + b;
+ }
+ a = (slope_t2 - slope_t1) /
+ (2.0f * (gain_step_tdomain - node_inser_float));
+ b = -slope_t2;
+ c = gain_t2;
+ for (; n < gain_step_tdomain; n++) {
+ FLOAT32 t = (FLOAT32)(gain_step_tdomain - n);
+ result[n] = (a * t + b) * t + c;
+ result[n] = max(0.0f, result[n]);
+ }
+ }
}
- else{
- err = impd_conv_to_linear_domain(interp_params_str, drc_band, gain1, slope1, &gain_t2, &slope_t2);
- if (err)
- return (err);
-
- a = 0;
- b = gain_t2;
-
- result[0] = gain_t2;
- result[gain_step_tdomain] = gain_t2;
- for (n=1; n<gain_step_tdomain; n++) {
- FLOAT32 t = (FLOAT32) n;
- result[n] = a * t + b;
- }
+ if (cubic_interpolation == 1) {
+ FLOAT32 gain_step_inv = 1.0f / (FLOAT32)gain_step_tdomain;
+ FLOAT32 gain_step_inv2 = gain_step_inv * gain_step_inv;
+
+ k1 = (gain_t2 - gain_t1) * gain_step_inv2;
+ k2 = slope_t2 + slope_t1;
+
+ a = gain_step_inv * (gain_step_inv * k2 - 2.0f * k1);
+ b = 3.0f * k1 - gain_step_inv * (k2 + slope_t1);
+ c = slope_t1;
+ d = gain_t1;
+
+ result[0] = gain_t1;
+ result[gain_step_tdomain] = gain_t2;
+ for (n = 1; n < gain_step_tdomain; n++) {
+ FLOAT32 t = (FLOAT32)n;
+ result[n] = (((a * t + b) * t + c) * t) + d;
+ result[n] = max(0.0f, result[n]);
+ }
+ }
+ } else {
+ err = impd_conv_to_linear_domain(interp_params_str, drc_band, gain1, slope1,
+ &gain_t2, &slope_t2);
+ if (err) return (err);
+
+ a = 0;
+ b = gain_t2;
+
+ result[0] = gain_t2;
+ result[gain_step_tdomain] = gain_t2;
+ for (n = 1; n < gain_step_tdomain; n++) {
+ FLOAT32 t = (FLOAT32)n;
+ result[n] = a * t + b;
}
- return 0;
+ }
+ return 0;
}
WORD32
-impd_advance_buf(WORD32 drc_frame_size,
- ia_gain_buffer_struct* pstr_gain_buf)
-{
- WORD32 n;
- ia_interp_buf_struct* buf_interpolation;
-
- for (n=0; n<pstr_gain_buf->buf_interpolation_count; n++)
- {
- buf_interpolation = &(pstr_gain_buf->buf_interpolation[n]);
- buf_interpolation->prev_node = buf_interpolation->str_node;
- buf_interpolation->prev_node.time -= drc_frame_size;
- memmove(buf_interpolation->lpcm_gains, buf_interpolation->lpcm_gains + drc_frame_size, sizeof(FLOAT32) * (drc_frame_size + MAX_SIGNAL_DELAY));
- }
- return(0);
+impd_advance_buf(WORD32 drc_frame_size, ia_gain_buffer_struct* pstr_gain_buf) {
+ WORD32 n;
+ ia_interp_buf_struct* buf_interpolation;
+
+ for (n = 0; n < pstr_gain_buf->buf_interpolation_count; n++) {
+ buf_interpolation = &(pstr_gain_buf->buf_interpolation[n]);
+ buf_interpolation->prev_node = buf_interpolation->str_node;
+ buf_interpolation->prev_node.time -= drc_frame_size;
+ memmove(buf_interpolation->lpcm_gains,
+ buf_interpolation->lpcm_gains + drc_frame_size,
+ sizeof(FLOAT32) * (drc_frame_size + MAX_SIGNAL_DELAY));
+ }
+ return (0);
}
WORD32
-impd_concatenate_segments(WORD32 drc_frame_size,
- WORD32 drc_band,
- ia_interp_params_struct* interp_params_str,
- ia_spline_nodes_struct* str_spline_nodes,
- ia_interp_buf_struct* buf_interpolation)
-{
- WORD32 timePrev, duration, n, err = 0;
- FLOAT32 loc_db_gain = 0.0f, prev_db_gain, slope = 0.0f, slopePrev;
-
- timePrev = buf_interpolation->prev_node.time;
- prev_db_gain = buf_interpolation->prev_node.loc_db_gain;
- slopePrev = buf_interpolation->prev_node.slope;
- for (n=0; n<str_spline_nodes->num_nodes; n++)
- {
- duration = str_spline_nodes->str_node[n].time - timePrev;
- loc_db_gain = str_spline_nodes->str_node[n].loc_db_gain;
- slope = str_spline_nodes->str_node[n].slope;
-
- err = impd_interpolate_drc_gain(interp_params_str,
- drc_band,
- duration,
- prev_db_gain,
- loc_db_gain,
- slopePrev,
- slope,
- buf_interpolation->lpcm_gains + MAX_SIGNAL_DELAY + drc_frame_size + timePrev);
- if (err) return (err);
-
- timePrev = str_spline_nodes->str_node[n].time;
- prev_db_gain = loc_db_gain;
- slopePrev = slope;
- }
-
- buf_interpolation->str_node.loc_db_gain = loc_db_gain;
- buf_interpolation->str_node.slope = slope;
- buf_interpolation->str_node.time = timePrev;
-
-
- return(0);
+impd_concatenate_segments(WORD32 drc_frame_size, WORD32 drc_band,
+ ia_interp_params_struct* interp_params_str,
+ ia_spline_nodes_struct* str_spline_nodes,
+ ia_interp_buf_struct* buf_interpolation) {
+ WORD32 timePrev, duration, n, err = 0;
+ FLOAT32 loc_db_gain = 0.0f, prev_db_gain, slope = 0.0f, slopePrev;
+
+ timePrev = buf_interpolation->prev_node.time;
+ prev_db_gain = buf_interpolation->prev_node.loc_db_gain;
+ slopePrev = buf_interpolation->prev_node.slope;
+ for (n = 0; n < str_spline_nodes->num_nodes; n++) {
+ duration = str_spline_nodes->str_node[n].time - timePrev;
+ loc_db_gain = str_spline_nodes->str_node[n].loc_db_gain;
+ slope = str_spline_nodes->str_node[n].slope;
+
+ err = impd_interpolate_drc_gain(
+ interp_params_str, drc_band, duration, prev_db_gain, loc_db_gain,
+ slopePrev, slope, buf_interpolation->lpcm_gains + MAX_SIGNAL_DELAY +
+ drc_frame_size + timePrev);
+ if (err) return (err);
+
+ timePrev = str_spline_nodes->str_node[n].time;
+ prev_db_gain = loc_db_gain;
+ slopePrev = slope;
+ }
+
+ buf_interpolation->str_node.loc_db_gain = loc_db_gain;
+ buf_interpolation->str_node.slope = slope;
+ buf_interpolation->str_node.time = timePrev;
+
+ return (0);
}
WORD32
-impd_get_drc_gain (ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
- ia_drc_config* pstr_drc_config,
- ia_drc_gain_struct* pstr_drc_gain,
- FLOAT32 compress,
- FLOAT32 boost,
- WORD32 characteristic_index,
- FLOAT32 loudness_normalization_gain_db,
- WORD32 sel_drc_index,
- ia_drc_gain_buffers_struct* drc_gain_buffers)
-{
- ia_drc_params_struct* ia_drc_params_struct = &(p_drc_gain_dec_structs->ia_drc_params_struct);
- WORD32 drc_instructions_index = ia_drc_params_struct->sel_drc_array[sel_drc_index].drc_instructions_index;
- if (drc_instructions_index >= 0)
- {
- WORD32 b, g, gainElementIndex, err = 0;
- WORD32 parametricDrcInstanceIndex = 0;
- ia_interp_params_struct interp_params_str = {0};
-
- ia_drc_instructions_struct* str_drc_instruction_str = &(pstr_drc_config->str_drc_instruction_str[drc_instructions_index]);
- WORD32 drc_set_effect = str_drc_instruction_str->drc_set_effect;
- WORD32 num_drc_ch_groups = str_drc_instruction_str->num_drc_ch_groups;
- ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc = NULL;
- WORD32 drc_coeff_idx = ia_drc_params_struct->sel_drc_array[sel_drc_index].drc_coeff_idx;
- if (drc_coeff_idx >= 0)
- {
- str_p_loc_drc_coefficients_uni_drc = &(pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[drc_coeff_idx]);
- interp_params_str.interpolation_loud_eq = 0;
- }
- else
- {
- return (UNEXPECTED_ERROR);
- }
-
- interp_params_str.loudness_normalization_gain_db = loudness_normalization_gain_db;
- interp_params_str.characteristic_index = characteristic_index;
- interp_params_str.compress = compress;
- interp_params_str.boost = boost;
- interp_params_str.limiter_peak_target_present = str_drc_instruction_str->limiter_peak_target_present;
- interp_params_str.limiter_peak_target = str_drc_instruction_str->limiter_peak_target;
-
- if ( ((drc_set_effect & (EFFECT_BIT_DUCK_OTHER | EFFECT_BIT_DUCK_SELF)) == 0) && (drc_set_effect != EFFECT_BIT_FADE) && (drc_set_effect != EFFECT_BIT_CLIPPING))
- {
- interp_params_str.gain_modification_flag = 1;
- }
- else
- {
- interp_params_str.gain_modification_flag = 0;
- }
- if (drc_set_effect & (EFFECT_BIT_DUCK_OTHER | EFFECT_BIT_DUCK_SELF))
- {
- interp_params_str.ducking_flag = 1;
- }
- else
- {
- interp_params_str.ducking_flag = 0;
- }
- if (drc_set_effect == EFFECT_BIT_CLIPPING)
- {
- interp_params_str.clipping_flag = 1;
- }
- else
- {
- interp_params_str.clipping_flag = 0;
- }
-
- err = impd_advance_buf(ia_drc_params_struct->drc_frame_size, &(drc_gain_buffers->pstr_gain_buf[sel_drc_index]));
- if (err) return (err);
-
- gainElementIndex = 0;
- for(g=0; g<num_drc_ch_groups; g++)
- {
- WORD32 gainSet = 0;
- WORD32 num_drc_bands = 0;
- interp_params_str.gain_interpolation_type = str_drc_instruction_str->gain_interpolation_type_for_channel_group[g];
- interp_params_str.delta_tmin = str_drc_instruction_str->time_delta_min_for_channel_group[g];
- interp_params_str.pstr_ducking_modifiers = &(str_drc_instruction_str->str_ducking_modifiers_for_channel_group[g]);
- interp_params_str.pstr_gain_modifiers = &(str_drc_instruction_str->str_gain_modifiers_of_ch_group[g]);
- if (str_drc_instruction_str->ch_group_parametric_drc_flag[g] == 0) {
- gainSet = str_drc_instruction_str->gain_set_index_for_channel_group[g];
- num_drc_bands = str_drc_instruction_str->band_count_of_ch_group[g];
- for(b=0; b<num_drc_bands; b++)
- {
- ia_gain_params_struct* gain_params = &(str_p_loc_drc_coefficients_uni_drc->gain_set_params[gainSet].gain_params[b]);
- WORD32 seq = gain_params->gain_seq_idx;
- interp_params_str.drc_characteristic_present = gain_params->drc_characteristic_present;
- interp_params_str.drc_source_characteristic_cicp_format = gain_params->drc_characteristic_format_is_cicp;
- interp_params_str.source_drc_characteristic = gain_params->drc_characteristic;
- interp_params_str.split_source_characteristic_left = &(str_p_loc_drc_coefficients_uni_drc->str_split_characteristic_left [gain_params->drc_characteristic_left_index]);
- interp_params_str.split_source_characteristic_right = &(str_p_loc_drc_coefficients_uni_drc->str_split_characteristic_right[gain_params->drc_characteristic_right_index]);
- interp_params_str.split_target_characteristic_left = &(str_p_loc_drc_coefficients_uni_drc->str_split_characteristic_left [interp_params_str.pstr_gain_modifiers->target_characteristic_left_index[b]]);
- interp_params_str.split_target_characteristic_right = &(str_p_loc_drc_coefficients_uni_drc->str_split_characteristic_right[interp_params_str.pstr_gain_modifiers->target_characteristic_right_index[b]]);
- err = impd_concatenate_segments (ia_drc_params_struct->drc_frame_size,
- b,
- &interp_params_str,
- &(pstr_drc_gain->drc_gain_sequence[seq].str_spline_nodes[0]),
- &(drc_gain_buffers->pstr_gain_buf[sel_drc_index].buf_interpolation[gainElementIndex]));
- if (err) return (err);
- gainElementIndex++;
- }
- } else {
- if (ia_drc_params_struct->sub_band_domain_mode == SUBBAND_DOMAIN_MODE_OFF && !(p_drc_gain_dec_structs->parametricdrc_params.str_parametric_drc_instance_params[parametricDrcInstanceIndex].parametric_drc_type == PARAM_DRC_TYPE_LIM)) {
- err = impd_parametric_drc_instance_process (p_drc_gain_dec_structs->audio_in_out_buf.audio_in_out_buf,
- NULL,
- NULL,
- &p_drc_gain_dec_structs->parametricdrc_params,
- &p_drc_gain_dec_structs->parametricdrc_params.str_parametric_drc_instance_params[parametricDrcInstanceIndex]);
- if (err) return (err);
-
- err = impd_concatenate_segments(ia_drc_params_struct->drc_frame_size,
- 0,
- &interp_params_str,
- &p_drc_gain_dec_structs->parametricdrc_params.str_parametric_drc_instance_params[parametricDrcInstanceIndex].str_spline_nodes,
- &(drc_gain_buffers->pstr_gain_buf[sel_drc_index].buf_interpolation[gainElementIndex]));
- if (err) return (err);
- } else if (ia_drc_params_struct->sub_band_domain_mode == SUBBAND_DOMAIN_MODE_OFF && p_drc_gain_dec_structs->parametricdrc_params.str_parametric_drc_instance_params[parametricDrcInstanceIndex].parametric_drc_type == PARAM_DRC_TYPE_LIM) {
- FLOAT32* lpcm_gains = (drc_gain_buffers->pstr_gain_buf[sel_drc_index].buf_interpolation[gainElementIndex]).lpcm_gains + MAX_SIGNAL_DELAY;
- err = impd_parametric_lim_type_drc_process(p_drc_gain_dec_structs->audio_in_out_buf.audio_in_out_buf,
- loudness_normalization_gain_db,
- &p_drc_gain_dec_structs->parametricdrc_params.str_parametric_drc_instance_params[parametricDrcInstanceIndex].str_parametric_drc_type_lim_params,
- lpcm_gains);
- if (err) return (err);
- } else if (ia_drc_params_struct->sub_band_domain_mode != SUBBAND_DOMAIN_MODE_OFF && !(p_drc_gain_dec_structs->parametricdrc_params.str_parametric_drc_instance_params[parametricDrcInstanceIndex].parametric_drc_type == PARAM_DRC_TYPE_LIM)) {
- err = impd_parametric_drc_instance_process (NULL,
- p_drc_gain_dec_structs->audio_in_out_buf.audio_real_buff,
- p_drc_gain_dec_structs->audio_in_out_buf.audio_imag_buff,
- &p_drc_gain_dec_structs->parametricdrc_params,
- &p_drc_gain_dec_structs->parametricdrc_params.str_parametric_drc_instance_params[parametricDrcInstanceIndex]);
- if (err) return (err);
-
- err = impd_concatenate_segments(ia_drc_params_struct->drc_frame_size,
- 0,
- &interp_params_str,
- &p_drc_gain_dec_structs->parametricdrc_params.str_parametric_drc_instance_params[parametricDrcInstanceIndex].str_spline_nodes,
- &(drc_gain_buffers->pstr_gain_buf[sel_drc_index].buf_interpolation[gainElementIndex]));
- if (err) return (err);
+impd_get_drc_gain(ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
+ ia_drc_config* pstr_drc_config,
+ ia_drc_gain_struct* pstr_drc_gain, FLOAT32 compress,
+ FLOAT32 boost, WORD32 characteristic_index,
+ FLOAT32 loudness_normalization_gain_db, WORD32 sel_drc_index,
+ ia_drc_gain_buffers_struct* drc_gain_buffers) {
+ ia_drc_params_struct* ia_drc_params_struct =
+ &(p_drc_gain_dec_structs->ia_drc_params_struct);
+ WORD32 drc_instructions_index =
+ ia_drc_params_struct->sel_drc_array[sel_drc_index].drc_instructions_index;
+ if (drc_instructions_index >= 0) {
+ WORD32 b, g, gainElementIndex, err = 0;
+ WORD32 parametricDrcInstanceIndex = 0;
+ ia_interp_params_struct interp_params_str = {0};
+
+ ia_drc_instructions_struct* str_drc_instruction_str =
+ &(pstr_drc_config->str_drc_instruction_str[drc_instructions_index]);
+ WORD32 drc_set_effect = str_drc_instruction_str->drc_set_effect;
+ WORD32 num_drc_ch_groups = str_drc_instruction_str->num_drc_ch_groups;
+ ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc = NULL;
+ WORD32 drc_coeff_idx =
+ ia_drc_params_struct->sel_drc_array[sel_drc_index].drc_coeff_idx;
+ if (drc_coeff_idx >= 0) {
+ str_p_loc_drc_coefficients_uni_drc =
+ &(pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[drc_coeff_idx]);
+ interp_params_str.interpolation_loud_eq = 0;
+ } else {
+ return (UNEXPECTED_ERROR);
+ }
+ interp_params_str.loudness_normalization_gain_db =
+ loudness_normalization_gain_db;
+ interp_params_str.characteristic_index = characteristic_index;
+ interp_params_str.compress = compress;
+ interp_params_str.boost = boost;
+ interp_params_str.limiter_peak_target_present =
+ str_drc_instruction_str->limiter_peak_target_present;
+ interp_params_str.limiter_peak_target =
+ str_drc_instruction_str->limiter_peak_target;
+
+ if (((drc_set_effect & (EFFECT_BIT_DUCK_OTHER | EFFECT_BIT_DUCK_SELF)) ==
+ 0) &&
+ (drc_set_effect != EFFECT_BIT_FADE) &&
+ (drc_set_effect != EFFECT_BIT_CLIPPING)) {
+ interp_params_str.gain_modification_flag = 1;
} else {
- return (UNEXPECTED_ERROR);
+ interp_params_str.gain_modification_flag = 0;
}
- gainElementIndex++;
- parametricDrcInstanceIndex++;
+ if (drc_set_effect & (EFFECT_BIT_DUCK_OTHER | EFFECT_BIT_DUCK_SELF)) {
+ interp_params_str.ducking_flag = 1;
+ } else {
+ interp_params_str.ducking_flag = 0;
}
- }
+ if (drc_set_effect == EFFECT_BIT_CLIPPING) {
+ interp_params_str.clipping_flag = 1;
+ } else {
+ interp_params_str.clipping_flag = 0;
}
- return (0);
-}
+ err = impd_advance_buf(ia_drc_params_struct->drc_frame_size,
+ &(drc_gain_buffers->pstr_gain_buf[sel_drc_index]));
+ if (err) return (err);
+
+ gainElementIndex = 0;
+ for (g = 0; g < num_drc_ch_groups; g++) {
+ WORD32 gainSet = 0;
+ WORD32 num_drc_bands = 0;
+ interp_params_str.gain_interpolation_type =
+ str_drc_instruction_str->gain_interpolation_type_for_channel_group[g];
+ interp_params_str.delta_tmin =
+ str_drc_instruction_str->time_delta_min_for_channel_group[g];
+ interp_params_str.pstr_ducking_modifiers = &(
+ str_drc_instruction_str->str_ducking_modifiers_for_channel_group[g]);
+ interp_params_str.pstr_gain_modifiers =
+ &(str_drc_instruction_str->str_gain_modifiers_of_ch_group[g]);
+ if (str_drc_instruction_str->ch_group_parametric_drc_flag[g] == 0) {
+ gainSet = str_drc_instruction_str->gain_set_index_for_channel_group[g];
+ num_drc_bands = str_drc_instruction_str->band_count_of_ch_group[g];
+ for (b = 0; b < num_drc_bands; b++) {
+ ia_gain_params_struct* gain_params =
+ &(str_p_loc_drc_coefficients_uni_drc->gain_set_params[gainSet]
+ .gain_params[b]);
+ WORD32 seq = gain_params->gain_seq_idx;
+ interp_params_str.drc_characteristic_present =
+ gain_params->drc_characteristic_present;
+ interp_params_str.drc_source_characteristic_cicp_format =
+ gain_params->drc_characteristic_format_is_cicp;
+ interp_params_str.source_drc_characteristic =
+ gain_params->drc_characteristic;
+ interp_params_str.split_source_characteristic_left = &(
+ str_p_loc_drc_coefficients_uni_drc->str_split_characteristic_left
+ [gain_params->drc_characteristic_left_index]);
+ interp_params_str.split_source_characteristic_right = &(
+ str_p_loc_drc_coefficients_uni_drc->str_split_characteristic_right
+ [gain_params->drc_characteristic_right_index]);
+ interp_params_str.split_target_characteristic_left = &(
+ str_p_loc_drc_coefficients_uni_drc->str_split_characteristic_left
+ [interp_params_str.pstr_gain_modifiers
+ ->target_characteristic_left_index[b]]);
+ interp_params_str.split_target_characteristic_right = &(
+ str_p_loc_drc_coefficients_uni_drc->str_split_characteristic_right
+ [interp_params_str.pstr_gain_modifiers
+ ->target_characteristic_right_index[b]]);
+ err = impd_concatenate_segments(
+ ia_drc_params_struct->drc_frame_size, b, &interp_params_str,
+ &(pstr_drc_gain->drc_gain_sequence[seq].str_spline_nodes[0]),
+ &(drc_gain_buffers->pstr_gain_buf[sel_drc_index]
+ .buf_interpolation[gainElementIndex]));
+ if (err) return (err);
+ gainElementIndex++;
+ }
+ } else {
+ if (ia_drc_params_struct->sub_band_domain_mode ==
+ SUBBAND_DOMAIN_MODE_OFF &&
+ !(p_drc_gain_dec_structs->parametricdrc_params
+ .str_parametric_drc_instance_params
+ [parametricDrcInstanceIndex]
+ .parametric_drc_type == PARAM_DRC_TYPE_LIM)) {
+ err = impd_parametric_drc_instance_process(
+ p_drc_gain_dec_structs->audio_in_out_buf.audio_in_out_buf, NULL,
+ NULL, &p_drc_gain_dec_structs->parametricdrc_params,
+ &p_drc_gain_dec_structs->parametricdrc_params
+ .str_parametric_drc_instance_params
+ [parametricDrcInstanceIndex]);
+ if (err) return (err);
+
+ err = impd_concatenate_segments(
+ ia_drc_params_struct->drc_frame_size, 0, &interp_params_str,
+ &p_drc_gain_dec_structs->parametricdrc_params
+ .str_parametric_drc_instance_params
+ [parametricDrcInstanceIndex]
+ .str_spline_nodes,
+ &(drc_gain_buffers->pstr_gain_buf[sel_drc_index]
+ .buf_interpolation[gainElementIndex]));
+ if (err) return (err);
+ } else if (ia_drc_params_struct->sub_band_domain_mode ==
+ SUBBAND_DOMAIN_MODE_OFF &&
+ p_drc_gain_dec_structs->parametricdrc_params
+ .str_parametric_drc_instance_params
+ [parametricDrcInstanceIndex]
+ .parametric_drc_type == PARAM_DRC_TYPE_LIM) {
+ FLOAT32* lpcm_gains = (drc_gain_buffers->pstr_gain_buf[sel_drc_index]
+ .buf_interpolation[gainElementIndex])
+ .lpcm_gains +
+ MAX_SIGNAL_DELAY;
+ err = impd_parametric_lim_type_drc_process(
+ p_drc_gain_dec_structs->audio_in_out_buf.audio_in_out_buf,
+ loudness_normalization_gain_db,
+ &p_drc_gain_dec_structs->parametricdrc_params
+ .str_parametric_drc_instance_params
+ [parametricDrcInstanceIndex]
+ .str_parametric_drc_type_lim_params,
+ lpcm_gains);
+ if (err) return (err);
+ } else if (ia_drc_params_struct->sub_band_domain_mode !=
+ SUBBAND_DOMAIN_MODE_OFF &&
+ !(p_drc_gain_dec_structs->parametricdrc_params
+ .str_parametric_drc_instance_params
+ [parametricDrcInstanceIndex]
+ .parametric_drc_type == PARAM_DRC_TYPE_LIM)) {
+ err = impd_parametric_drc_instance_process(
+ NULL, p_drc_gain_dec_structs->audio_in_out_buf.audio_real_buff,
+ p_drc_gain_dec_structs->audio_in_out_buf.audio_imag_buff,
+ &p_drc_gain_dec_structs->parametricdrc_params,
+ &p_drc_gain_dec_structs->parametricdrc_params
+ .str_parametric_drc_instance_params
+ [parametricDrcInstanceIndex]);
+ if (err) return (err);
+
+ err = impd_concatenate_segments(
+ ia_drc_params_struct->drc_frame_size, 0, &interp_params_str,
+ &p_drc_gain_dec_structs->parametricdrc_params
+ .str_parametric_drc_instance_params
+ [parametricDrcInstanceIndex]
+ .str_spline_nodes,
+ &(drc_gain_buffers->pstr_gain_buf[sel_drc_index]
+ .buf_interpolation[gainElementIndex]));
+ if (err) return (err);
+
+ } else {
+ return (UNEXPECTED_ERROR);
+ }
+ gainElementIndex++;
+ parametricDrcInstanceIndex++;
+ }
+ }
+ }
+ return (0);
+}
diff --git a/decoder/drc_src/impd_drc_gain_dec.h b/decoder/drc_src/impd_drc_gain_dec.h
index 8f2254b..c240af5 100644
--- a/decoder/drc_src/impd_drc_gain_dec.h
+++ b/decoder/drc_src/impd_drc_gain_dec.h
@@ -21,76 +21,73 @@
#define IMPD_DRC_GAIN_DEC_H
#ifdef __cplusplus
-extern "C"
-{
+extern "C" {
#endif
typedef struct {
- ia_node_struct str_node;
- ia_node_struct prev_node;
- FLOAT32 lpcm_gains[2 * AUDIO_CODEC_FRAME_SIZE_MAX + MAX_SIGNAL_DELAY];
+ ia_node_struct str_node;
+ ia_node_struct prev_node;
+ FLOAT32 lpcm_gains[2 * AUDIO_CODEC_FRAME_SIZE_MAX + MAX_SIGNAL_DELAY];
} ia_interp_buf_struct;
typedef struct {
- WORD32 buf_interpolation_count;
- ia_interp_buf_struct* buf_interpolation;
+ WORD32 buf_interpolation_count;
+ ia_interp_buf_struct* buf_interpolation;
} ia_gain_buffer_struct;
typedef struct {
- ia_gain_buffer_struct pstr_gain_buf[SEL_DRC_COUNT];
+ ia_gain_buffer_struct pstr_gain_buf[SEL_DRC_COUNT];
} ia_drc_gain_buffers_struct;
typedef struct {
- WORD32 gain_interpolation_type;
- WORD32 gain_modification_flag;
- WORD32 ducking_flag;
- WORD32 clipping_flag;
- ia_ducking_modifiers_struct* pstr_ducking_modifiers;
- ia_gain_modifiers_struct* pstr_gain_modifiers;
- WORD32 drc_characteristic_present;
- WORD32 drc_source_characteristic_cicp_format;
- WORD32 source_drc_characteristic;
- ia_split_drc_characteristic_struct* split_source_characteristic_left;
- ia_split_drc_characteristic_struct* split_source_characteristic_right;
- WORD32 drc_target_characteristic_cicp_format;
- WORD32 target_drc_characteristic;
- ia_split_drc_characteristic_struct* split_target_characteristic_left;
- ia_split_drc_characteristic_struct* split_target_characteristic_right;
- WORD32 interpolation_loud_eq;
- WORD32 limiter_peak_target_present;
- FLOAT32 limiter_peak_target;
- FLOAT32 loudness_normalization_gain_db;
- WORD32 delta_tmin;
- WORD32 characteristic_index;
- FLOAT32 compress;
- FLOAT32 boost;
+ WORD32 gain_interpolation_type;
+ WORD32 gain_modification_flag;
+ WORD32 ducking_flag;
+ WORD32 clipping_flag;
+ ia_ducking_modifiers_struct* pstr_ducking_modifiers;
+ ia_gain_modifiers_struct* pstr_gain_modifiers;
+ WORD32 drc_characteristic_present;
+ WORD32 drc_source_characteristic_cicp_format;
+ WORD32 source_drc_characteristic;
+ ia_split_drc_characteristic_struct* split_source_characteristic_left;
+ ia_split_drc_characteristic_struct* split_source_characteristic_right;
+ WORD32 drc_target_characteristic_cicp_format;
+ WORD32 target_drc_characteristic;
+ ia_split_drc_characteristic_struct* split_target_characteristic_left;
+ ia_split_drc_characteristic_struct* split_target_characteristic_right;
+ WORD32 interpolation_loud_eq;
+ WORD32 limiter_peak_target_present;
+ FLOAT32 limiter_peak_target;
+ FLOAT32 loudness_normalization_gain_db;
+ WORD32 delta_tmin;
+ WORD32 characteristic_index;
+ FLOAT32 compress;
+ FLOAT32 boost;
} ia_interp_params_struct;
-
typedef struct {
- WORD32 drc_instructions_index;
- WORD32 drc_coeff_idx;
- WORD32 dwnmix_instructions_index;
+ WORD32 drc_instructions_index;
+ WORD32 drc_coeff_idx;
+ WORD32 dwnmix_instructions_index;
} ia_sel_drc_struct;
typedef struct {
- WORD32 sample_rate;
- WORD32 delta_tmin_default;
- WORD32 drc_frame_size;
- WORD32 delay_mode;
- WORD32 sub_band_domain_mode;
- WORD32 gain_delay_samples;
- WORD32 parametric_drc_delay;
- WORD32 eq_delay;
- WORD32 audio_delay_samples;
- WORD32 drc_set_counter;
- WORD32 multiband_sel_drc_idx;
+ WORD32 sample_rate;
+ WORD32 delta_tmin_default;
+ WORD32 drc_frame_size;
+ WORD32 delay_mode;
+ WORD32 sub_band_domain_mode;
+ WORD32 gain_delay_samples;
+ WORD32 parametric_drc_delay;
+ WORD32 eq_delay;
+ WORD32 audio_delay_samples;
+ WORD32 drc_set_counter;
+ WORD32 multiband_sel_drc_idx;
- ia_sel_drc_struct sel_drc_array[SEL_DRC_COUNT];
+ ia_sel_drc_struct sel_drc_array[SEL_DRC_COUNT];
} ia_drc_params_struct;
-
#ifdef __cplusplus
}
#endif
diff --git a/decoder/drc_src/impd_drc_gain_decoder.c b/decoder/drc_src/impd_drc_gain_decoder.c
index 3583051..43ae7b2 100644
--- a/decoder/drc_src/impd_drc_gain_decoder.c
+++ b/decoder/drc_src/impd_drc_gain_decoder.c
@@ -38,461 +38,465 @@
#include "impd_drc_gain_decoder.h"
#include "impd_drc_dec.h"
-IA_ERRORCODE impd_init_drc_decode( WORD32 frame_size,
- WORD32 sample_rate,
- WORD32 gain_delay_samples,
- WORD32 delay_mode,
- WORD32 sub_band_domain_mode,
- ia_drc_gain_dec_struct* p_drc_gain_dec_structs)
-{
- IA_ERRORCODE err_code = IA_NO_ERROR;
-
-
- err_code = impd_init_drc_params(frame_size,
- sample_rate,
- gain_delay_samples,
- delay_mode,
- sub_band_domain_mode,
- &p_drc_gain_dec_structs->ia_drc_params_struct);
-
- if (err_code!=IA_NO_ERROR)
- return (err_code);
-
- impd_init_parametric_drc(p_drc_gain_dec_structs->ia_drc_params_struct.drc_frame_size,
- sample_rate,
- sub_band_domain_mode,
- &p_drc_gain_dec_structs->parametricdrc_params);
-
- if (err_code!=IA_NO_ERROR)
- return (err_code);
-
- return err_code;
-}
-
+IA_ERRORCODE impd_init_drc_decode(
+ WORD32 frame_size, WORD32 sample_rate, WORD32 gain_delay_samples,
+ WORD32 delay_mode, WORD32 sub_band_domain_mode,
+ ia_drc_gain_dec_struct* p_drc_gain_dec_structs) {
+ IA_ERRORCODE err_code = IA_NO_ERROR;
-IA_ERRORCODE impd_init_drc_decode_post_config(WORD32 audio_num_chan,
- WORD32* drc_set_id_processed,
- WORD32* downmix_id_processed,
- WORD32 num_sets_processed,
- WORD32 eq_set_id_processed,
-
- ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
- ia_drc_config* pstr_drc_config,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- pVOID *mem_ptr
- )
-{
-
- IA_ERRORCODE err_code = 0;
- WORD32 i,j,k, maxMultibandAudioSignalCount=0;
- ia_drc_params_struct* p_drc_params_struct = &p_drc_gain_dec_structs->ia_drc_params_struct;
- ia_audio_in_out_buf* p_audio_in_out_buf = &p_drc_gain_dec_structs->audio_in_out_buf;
-
- for (i = 0; i < num_sets_processed; i++)
- {
- err_code = impd_init_selected_drc_set(pstr_drc_config,
- p_drc_params_struct,
- &p_drc_gain_dec_structs->parametricdrc_params,
- audio_num_chan,
- drc_set_id_processed[i],
- downmix_id_processed[i],
- &p_drc_gain_dec_structs->ia_filter_banks_struct,
- &p_drc_gain_dec_structs->str_overlap_params
- ,p_drc_gain_dec_structs->shape_filter_block
- );
- if (err_code)
- return (err_code);
- }
-
- p_drc_gain_dec_structs->audio_num_chan = audio_num_chan;
- p_drc_gain_dec_structs->ia_drc_params_struct.audio_delay_samples = p_drc_gain_dec_structs->ia_drc_params_struct.parametric_drc_delay;
- if (pstr_drc_config->str_drc_config_ext.parametric_drc_present) {
- err_code = impd_init_parametric_drc_after_config(pstr_drc_config,
- pstr_loudness_info,
- &p_drc_gain_dec_structs->parametricdrc_params,
- mem_ptr);
- if (err_code)
- return (err_code);
- }
+ err_code = impd_init_drc_params(
+ frame_size, sample_rate, gain_delay_samples, delay_mode,
+ sub_band_domain_mode, &p_drc_gain_dec_structs->ia_drc_params_struct);
- p_audio_in_out_buf->audio_num_chan = audio_num_chan;
- p_audio_in_out_buf->audio_delay_samples = p_drc_params_struct->audio_delay_samples;
- p_audio_in_out_buf->frame_size = p_drc_params_struct->drc_frame_size;
-
-
- if(p_drc_params_struct->sub_band_domain_mode == SUBBAND_DOMAIN_MODE_QMF64){
- p_audio_in_out_buf->audio_delay_sub_band_samples = p_drc_params_struct->audio_delay_samples / AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64;
- p_audio_in_out_buf->audio_sub_band_frame_size = p_drc_params_struct->drc_frame_size / AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64;
- p_audio_in_out_buf->audio_sub_band_count = AUDIO_CODEC_SUBBAND_COUNT_QMF64;
- }
- else if(p_drc_params_struct->sub_band_domain_mode == SUBBAND_DOMAIN_MODE_QMF71){
- p_audio_in_out_buf->audio_delay_sub_band_samples = p_drc_params_struct->audio_delay_samples / AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF71;
- p_audio_in_out_buf->audio_sub_band_frame_size = p_drc_params_struct->drc_frame_size / AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF71;
- p_audio_in_out_buf->audio_sub_band_count = AUDIO_CODEC_SUBBAND_COUNT_QMF71;
- }
- else if(p_drc_params_struct->sub_band_domain_mode == SUBBAND_DOMAIN_MODE_STFT256){
- p_audio_in_out_buf->audio_delay_sub_band_samples = p_drc_params_struct->audio_delay_samples / AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_STFT256;
- p_audio_in_out_buf->audio_sub_band_frame_size = p_drc_params_struct->drc_frame_size / AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_STFT256;
- p_audio_in_out_buf->audio_sub_band_count = AUDIO_CODEC_SUBBAND_COUNT_STFT256;
- }
- else{
- p_audio_in_out_buf->audio_delay_sub_band_samples = 0;
- p_audio_in_out_buf->audio_sub_band_frame_size = 0;
- p_audio_in_out_buf->audio_sub_band_count = 0;
- }
+ if (err_code != IA_NO_ERROR) return (err_code);
+ impd_init_parametric_drc(
+ p_drc_gain_dec_structs->ia_drc_params_struct.drc_frame_size, sample_rate,
+ sub_band_domain_mode, &p_drc_gain_dec_structs->parametricdrc_params);
+ if (err_code != IA_NO_ERROR) return (err_code);
+ return err_code;
+}
- for (k=0; k<SEL_DRC_COUNT; k++)
- {
- if (p_drc_params_struct->sel_drc_array[k].drc_instructions_index >= 0)
- {
- ia_drc_instructions_struct* drc_instruction_str = &(pstr_drc_config->str_drc_instruction_str[p_drc_params_struct->sel_drc_array[k].drc_instructions_index]);
- if (drc_instruction_str->gain_element_count > 0)
- {
- p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[k].buf_interpolation = (ia_interp_buf_struct*)*mem_ptr;
- *mem_ptr=(pVOID)((SIZE_T)*mem_ptr+drc_instruction_str->gain_element_count*sizeof(ia_interp_buf_struct)+32);
- p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[k].buf_interpolation_count = drc_instruction_str->gain_element_count;
- for (i=0; i<p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[i].buf_interpolation_count; i++)
- {
- p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[i].buf_interpolation[i].str_node.time = 0;
- p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[i].buf_interpolation[i].prev_node.time = -1;
- p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[i].buf_interpolation[i].str_node.loc_db_gain = 0.0f;
- p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[i].buf_interpolation[i].str_node.slope = 0.0f;
-
- for (j=0; j<2 * AUDIO_CODEC_FRAME_SIZE_MAX + MAX_SIGNAL_DELAY; j++)
- {
- p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[i].buf_interpolation[i].lpcm_gains[j] = 1.f;
- }
- }
- }
+IA_ERRORCODE impd_init_drc_decode_post_config(
+ WORD32 audio_num_chan, WORD32* drc_set_id_processed,
+ WORD32* downmix_id_processed, WORD32 num_sets_processed,
+ WORD32 eq_set_id_processed,
+
+ ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
+ ia_drc_config* pstr_drc_config,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info, pVOID* mem_ptr) {
+ IA_ERRORCODE err_code = 0;
+ WORD32 i, j, k, maxMultibandAudioSignalCount = 0;
+ ia_drc_params_struct* p_drc_params_struct =
+ &p_drc_gain_dec_structs->ia_drc_params_struct;
+ ia_audio_in_out_buf* p_audio_in_out_buf =
+ &p_drc_gain_dec_structs->audio_in_out_buf;
+
+ for (i = 0; i < num_sets_processed; i++) {
+ err_code = impd_init_selected_drc_set(
+ pstr_drc_config, p_drc_params_struct,
+ &p_drc_gain_dec_structs->parametricdrc_params, audio_num_chan,
+ drc_set_id_processed[i], downmix_id_processed[i],
+ &p_drc_gain_dec_structs->ia_filter_banks_struct,
+ &p_drc_gain_dec_structs->str_overlap_params,
+ p_drc_gain_dec_structs->shape_filter_block);
+ if (err_code) return (err_code);
+ }
+
+ p_drc_gain_dec_structs->audio_num_chan = audio_num_chan;
+ p_drc_gain_dec_structs->ia_drc_params_struct.audio_delay_samples =
+ p_drc_gain_dec_structs->ia_drc_params_struct.parametric_drc_delay;
+ if (pstr_drc_config->str_drc_config_ext.parametric_drc_present) {
+ err_code = impd_init_parametric_drc_after_config(
+ pstr_drc_config, pstr_loudness_info,
+ &p_drc_gain_dec_structs->parametricdrc_params, mem_ptr);
+ if (err_code) return (err_code);
+ }
+
+ p_audio_in_out_buf->audio_num_chan = audio_num_chan;
+ p_audio_in_out_buf->audio_delay_samples =
+ p_drc_params_struct->audio_delay_samples;
+ p_audio_in_out_buf->frame_size = p_drc_params_struct->drc_frame_size;
+
+ if (p_drc_params_struct->sub_band_domain_mode == SUBBAND_DOMAIN_MODE_QMF64) {
+ p_audio_in_out_buf->audio_delay_sub_band_samples =
+ p_drc_params_struct->audio_delay_samples /
+ AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64;
+ p_audio_in_out_buf->audio_sub_band_frame_size =
+ p_drc_params_struct->drc_frame_size /
+ AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64;
+ p_audio_in_out_buf->audio_sub_band_count = AUDIO_CODEC_SUBBAND_COUNT_QMF64;
+ } else if (p_drc_params_struct->sub_band_domain_mode ==
+ SUBBAND_DOMAIN_MODE_QMF71) {
+ p_audio_in_out_buf->audio_delay_sub_band_samples =
+ p_drc_params_struct->audio_delay_samples /
+ AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF71;
+ p_audio_in_out_buf->audio_sub_band_frame_size =
+ p_drc_params_struct->drc_frame_size /
+ AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF71;
+ p_audio_in_out_buf->audio_sub_band_count = AUDIO_CODEC_SUBBAND_COUNT_QMF71;
+ } else if (p_drc_params_struct->sub_band_domain_mode ==
+ SUBBAND_DOMAIN_MODE_STFT256) {
+ p_audio_in_out_buf->audio_delay_sub_band_samples =
+ p_drc_params_struct->audio_delay_samples /
+ AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_STFT256;
+ p_audio_in_out_buf->audio_sub_band_frame_size =
+ p_drc_params_struct->drc_frame_size /
+ AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_STFT256;
+ p_audio_in_out_buf->audio_sub_band_count =
+ AUDIO_CODEC_SUBBAND_COUNT_STFT256;
+ } else {
+ p_audio_in_out_buf->audio_delay_sub_band_samples = 0;
+ p_audio_in_out_buf->audio_sub_band_frame_size = 0;
+ p_audio_in_out_buf->audio_sub_band_count = 0;
+ }
+
+ for (k = 0; k < SEL_DRC_COUNT; k++) {
+ if (p_drc_params_struct->sel_drc_array[k].drc_instructions_index >= 0) {
+ ia_drc_instructions_struct* drc_instruction_str =
+ &(pstr_drc_config->str_drc_instruction_str
+ [p_drc_params_struct->sel_drc_array[k].drc_instructions_index]);
+ if (drc_instruction_str->gain_element_count > 0) {
+ p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[k]
+ .buf_interpolation = (ia_interp_buf_struct*)*mem_ptr;
+ *mem_ptr = (pVOID)((SIZE_T)*mem_ptr +
+ drc_instruction_str->gain_element_count *
+ sizeof(ia_interp_buf_struct) +
+ 32);
+ p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[k]
+ .buf_interpolation_count = drc_instruction_str->gain_element_count;
+ for (i = 0;
+ i < p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[i]
+ .buf_interpolation_count;
+ i++) {
+ p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[i]
+ .buf_interpolation[i]
+ .str_node.time = 0;
+ p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[i]
+ .buf_interpolation[i]
+ .prev_node.time = -1;
+ p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[i]
+ .buf_interpolation[i]
+ .str_node.loc_db_gain = 0.0f;
+ p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[i]
+ .buf_interpolation[i]
+ .str_node.slope = 0.0f;
+
+ for (j = 0; j < 2 * AUDIO_CODEC_FRAME_SIZE_MAX + MAX_SIGNAL_DELAY;
+ j++) {
+ p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[i]
+ .buf_interpolation[i]
+ .lpcm_gains[j] = 1.f;
+ }
}
+ }
}
-
-
-
-
- if (eq_set_id_processed > 0)
- {
- for(i=0; i<pstr_drc_config->str_drc_config_ext.eq_instructions_count; i++)
- {
- if (pstr_drc_config->str_drc_config_ext.str_eq_instructions[i].eq_set_id == eq_set_id_processed)
- break;
- }
- if (i==pstr_drc_config->str_drc_config_ext.eq_instructions_count)
- {
- return -1;
- }
-
-
- p_drc_gain_dec_structs->eq_set=(ia_eq_set_struct*)*mem_ptr ;
- *mem_ptr=(pVOID)((SIZE_T)*mem_ptr+sizeof(ia_eq_set_struct)+32);
-
- if (err_code)
- return (err_code);
-
- err_code = impd_derive_eq_set (&pstr_drc_config->str_drc_config_ext.str_eq_coeff,
- &(pstr_drc_config->str_drc_config_ext.str_eq_instructions[i]),
- (FLOAT32)p_drc_gain_dec_structs->ia_drc_params_struct.sample_rate,
- p_drc_gain_dec_structs->ia_drc_params_struct.drc_frame_size,
- p_drc_gain_dec_structs->ia_drc_params_struct.sub_band_domain_mode,
- p_drc_gain_dec_structs->eq_set);
- if (err_code)
- return (err_code);
-
- impd_get_eq_set_delay (p_drc_gain_dec_structs->eq_set,
- &p_drc_gain_dec_structs->ia_drc_params_struct.eq_delay);
-
+ }
+
+ if (eq_set_id_processed > 0) {
+ for (i = 0; i < pstr_drc_config->str_drc_config_ext.eq_instructions_count;
+ i++) {
+ if (pstr_drc_config->str_drc_config_ext.str_eq_instructions[i]
+ .eq_set_id == eq_set_id_processed)
+ break;
}
-
-
-
- for (i=0; i<p_drc_params_struct->drc_set_counter; i++)
- {
- ia_drc_instructions_struct* drc_instruction_str;
- drc_instruction_str = &(pstr_drc_config->str_drc_instruction_str[p_drc_params_struct->sel_drc_array[i].drc_instructions_index]);
- maxMultibandAudioSignalCount = max(maxMultibandAudioSignalCount, drc_instruction_str->multiband_audio_sig_count);
+ if (i == pstr_drc_config->str_drc_config_ext.eq_instructions_count) {
+ return -1;
}
-
-
-
- p_drc_gain_dec_structs->audio_band_buffer.non_interleaved_audio = *mem_ptr;
- *mem_ptr = (pVOID) ((SIZE_T)*mem_ptr+(maxMultibandAudioSignalCount*sizeof(FLOAT32*))+32);
-
-
-
- for (i=0;i<maxMultibandAudioSignalCount; i++)
- {
- p_drc_gain_dec_structs->audio_band_buffer.non_interleaved_audio[i] = *mem_ptr;
- *mem_ptr = (pVOID) ( (SIZE_T)*mem_ptr+(p_drc_params_struct->drc_frame_size*sizeof(FLOAT32))+32);
-
+ p_drc_gain_dec_structs->eq_set = (ia_eq_set_struct*)*mem_ptr;
+ *mem_ptr = (pVOID)((SIZE_T)*mem_ptr + sizeof(ia_eq_set_struct) + 32);
+
+ if (err_code) return (err_code);
+
+ err_code = impd_derive_eq_set(
+ &pstr_drc_config->str_drc_config_ext.str_eq_coeff,
+ &(pstr_drc_config->str_drc_config_ext.str_eq_instructions[i]),
+ (FLOAT32)p_drc_gain_dec_structs->ia_drc_params_struct.sample_rate,
+ p_drc_gain_dec_structs->ia_drc_params_struct.drc_frame_size,
+ p_drc_gain_dec_structs->ia_drc_params_struct.sub_band_domain_mode,
+ p_drc_gain_dec_structs->eq_set);
+ if (err_code) return (err_code);
+
+ impd_get_eq_set_delay(
+ p_drc_gain_dec_structs->eq_set,
+ &p_drc_gain_dec_structs->ia_drc_params_struct.eq_delay);
+ }
+
+ for (i = 0; i < p_drc_params_struct->drc_set_counter; i++) {
+ ia_drc_instructions_struct* drc_instruction_str;
+ drc_instruction_str =
+ &(pstr_drc_config->str_drc_instruction_str
+ [p_drc_params_struct->sel_drc_array[i].drc_instructions_index]);
+ maxMultibandAudioSignalCount =
+ max(maxMultibandAudioSignalCount,
+ drc_instruction_str->multiband_audio_sig_count);
+ }
+
+ p_drc_gain_dec_structs->audio_band_buffer.non_interleaved_audio = *mem_ptr;
+ *mem_ptr = (pVOID)((SIZE_T)*mem_ptr +
+ (maxMultibandAudioSignalCount * sizeof(FLOAT32*)) + 32);
+
+ for (i = 0; i < maxMultibandAudioSignalCount; i++) {
+ p_drc_gain_dec_structs->audio_band_buffer.non_interleaved_audio[i] =
+ *mem_ptr;
+ *mem_ptr =
+ (pVOID)((SIZE_T)*mem_ptr +
+ (p_drc_params_struct->drc_frame_size * sizeof(FLOAT32)) + 32);
+ }
+ p_drc_gain_dec_structs->audio_band_buffer.multiband_audio_sig_count =
+ maxMultibandAudioSignalCount;
+ p_drc_gain_dec_structs->audio_band_buffer.frame_size =
+ p_drc_params_struct->drc_frame_size;
+ ;
+
+ if (p_drc_params_struct->sub_band_domain_mode == SUBBAND_DOMAIN_MODE_OFF &&
+ p_audio_in_out_buf->audio_delay_samples) {
+ p_audio_in_out_buf->audio_io_buffer_delayed = *mem_ptr;
+ *mem_ptr =
+ (pVOID)((SIZE_T)*mem_ptr +
+ (p_audio_in_out_buf->audio_num_chan * sizeof(FLOAT32*)) + 32);
+ p_audio_in_out_buf->audio_in_out_buf = *mem_ptr;
+ *mem_ptr =
+ (pVOID)((SIZE_T)*mem_ptr +
+ (p_audio_in_out_buf->audio_num_chan * sizeof(FLOAT32*)) + 32);
+
+ for (i = 0; i < p_audio_in_out_buf->audio_num_chan; i++) {
+ p_audio_in_out_buf->audio_io_buffer_delayed[i] = *mem_ptr;
+ *mem_ptr = (pVOID)((SIZE_T)*mem_ptr +
+ ((p_audio_in_out_buf->frame_size +
+ p_audio_in_out_buf->audio_delay_samples) *
+ sizeof(FLOAT32*)) +
+ 32);
+ p_audio_in_out_buf->audio_in_out_buf[i] =
+ &p_audio_in_out_buf->audio_io_buffer_delayed
+ [i][p_audio_in_out_buf->audio_delay_samples];
}
- p_drc_gain_dec_structs->audio_band_buffer.multiband_audio_sig_count = maxMultibandAudioSignalCount;
- p_drc_gain_dec_structs->audio_band_buffer.frame_size = p_drc_params_struct->drc_frame_size;;
-
-
- if (p_drc_params_struct->sub_band_domain_mode == SUBBAND_DOMAIN_MODE_OFF && p_audio_in_out_buf->audio_delay_samples) {
- p_audio_in_out_buf->audio_io_buffer_delayed = *mem_ptr;
- *mem_ptr = (pVOID) ( (SIZE_T)*mem_ptr+(p_audio_in_out_buf->audio_num_chan*sizeof(FLOAT32*))+32);
- p_audio_in_out_buf->audio_in_out_buf = *mem_ptr;
- *mem_ptr =(pVOID) ( (SIZE_T)*mem_ptr+(p_audio_in_out_buf->audio_num_chan*sizeof(FLOAT32*))+32);
-
- for (i=0; i<p_audio_in_out_buf->audio_num_chan; i++) {
- p_audio_in_out_buf->audio_io_buffer_delayed[i]=*mem_ptr;
- *mem_ptr = (pVOID) ((SIZE_T)*mem_ptr+((p_audio_in_out_buf->frame_size + p_audio_in_out_buf->audio_delay_samples)*sizeof(FLOAT32*))+32);
- p_audio_in_out_buf->audio_in_out_buf[i] = &p_audio_in_out_buf->audio_io_buffer_delayed[i][p_audio_in_out_buf->audio_delay_samples];
-
- }
- }
- if (p_drc_params_struct->sub_band_domain_mode != SUBBAND_DOMAIN_MODE_OFF && p_audio_in_out_buf->audio_delay_sub_band_samples) {
-
- p_audio_in_out_buf->audio_buffer_delayed_real = *mem_ptr;
- *mem_ptr = (pVOID) ((SIZE_T)*mem_ptr+(p_audio_in_out_buf->audio_num_chan*sizeof(FLOAT32*))+32);
- p_audio_in_out_buf->audio_buffer_delayed_imag = *mem_ptr;
- *mem_ptr = (pVOID) ( (SIZE_T)*mem_ptr+(p_audio_in_out_buf->audio_num_chan*sizeof(FLOAT32*))+32);
- p_audio_in_out_buf->audio_real_buff = *mem_ptr;
- *mem_ptr = (pVOID) ((SIZE_T)*mem_ptr+(p_audio_in_out_buf->audio_num_chan*sizeof(FLOAT32*))+32);
- p_audio_in_out_buf->audio_imag_buff = *mem_ptr;
- *mem_ptr = (pVOID) ( (SIZE_T)*mem_ptr+(p_audio_in_out_buf->audio_num_chan*sizeof(FLOAT32*))+32);
-
-
- for (i=0; i<p_audio_in_out_buf->audio_num_chan; i++) {
- p_audio_in_out_buf->audio_buffer_delayed_real[i] = *mem_ptr;
- *mem_ptr =(pVOID) ((SIZE_T)*mem_ptr+(( p_audio_in_out_buf->audio_sub_band_frame_size + p_audio_in_out_buf->audio_delay_sub_band_samples)*sizeof(FLOAT32*))+32);
- p_audio_in_out_buf->audio_buffer_delayed_imag[i] = *mem_ptr;
- *mem_ptr =(pVOID) ((SIZE_T)*mem_ptr+(( p_audio_in_out_buf->audio_sub_band_frame_size + p_audio_in_out_buf->audio_delay_sub_band_samples)*sizeof(FLOAT32*))+32);
-
- p_audio_in_out_buf->audio_real_buff[i] = &p_audio_in_out_buf->audio_buffer_delayed_real[i][ p_audio_in_out_buf->audio_delay_sub_band_samples * p_audio_in_out_buf->audio_sub_band_count];
- p_audio_in_out_buf->audio_imag_buff[i] = &p_audio_in_out_buf->audio_buffer_delayed_imag[i][ p_audio_in_out_buf->audio_delay_sub_band_samples * p_audio_in_out_buf->audio_sub_band_count];
- }
+ }
+ if (p_drc_params_struct->sub_band_domain_mode != SUBBAND_DOMAIN_MODE_OFF &&
+ p_audio_in_out_buf->audio_delay_sub_band_samples) {
+ p_audio_in_out_buf->audio_buffer_delayed_real = *mem_ptr;
+ *mem_ptr =
+ (pVOID)((SIZE_T)*mem_ptr +
+ (p_audio_in_out_buf->audio_num_chan * sizeof(FLOAT32*)) + 32);
+ p_audio_in_out_buf->audio_buffer_delayed_imag = *mem_ptr;
+ *mem_ptr =
+ (pVOID)((SIZE_T)*mem_ptr +
+ (p_audio_in_out_buf->audio_num_chan * sizeof(FLOAT32*)) + 32);
+ p_audio_in_out_buf->audio_real_buff = *mem_ptr;
+ *mem_ptr =
+ (pVOID)((SIZE_T)*mem_ptr +
+ (p_audio_in_out_buf->audio_num_chan * sizeof(FLOAT32*)) + 32);
+ p_audio_in_out_buf->audio_imag_buff = *mem_ptr;
+ *mem_ptr =
+ (pVOID)((SIZE_T)*mem_ptr +
+ (p_audio_in_out_buf->audio_num_chan * sizeof(FLOAT32*)) + 32);
+
+ for (i = 0; i < p_audio_in_out_buf->audio_num_chan; i++) {
+ p_audio_in_out_buf->audio_buffer_delayed_real[i] = *mem_ptr;
+ *mem_ptr = (pVOID)((SIZE_T)*mem_ptr +
+ ((p_audio_in_out_buf->audio_sub_band_frame_size +
+ p_audio_in_out_buf->audio_delay_sub_band_samples) *
+ sizeof(FLOAT32*)) +
+ 32);
+ p_audio_in_out_buf->audio_buffer_delayed_imag[i] = *mem_ptr;
+ *mem_ptr = (pVOID)((SIZE_T)*mem_ptr +
+ ((p_audio_in_out_buf->audio_sub_band_frame_size +
+ p_audio_in_out_buf->audio_delay_sub_band_samples) *
+ sizeof(FLOAT32*)) +
+ 32);
+
+ p_audio_in_out_buf->audio_real_buff[i] =
+ &p_audio_in_out_buf->audio_buffer_delayed_real
+ [i][p_audio_in_out_buf->audio_delay_sub_band_samples *
+ p_audio_in_out_buf->audio_sub_band_count];
+ p_audio_in_out_buf->audio_imag_buff[i] =
+ &p_audio_in_out_buf->audio_buffer_delayed_imag
+ [i][p_audio_in_out_buf->audio_delay_sub_band_samples *
+ p_audio_in_out_buf->audio_sub_band_count];
}
+ }
- return err_code;
+ return err_code;
}
-
-
-
-
-IA_ERRORCODE impd_drc_process_time_domain( ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
- ia_drc_config* pstr_drc_config,
- ia_drc_gain_struct* pstr_drc_gain,
- FLOAT32* audio_in_out_buf[],
- FLOAT32 loudness_normalization_gain_db,
- FLOAT32 boost,
- FLOAT32 compress,
- WORD32 drc_characteristic_target)
-{
- WORD32 sel_drc_index;
- IA_ERRORCODE err_code = 0;
- WORD32 passThru;
- ia_drc_instructions_struct* str_drc_instruction_str = pstr_drc_config->str_drc_instruction_str;
-
- if (p_drc_gain_dec_structs->eq_set)
- {
- WORD32 ch;
- FLOAT32* audio_channel;
- for (ch=0; ch<p_drc_gain_dec_structs->eq_set->audio_num_chan; ch++)
- {
- audio_channel = audio_in_out_buf[ch];
-
- impd_process_eq_set_time_domain(p_drc_gain_dec_structs->eq_set, ch, audio_channel, audio_channel, p_drc_gain_dec_structs->ia_drc_params_struct.drc_frame_size);
-
- }
+IA_ERRORCODE impd_drc_process_time_domain(
+ ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
+ ia_drc_config* pstr_drc_config, ia_drc_gain_struct* pstr_drc_gain,
+ FLOAT32* audio_in_out_buf[], FLOAT32 loudness_normalization_gain_db,
+ FLOAT32 boost, FLOAT32 compress, WORD32 drc_characteristic_target) {
+ WORD32 sel_drc_index;
+ IA_ERRORCODE err_code = 0;
+ WORD32 passThru;
+ ia_drc_instructions_struct* str_drc_instruction_str =
+ pstr_drc_config->str_drc_instruction_str;
+
+ if (p_drc_gain_dec_structs->eq_set) {
+ WORD32 ch;
+ FLOAT32* audio_channel;
+ for (ch = 0; ch < p_drc_gain_dec_structs->eq_set->audio_num_chan; ch++) {
+ audio_channel = audio_in_out_buf[ch];
+
+ impd_process_eq_set_time_domain(
+ p_drc_gain_dec_structs->eq_set, ch, audio_channel, audio_channel,
+ p_drc_gain_dec_structs->ia_drc_params_struct.drc_frame_size);
+ }
+ }
+
+ err_code = impd_store_audio_io_buffer_time(
+ audio_in_out_buf, &p_drc_gain_dec_structs->audio_in_out_buf);
+ if (err_code != IA_NO_ERROR) return (err_code);
+
+ if (pstr_drc_config->apply_drc) {
+ for (sel_drc_index = 0;
+ sel_drc_index <
+ p_drc_gain_dec_structs->ia_drc_params_struct.drc_set_counter;
+ sel_drc_index++) {
+ err_code = impd_get_drc_gain(
+ p_drc_gain_dec_structs, pstr_drc_config, pstr_drc_gain, compress,
+ boost, drc_characteristic_target, loudness_normalization_gain_db,
+ sel_drc_index, &p_drc_gain_dec_structs->drc_gain_buffers);
+ if (err_code != IA_NO_ERROR) return (err_code);
}
- err_code = impd_store_audio_io_buffer_time(audio_in_out_buf,
- &p_drc_gain_dec_structs->audio_in_out_buf);
- if(err_code!=IA_NO_ERROR)
- return (err_code);
-
- if (pstr_drc_config->apply_drc)
- {
- for (sel_drc_index=0; sel_drc_index<p_drc_gain_dec_structs->ia_drc_params_struct.drc_set_counter; sel_drc_index++)
- {
- err_code = impd_get_drc_gain (p_drc_gain_dec_structs,
- pstr_drc_config,
- pstr_drc_gain,
- compress,
- boost,
- drc_characteristic_target,
- loudness_normalization_gain_db,
- sel_drc_index,
- &p_drc_gain_dec_structs->drc_gain_buffers);
- if(err_code!=IA_NO_ERROR)
- return (err_code);
- }
-
- if (p_drc_gain_dec_structs->ia_drc_params_struct.drc_set_counter == 0)
- {
- err_code = impd_retrieve_audio_io_buffer_time(audio_in_out_buf,
- &p_drc_gain_dec_structs->audio_in_out_buf);
- if (err_code) return (err_code);
- } else
- {
-
- for (sel_drc_index=0; sel_drc_index<p_drc_gain_dec_structs->ia_drc_params_struct.drc_set_counter; sel_drc_index++)
- {
- if (p_drc_gain_dec_structs->ia_drc_params_struct.multiband_sel_drc_idx == sel_drc_index)
- {
- passThru = 0;
- }
- else
- {
- passThru = 1;
- }
- err_code = impd_filter_banks_process(str_drc_instruction_str,
- p_drc_gain_dec_structs->ia_drc_params_struct.sel_drc_array[sel_drc_index].drc_instructions_index,
- &p_drc_gain_dec_structs->ia_drc_params_struct,
- p_drc_gain_dec_structs->audio_in_out_buf.audio_io_buffer_delayed,
- &p_drc_gain_dec_structs->audio_band_buffer,
- &p_drc_gain_dec_structs->ia_filter_banks_struct,
- passThru);
- if(err_code!=IA_NO_ERROR)
- return (err_code);
-
- err_code = impd_apply_gains_and_add(str_drc_instruction_str,
- p_drc_gain_dec_structs->ia_drc_params_struct.sel_drc_array[sel_drc_index].drc_instructions_index,
- &p_drc_gain_dec_structs->ia_drc_params_struct,
- &(p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[sel_drc_index]),
- p_drc_gain_dec_structs->shape_filter_block,
- p_drc_gain_dec_structs->audio_band_buffer.non_interleaved_audio,
- audio_in_out_buf,
- 1);
- if(err_code!=IA_NO_ERROR)
- return (err_code);
-
- }
+ if (p_drc_gain_dec_structs->ia_drc_params_struct.drc_set_counter == 0) {
+ err_code = impd_retrieve_audio_io_buffer_time(
+ audio_in_out_buf, &p_drc_gain_dec_structs->audio_in_out_buf);
+ if (err_code) return (err_code);
+ } else {
+ for (sel_drc_index = 0;
+ sel_drc_index <
+ p_drc_gain_dec_structs->ia_drc_params_struct.drc_set_counter;
+ sel_drc_index++) {
+ if (p_drc_gain_dec_structs->ia_drc_params_struct
+ .multiband_sel_drc_idx == sel_drc_index) {
+ passThru = 0;
+ } else {
+ passThru = 1;
}
+ err_code = impd_filter_banks_process(
+ str_drc_instruction_str,
+ p_drc_gain_dec_structs->ia_drc_params_struct
+ .sel_drc_array[sel_drc_index]
+ .drc_instructions_index,
+ &p_drc_gain_dec_structs->ia_drc_params_struct,
+ p_drc_gain_dec_structs->audio_in_out_buf.audio_io_buffer_delayed,
+ &p_drc_gain_dec_structs->audio_band_buffer,
+ &p_drc_gain_dec_structs->ia_filter_banks_struct, passThru);
+ if (err_code != IA_NO_ERROR) return (err_code);
+
+ err_code = impd_apply_gains_and_add(
+ str_drc_instruction_str,
+ p_drc_gain_dec_structs->ia_drc_params_struct
+ .sel_drc_array[sel_drc_index]
+ .drc_instructions_index,
+ &p_drc_gain_dec_structs->ia_drc_params_struct,
+ &(p_drc_gain_dec_structs->drc_gain_buffers
+ .pstr_gain_buf[sel_drc_index]),
+ p_drc_gain_dec_structs->shape_filter_block,
+ p_drc_gain_dec_structs->audio_band_buffer.non_interleaved_audio,
+ audio_in_out_buf, 1);
+ if (err_code != IA_NO_ERROR) return (err_code);
+ }
}
+ }
- err_code = impd_advance_audio_io_buffer_time(&p_drc_gain_dec_structs->audio_in_out_buf);
- if(err_code!=IA_NO_ERROR)
- return (err_code);
+ err_code = impd_advance_audio_io_buffer_time(
+ &p_drc_gain_dec_structs->audio_in_out_buf);
+ if (err_code != IA_NO_ERROR) return (err_code);
- return err_code;
+ return err_code;
}
-
-IA_ERRORCODE impd_drc_process_freq_domain( ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
- ia_drc_config* pstr_drc_config,
- ia_drc_gain_struct* pstr_drc_gain,
- FLOAT32* audio_real_buff[],
- FLOAT32* audio_imag_buff[],
- FLOAT32 loudness_normalization_gain_db,
- FLOAT32 boost,
- FLOAT32 compress,
- WORD32 drc_characteristic_target)
-{
- WORD32 sel_drc_index;
- IA_ERRORCODE err_code = 0;
- ia_drc_instructions_struct* str_drc_instruction_str = pstr_drc_config->str_drc_instruction_str;
-
- if (p_drc_gain_dec_structs->eq_set)
- {
- WORD32 ch;
-
- for (ch=0; ch<p_drc_gain_dec_structs->eq_set->audio_num_chan; ch++)
- {
- err_code = impd_process_eq_set_subband_domain(p_drc_gain_dec_structs->eq_set,
- ch,
- audio_real_buff[ch],
- audio_imag_buff[ch]);
- if(err_code!=IA_NO_ERROR)
- return (err_code);
- }
+IA_ERRORCODE impd_drc_process_freq_domain(
+ ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
+ ia_drc_config* pstr_drc_config, ia_drc_gain_struct* pstr_drc_gain,
+ FLOAT32* audio_real_buff[], FLOAT32* audio_imag_buff[],
+ FLOAT32 loudness_normalization_gain_db, FLOAT32 boost, FLOAT32 compress,
+ WORD32 drc_characteristic_target) {
+ WORD32 sel_drc_index;
+ IA_ERRORCODE err_code = 0;
+ ia_drc_instructions_struct* str_drc_instruction_str =
+ pstr_drc_config->str_drc_instruction_str;
+
+ if (p_drc_gain_dec_structs->eq_set) {
+ WORD32 ch;
+
+ for (ch = 0; ch < p_drc_gain_dec_structs->eq_set->audio_num_chan; ch++) {
+ err_code = impd_process_eq_set_subband_domain(
+ p_drc_gain_dec_structs->eq_set, ch, audio_real_buff[ch],
+ audio_imag_buff[ch]);
+ if (err_code != IA_NO_ERROR) return (err_code);
}
- err_code = impd_store_audio_io_buffer_freq(audio_real_buff,
- audio_imag_buff,
- &p_drc_gain_dec_structs->audio_in_out_buf);
- if(err_code!=IA_NO_ERROR)
- return (err_code);
-
- if (pstr_drc_config->apply_drc)
- {
- for (sel_drc_index=0; sel_drc_index<p_drc_gain_dec_structs->ia_drc_params_struct.drc_set_counter; sel_drc_index++)
- {
-
- err_code = impd_get_drc_gain (p_drc_gain_dec_structs,
- pstr_drc_config,
- pstr_drc_gain,
- compress,
- boost,
- drc_characteristic_target,
- loudness_normalization_gain_db,
- sel_drc_index,
- &p_drc_gain_dec_structs->drc_gain_buffers);
- if(err_code!=IA_NO_ERROR)
- return (err_code);
- }
-
- if (p_drc_gain_dec_structs->ia_drc_params_struct.drc_set_counter == 0)
- {
- err_code = impd_retrieve_audio_buffer_freq(audio_real_buff,
- audio_imag_buff,
- &p_drc_gain_dec_structs->audio_in_out_buf);
- if(err_code!=IA_NO_ERROR)
- return (err_code);
- } else
- {
- for (sel_drc_index=0; sel_drc_index<p_drc_gain_dec_structs->ia_drc_params_struct.drc_set_counter; sel_drc_index++)
- {
- err_code = impd_apply_gains_subband(str_drc_instruction_str,
- p_drc_gain_dec_structs->ia_drc_params_struct.sel_drc_array[sel_drc_index].drc_instructions_index,
- &p_drc_gain_dec_structs->ia_drc_params_struct,
- &(p_drc_gain_dec_structs->drc_gain_buffers.pstr_gain_buf[sel_drc_index]),
- &p_drc_gain_dec_structs->str_overlap_params,
- p_drc_gain_dec_structs->audio_in_out_buf.audio_buffer_delayed_real,
- p_drc_gain_dec_structs->audio_in_out_buf.audio_buffer_delayed_imag,
- audio_real_buff,
- audio_imag_buff);
- if(err_code!=IA_NO_ERROR)
- return (err_code);
- }
- }
+ }
+ err_code = impd_store_audio_io_buffer_freq(
+ audio_real_buff, audio_imag_buff,
+ &p_drc_gain_dec_structs->audio_in_out_buf);
+ if (err_code != IA_NO_ERROR) return (err_code);
+
+ if (pstr_drc_config->apply_drc) {
+ for (sel_drc_index = 0;
+ sel_drc_index <
+ p_drc_gain_dec_structs->ia_drc_params_struct.drc_set_counter;
+ sel_drc_index++) {
+ err_code = impd_get_drc_gain(
+ p_drc_gain_dec_structs, pstr_drc_config, pstr_drc_gain, compress,
+ boost, drc_characteristic_target, loudness_normalization_gain_db,
+ sel_drc_index, &p_drc_gain_dec_structs->drc_gain_buffers);
+ if (err_code != IA_NO_ERROR) return (err_code);
}
- err_code = impd_advance_audio_buff_freq(&p_drc_gain_dec_structs->audio_in_out_buf);
-
- return err_code;
-}
-
-VOID impd_get_parametric_drc_delay(ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
- ia_drc_config* pstr_drc_config,
- WORD32* parametric_drc_delay,
- WORD32* parametric_drc_delay_max)
-{
- *parametric_drc_delay = p_drc_gain_dec_structs->ia_drc_params_struct.parametric_drc_delay;
-
- if (pstr_drc_config->str_drc_config_ext.parametric_drc_present && pstr_drc_config->str_drc_config_ext.str_drc_coeff_param_drc.parametric_drc_delay_max_present) {
- *parametric_drc_delay_max = pstr_drc_config->str_drc_config_ext.str_drc_coeff_param_drc.parametric_drc_delay_max;
- } else if (pstr_drc_config->str_drc_config_ext.parametric_drc_present == 0) {
- *parametric_drc_delay_max = 0;
+ if (p_drc_gain_dec_structs->ia_drc_params_struct.drc_set_counter == 0) {
+ err_code = impd_retrieve_audio_buffer_freq(
+ audio_real_buff, audio_imag_buff,
+ &p_drc_gain_dec_structs->audio_in_out_buf);
+ if (err_code != IA_NO_ERROR) return (err_code);
} else {
- *parametric_drc_delay_max = -1;
+ for (sel_drc_index = 0;
+ sel_drc_index <
+ p_drc_gain_dec_structs->ia_drc_params_struct.drc_set_counter;
+ sel_drc_index++) {
+ err_code = impd_apply_gains_subband(
+ str_drc_instruction_str,
+ p_drc_gain_dec_structs->ia_drc_params_struct
+ .sel_drc_array[sel_drc_index]
+ .drc_instructions_index,
+ &p_drc_gain_dec_structs->ia_drc_params_struct,
+ &(p_drc_gain_dec_structs->drc_gain_buffers
+ .pstr_gain_buf[sel_drc_index]),
+ &p_drc_gain_dec_structs->str_overlap_params,
+ p_drc_gain_dec_structs->audio_in_out_buf.audio_buffer_delayed_real,
+ p_drc_gain_dec_structs->audio_in_out_buf.audio_buffer_delayed_imag,
+ audio_real_buff, audio_imag_buff);
+ if (err_code != IA_NO_ERROR) return (err_code);
+ }
}
+ }
- return;
-}
-
-VOID impd_get_eq_delay(ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
- ia_drc_config* pstr_drc_config,
- WORD32* eq_delay,
- WORD32* eq_delay_max)
-{
- *eq_delay = p_drc_gain_dec_structs->ia_drc_params_struct.eq_delay;
-
- if (pstr_drc_config->str_drc_config_ext.eq_flag && pstr_drc_config->str_drc_config_ext.str_eq_coeff.eq_delay_max_present) {
- *eq_delay_max = pstr_drc_config->str_drc_config_ext.str_eq_coeff.eq_delay_max;
- } else if (pstr_drc_config->str_drc_config_ext.eq_flag == 0) {
- *eq_delay_max = 0;
- } else {
- *eq_delay_max = -1;
- }
+ err_code =
+ impd_advance_audio_buff_freq(&p_drc_gain_dec_structs->audio_in_out_buf);
- return;
+ return err_code;
}
+VOID impd_get_parametric_drc_delay(
+ ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
+ ia_drc_config* pstr_drc_config, WORD32* parametric_drc_delay,
+ WORD32* parametric_drc_delay_max) {
+ *parametric_drc_delay =
+ p_drc_gain_dec_structs->ia_drc_params_struct.parametric_drc_delay;
+
+ if (pstr_drc_config->str_drc_config_ext.parametric_drc_present &&
+ pstr_drc_config->str_drc_config_ext.str_drc_coeff_param_drc
+ .parametric_drc_delay_max_present) {
+ *parametric_drc_delay_max =
+ pstr_drc_config->str_drc_config_ext.str_drc_coeff_param_drc
+ .parametric_drc_delay_max;
+ } else if (pstr_drc_config->str_drc_config_ext.parametric_drc_present == 0) {
+ *parametric_drc_delay_max = 0;
+ } else {
+ *parametric_drc_delay_max = -1;
+ }
+
+ return;
+}
+VOID impd_get_eq_delay(ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
+ ia_drc_config* pstr_drc_config, WORD32* eq_delay,
+ WORD32* eq_delay_max) {
+ *eq_delay = p_drc_gain_dec_structs->ia_drc_params_struct.eq_delay;
+
+ if (pstr_drc_config->str_drc_config_ext.eq_flag &&
+ pstr_drc_config->str_drc_config_ext.str_eq_coeff.eq_delay_max_present) {
+ *eq_delay_max =
+ pstr_drc_config->str_drc_config_ext.str_eq_coeff.eq_delay_max;
+ } else if (pstr_drc_config->str_drc_config_ext.eq_flag == 0) {
+ *eq_delay_max = 0;
+ } else {
+ *eq_delay_max = -1;
+ }
+
+ return;
+}
diff --git a/decoder/drc_src/impd_drc_gain_decoder.h b/decoder/drc_src/impd_drc_gain_decoder.h
index e38641d..0c5ae43 100644
--- a/decoder/drc_src/impd_drc_gain_decoder.h
+++ b/decoder/drc_src/impd_drc_gain_decoder.h
@@ -20,88 +20,67 @@
#ifndef IMPD_DRC_GAIN_DECODER2_H
#define IMPD_DRC_GAIN_DECODER2_H
-
#ifndef M_PI
#define M_PI (3.14159265358979323846)
#endif
-typedef struct ia_drc_gain_dec_struct
-{
- WORD32 audio_num_chan;
- ia_drc_params_struct ia_drc_params_struct;
- ia_drc_gain_buffers_struct drc_gain_buffers;
- ia_audio_band_buffer_struct audio_band_buffer;
- ia_overlap_params_struct str_overlap_params;
- ia_filter_banks_struct ia_filter_banks_struct;
- ia_audio_in_out_buf audio_in_out_buf;
- ia_parametric_drc_params_struct parametricdrc_params;
- shape_filter_block shape_filter_block[CHANNEL_GROUP_COUNT_MAX];
- ia_eq_set_struct* eq_set;
-}ia_drc_gain_dec_struct;
-
-
-WORD32 impd_init_drc_decode( WORD32 frame_size,
- WORD32 sample_rate,
- WORD32 gain_delay_samples,
- WORD32 delay_mode,
- WORD32 sub_band_domain_mode,
- ia_drc_gain_dec_struct* p_drc_gain_dec_structs);
-
-WORD32 impd_init_drc_decode_post_config( WORD32 audio_num_chan,
- WORD32* drc_set_id_processed,
- WORD32* downmix_id_processed,
- WORD32 num_sets_processed,
- WORD32 eq_set_id_processed,
-
- ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
- ia_drc_config * pstr_drc_config,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- pVOID *mem_ptr
-
- );
-
-WORD32 impd_drc_process_time_domain( ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
- ia_drc_config* pstr_drc_config,
- ia_drc_gain_struct* pstr_drc_gain,
- FLOAT32* audio_in_out_buf[],
- FLOAT32 loudness_normalization_gain_db,
- FLOAT32 boost,
- FLOAT32 compress,
- WORD32 drc_characteristic);
-
-WORD32 impd_drc_process_freq_domain(ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
- ia_drc_config* pstr_drc_config,
- ia_drc_gain_struct* pstr_drc_gain,
- FLOAT32* audio_real_buff[],
- FLOAT32* audio_imag_buff[],
- FLOAT32 loudness_normalization_gain_db,
- FLOAT32 boost,
- FLOAT32 compress,
- WORD32 drc_characteristic);
-
-VOID impd_get_parametric_drc_delay(ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
- ia_drc_config* pstr_drc_config,
- WORD32* parametric_drc_delay,
- WORD32* parametric_drc_delay_max);
-
-VOID impd_get_eq_delay(ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
- ia_drc_config* pstr_drc_config,
- WORD32* eq_delay,
- WORD32* eq_delay_max);
+typedef struct ia_drc_gain_dec_struct {
+ WORD32 audio_num_chan;
+ ia_drc_params_struct ia_drc_params_struct;
+ ia_drc_gain_buffers_struct drc_gain_buffers;
+ ia_audio_band_buffer_struct audio_band_buffer;
+ ia_overlap_params_struct str_overlap_params;
+ ia_filter_banks_struct ia_filter_banks_struct;
+ ia_audio_in_out_buf audio_in_out_buf;
+ ia_parametric_drc_params_struct parametricdrc_params;
+ shape_filter_block shape_filter_block[CHANNEL_GROUP_COUNT_MAX];
+ ia_eq_set_struct* eq_set;
+} ia_drc_gain_dec_struct;
+
+WORD32 impd_init_drc_decode(WORD32 frame_size, WORD32 sample_rate,
+ WORD32 gain_delay_samples, WORD32 delay_mode,
+ WORD32 sub_band_domain_mode,
+ ia_drc_gain_dec_struct* p_drc_gain_dec_structs);
+
+WORD32 impd_init_drc_decode_post_config(
+ WORD32 audio_num_chan, WORD32* drc_set_id_processed,
+ WORD32* downmix_id_processed, WORD32 num_sets_processed,
+ WORD32 eq_set_id_processed,
+
+ ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
+ ia_drc_config* pstr_drc_config,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info, pVOID* mem_ptr
+
+ );
+
+WORD32 impd_drc_process_time_domain(
+ ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
+ ia_drc_config* pstr_drc_config, ia_drc_gain_struct* pstr_drc_gain,
+ FLOAT32* audio_in_out_buf[], FLOAT32 loudness_normalization_gain_db,
+ FLOAT32 boost, FLOAT32 compress, WORD32 drc_characteristic);
+
+WORD32 impd_drc_process_freq_domain(
+ ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
+ ia_drc_config* pstr_drc_config, ia_drc_gain_struct* pstr_drc_gain,
+ FLOAT32* audio_real_buff[], FLOAT32* audio_imag_buff[],
+ FLOAT32 loudness_normalization_gain_db, FLOAT32 boost, FLOAT32 compress,
+ WORD32 drc_characteristic);
+
+VOID impd_get_parametric_drc_delay(
+ ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
+ ia_drc_config* pstr_drc_config, WORD32* parametric_drc_delay,
+ WORD32* parametric_drc_delay_max);
+
+VOID impd_get_eq_delay(ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
+ ia_drc_config* pstr_drc_config, WORD32* eq_delay,
+ WORD32* eq_delay_max);
WORD32
-impd_get_drc_gain (ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
- ia_drc_config* pstr_drc_config,
- ia_drc_gain_struct* pstr_drc_gain,
- FLOAT32 compress,
- FLOAT32 boost,
- WORD32 characteristic_index,
- FLOAT32 loudness_normalization_gain_db,
- WORD32 sub_drc_index,
- ia_drc_gain_buffers_struct* drc_gain_buffers);
-
-
-
-
+impd_get_drc_gain(ia_drc_gain_dec_struct* p_drc_gain_dec_structs,
+ ia_drc_config* pstr_drc_config,
+ ia_drc_gain_struct* pstr_drc_gain, FLOAT32 compress,
+ FLOAT32 boost, WORD32 characteristic_index,
+ FLOAT32 loudness_normalization_gain_db, WORD32 sub_drc_index,
+ ia_drc_gain_buffers_struct* drc_gain_buffers);
#endif
diff --git a/decoder/drc_src/impd_drc_hashdefines.h b/decoder/drc_src/impd_drc_hashdefines.h
index 09a8c2f..1edf67d 100644
--- a/decoder/drc_src/impd_drc_hashdefines.h
+++ b/decoder/drc_src/impd_drc_hashdefines.h
@@ -20,11 +20,10 @@
#ifndef IMPD_DRC_HASHDEFINES_H
#define IMPD_DRC_HASHDEFINES_H
-
-#define DEC_TYPE_TD 0
-#define DEC_TYPE_TD_QMF64 1
-#define DEC_TYPE_QMF64 2
-#define DEC_TYPE_STFT256 3
-#define BITSTREAM_FILE_FORMAT_SPLIT 1
+#define DEC_TYPE_TD 0
+#define DEC_TYPE_TD_QMF64 1
+#define DEC_TYPE_QMF64 2
+#define DEC_TYPE_STFT256 3
+#define BITSTREAM_FILE_FORMAT_SPLIT 1
#endif
diff --git a/decoder/drc_src/impd_drc_host_params.c b/decoder/drc_src/impd_drc_host_params.c
index 1997eca..0cfe0df 100644
--- a/decoder/drc_src/impd_drc_host_params.c
+++ b/decoder/drc_src/impd_drc_host_params.c
@@ -27,134 +27,171 @@
#include "impd_drc_filter_bank.h"
#include "impd_drc_rom.h"
-
-WORD32 impd_set_default_params_selection_process(ia_drc_sel_proc_params_struct *pstr_drc_sel_proc_params)
-{
- pstr_drc_sel_proc_params->base_channel_count = -1;
- pstr_drc_sel_proc_params->base_layout = -1;
- pstr_drc_sel_proc_params->target_config_request_type = 0;
- pstr_drc_sel_proc_params->num_downmix_id_requests = 0;
-
- pstr_drc_sel_proc_params->album_mode = 0;
-
- pstr_drc_sel_proc_params->peak_limiter = 1;
-
- pstr_drc_sel_proc_params->loudness_normalization_on = 0;
- pstr_drc_sel_proc_params->target_loudness = -24.0f;
-
- pstr_drc_sel_proc_params->loudness_deviation_max = LOUDNESS_DEVIATION_MAX_DEFAULT;
-
- pstr_drc_sel_proc_params->loudness_measurement_method = USER_METHOD_DEFINITION_DEFAULT;
- pstr_drc_sel_proc_params->loudness_measurement_system = USER_MEASUREMENT_SYSTEM_DEFAULT;
- pstr_drc_sel_proc_params->loudness_measurement_pre_proc = USER_LOUDNESS_PREPROCESSING_DEFAULT;
- pstr_drc_sel_proc_params->device_cut_off_frequency = 500;
- pstr_drc_sel_proc_params->loudness_norm_gain_db_max = LOUDNESS_NORMALIZATION_GAIN_MAX_DEFAULT;
- pstr_drc_sel_proc_params->loudness_norm_gain_modification_db = 0.0f;
- pstr_drc_sel_proc_params->output_peak_level_max = 0.0f;
- if (pstr_drc_sel_proc_params->peak_limiter == 1) {
-
- pstr_drc_sel_proc_params->output_peak_level_max = 6.0f;
-
- }
-
- pstr_drc_sel_proc_params->dynamic_range_control_on = 1;
- pstr_drc_sel_proc_params->num_bands_supported = 4;
- pstr_drc_sel_proc_params->num_drc_feature_requests = 0;
-
-
- pstr_drc_sel_proc_params->boost = 1.f;
- pstr_drc_sel_proc_params->compress = 1.f;
- pstr_drc_sel_proc_params->drc_characteristic_target = 0;
-
- return 0;
+WORD32 impd_set_default_params_selection_process(
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params) {
+ pstr_drc_sel_proc_params->base_channel_count = -1;
+ pstr_drc_sel_proc_params->base_layout = -1;
+ pstr_drc_sel_proc_params->target_config_request_type = 0;
+ pstr_drc_sel_proc_params->num_downmix_id_requests = 0;
+
+ pstr_drc_sel_proc_params->album_mode = 0;
+
+ pstr_drc_sel_proc_params->peak_limiter = 1;
+
+ pstr_drc_sel_proc_params->loudness_normalization_on = 0;
+ pstr_drc_sel_proc_params->target_loudness = -24.0f;
+
+ pstr_drc_sel_proc_params->loudness_deviation_max =
+ LOUDNESS_DEVIATION_MAX_DEFAULT;
+
+ pstr_drc_sel_proc_params->loudness_measurement_method =
+ USER_METHOD_DEFINITION_DEFAULT;
+ pstr_drc_sel_proc_params->loudness_measurement_system =
+ USER_MEASUREMENT_SYSTEM_DEFAULT;
+ pstr_drc_sel_proc_params->loudness_measurement_pre_proc =
+ USER_LOUDNESS_PREPROCESSING_DEFAULT;
+ pstr_drc_sel_proc_params->device_cut_off_frequency = 500;
+ pstr_drc_sel_proc_params->loudness_norm_gain_db_max =
+ LOUDNESS_NORMALIZATION_GAIN_MAX_DEFAULT;
+ pstr_drc_sel_proc_params->loudness_norm_gain_modification_db = 0.0f;
+ pstr_drc_sel_proc_params->output_peak_level_max = 0.0f;
+ if (pstr_drc_sel_proc_params->peak_limiter == 1) {
+ pstr_drc_sel_proc_params->output_peak_level_max = 6.0f;
+ }
+
+ pstr_drc_sel_proc_params->dynamic_range_control_on = 1;
+ pstr_drc_sel_proc_params->num_bands_supported = 4;
+ pstr_drc_sel_proc_params->num_drc_feature_requests = 0;
+
+ pstr_drc_sel_proc_params->boost = 1.f;
+ pstr_drc_sel_proc_params->compress = 1.f;
+ pstr_drc_sel_proc_params->drc_characteristic_target = 0;
+
+ return 0;
}
-WORD32 impd_set_custom_params(const WORD32 param_set_idx,
- ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params)
-{
- WORD32 i, k;
-
- const ia_loc_sys_interface_struct* system_interface = &(loc_sys_interface[param_set_idx-1]);
-
- const ia_loc_loudness_norm_ctrl_interface_struct* loudness_norm_ctrl_interface = &(loc_loudness_norm_ctrl_interface[param_set_idx-1]);
- const ia_loc_loudness_norm_param_interface_struct* loudness_norm_param_interface = &(loc_loudness_norm_param_interface[param_set_idx-1]);
-
- const ia_loc_drc_interface_struct* drc_ctrl_interface = &(loc_dyn_range_ctrl_interface[param_set_idx-1]);
- const ia_loc_requested_drc_effect_struct* requested_drc_effect_type = &(loc_requested_drc_effect_type_str[param_set_idx-1]);
- const ia_loc_drc_parameter_interface_struct* drc_parameter_interface = &(loc_drc_parameter_interface[param_set_idx-1]);
-
- pstr_drc_sel_proc_params->target_config_request_type = system_interface->target_config_request_type;
- switch (system_interface->target_config_request_type) {
- case 1:
- pstr_drc_sel_proc_params->requested_target_layout = system_interface->requested_target_layout;
- break;
- case 2:
- pstr_drc_sel_proc_params->requested_target_ch_count = system_interface->requested_target_ch_count;
- break;
- case 0:
- default:
- pstr_drc_sel_proc_params->num_downmix_id_requests = system_interface->num_downmix_id_requests;
- for (i=0; i<system_interface->num_downmix_id_requests; i++) {
- pstr_drc_sel_proc_params->requested_dwnmix_id[i] = system_interface->requested_dwnmix_id[i];
- }
- break;
- }
-
- pstr_drc_sel_proc_params->loudness_normalization_on = loudness_norm_ctrl_interface->loudness_normalization_on;
- pstr_drc_sel_proc_params->target_loudness = loudness_norm_ctrl_interface->target_loudness;
-
- pstr_drc_sel_proc_params->album_mode = loudness_norm_param_interface->album_mode;
- pstr_drc_sel_proc_params->peak_limiter = loudness_norm_param_interface->peak_limiter;
- pstr_drc_sel_proc_params->loudness_deviation_max = loudness_norm_param_interface->loudness_deviation_max;
- pstr_drc_sel_proc_params->loudness_measurement_method = loudness_norm_param_interface->loudness_measurement_method;
- pstr_drc_sel_proc_params->loudness_measurement_system = loudness_norm_param_interface->loudness_measurement_system;
- pstr_drc_sel_proc_params->loudness_measurement_pre_proc = loudness_norm_param_interface->loudness_measurement_pre_proc;
- pstr_drc_sel_proc_params->device_cut_off_frequency= loudness_norm_param_interface->device_cut_off_frequency;
- pstr_drc_sel_proc_params->loudness_norm_gain_db_max = loudness_norm_param_interface->loudness_norm_gain_db_max;
- pstr_drc_sel_proc_params->loudness_norm_gain_modification_db = loudness_norm_param_interface->loudness_norm_gain_modification_db;
- pstr_drc_sel_proc_params->output_peak_level_max = loudness_norm_param_interface->output_peak_level_max;
-
- pstr_drc_sel_proc_params->dynamic_range_control_on = drc_ctrl_interface->dynamic_range_control_on;
- pstr_drc_sel_proc_params->num_drc_feature_requests = drc_ctrl_interface->num_drc_feature_requests;
- for (i=0; i<drc_ctrl_interface->num_drc_feature_requests; i++)
- {
- pstr_drc_sel_proc_params->drc_feature_req_type[i] = drc_ctrl_interface->drc_feature_req_type[i];
- switch (drc_ctrl_interface->drc_feature_req_type[i])
- {
- case MATCH_EFFECT_TYPE:
- pstr_drc_sel_proc_params->requested_num_drc_effects[i] = requested_drc_effect_type->requested_num_drc_effects;
- pstr_drc_sel_proc_params->desired_num_drc_effects_of_requested[i] = requested_drc_effect_type->desired_num_drc_effects_of_requested;
- for (k=0; k<requested_drc_effect_type->requested_num_drc_effects; k++)
- {
- pstr_drc_sel_proc_params->requested_drc_effect_type[i][k] = requested_drc_effect_type->requested_drc_effect_type[k];
- }
- break;
- case MATCH_DYNAMIC_RANGE:
- pstr_drc_sel_proc_params->requested_dyn_range_measur_type[i] = drc_ctrl_interface->requested_dyn_rng_measurement_type;
- pstr_drc_sel_proc_params->requested_dyn_range_range_flag[i] = drc_ctrl_interface->requested_dyn_range_is_single_val_flag;
- pstr_drc_sel_proc_params->requested_dyn_range_value[i] = drc_ctrl_interface->requested_dyn_range_value;
- pstr_drc_sel_proc_params->requested_dyn_range_min_val[i] = drc_ctrl_interface->requested_dyn_range_min_val;
- pstr_drc_sel_proc_params->requested_dyn_range_max_val[i] = drc_ctrl_interface->requested_dyn_range_max_val;
- break;
- case MATCH_DRC_CHARACTERISTIC:
- pstr_drc_sel_proc_params->requested_drc_characteristic[i] = drc_ctrl_interface->requested_drc_characteristic;
- break;
- default:
- return (UNEXPECTED_ERROR);
+WORD32 impd_set_custom_params(
+ const WORD32 param_set_idx,
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params) {
+ WORD32 i, k;
+
+ const ia_loc_sys_interface_struct* system_interface =
+ &(loc_sys_interface[param_set_idx - 1]);
+
+ const ia_loc_loudness_norm_ctrl_interface_struct*
+ loudness_norm_ctrl_interface =
+ &(loc_loudness_norm_ctrl_interface[param_set_idx - 1]);
+ const ia_loc_loudness_norm_param_interface_struct*
+ loudness_norm_param_interface =
+ &(loc_loudness_norm_param_interface[param_set_idx - 1]);
+
+ const ia_loc_drc_interface_struct* drc_ctrl_interface =
+ &(loc_dyn_range_ctrl_interface[param_set_idx - 1]);
+ const ia_loc_requested_drc_effect_struct* requested_drc_effect_type =
+ &(loc_requested_drc_effect_type_str[param_set_idx - 1]);
+ const ia_loc_drc_parameter_interface_struct* drc_parameter_interface =
+ &(loc_drc_parameter_interface[param_set_idx - 1]);
+
+ pstr_drc_sel_proc_params->target_config_request_type =
+ system_interface->target_config_request_type;
+ switch (system_interface->target_config_request_type) {
+ case 1:
+ pstr_drc_sel_proc_params->requested_target_layout =
+ system_interface->requested_target_layout;
+ break;
+ case 2:
+ pstr_drc_sel_proc_params->requested_target_ch_count =
+ system_interface->requested_target_ch_count;
+ break;
+ case 0:
+ default:
+ pstr_drc_sel_proc_params->num_downmix_id_requests =
+ system_interface->num_downmix_id_requests;
+ for (i = 0; i < system_interface->num_downmix_id_requests; i++) {
+ pstr_drc_sel_proc_params->requested_dwnmix_id[i] =
+ system_interface->requested_dwnmix_id[i];
+ }
+ break;
+ }
+
+ pstr_drc_sel_proc_params->loudness_normalization_on =
+ loudness_norm_ctrl_interface->loudness_normalization_on;
+ pstr_drc_sel_proc_params->target_loudness =
+ loudness_norm_ctrl_interface->target_loudness;
+
+ pstr_drc_sel_proc_params->album_mode =
+ loudness_norm_param_interface->album_mode;
+ pstr_drc_sel_proc_params->peak_limiter =
+ loudness_norm_param_interface->peak_limiter;
+ pstr_drc_sel_proc_params->loudness_deviation_max =
+ loudness_norm_param_interface->loudness_deviation_max;
+ pstr_drc_sel_proc_params->loudness_measurement_method =
+ loudness_norm_param_interface->loudness_measurement_method;
+ pstr_drc_sel_proc_params->loudness_measurement_system =
+ loudness_norm_param_interface->loudness_measurement_system;
+ pstr_drc_sel_proc_params->loudness_measurement_pre_proc =
+ loudness_norm_param_interface->loudness_measurement_pre_proc;
+ pstr_drc_sel_proc_params->device_cut_off_frequency =
+ loudness_norm_param_interface->device_cut_off_frequency;
+ pstr_drc_sel_proc_params->loudness_norm_gain_db_max =
+ loudness_norm_param_interface->loudness_norm_gain_db_max;
+ pstr_drc_sel_proc_params->loudness_norm_gain_modification_db =
+ loudness_norm_param_interface->loudness_norm_gain_modification_db;
+ pstr_drc_sel_proc_params->output_peak_level_max =
+ loudness_norm_param_interface->output_peak_level_max;
+
+ pstr_drc_sel_proc_params->dynamic_range_control_on =
+ drc_ctrl_interface->dynamic_range_control_on;
+ pstr_drc_sel_proc_params->num_drc_feature_requests =
+ drc_ctrl_interface->num_drc_feature_requests;
+ for (i = 0; i < drc_ctrl_interface->num_drc_feature_requests; i++) {
+ pstr_drc_sel_proc_params->drc_feature_req_type[i] =
+ drc_ctrl_interface->drc_feature_req_type[i];
+ switch (drc_ctrl_interface->drc_feature_req_type[i]) {
+ case MATCH_EFFECT_TYPE:
+ pstr_drc_sel_proc_params->requested_num_drc_effects[i] =
+ requested_drc_effect_type->requested_num_drc_effects;
+ pstr_drc_sel_proc_params->desired_num_drc_effects_of_requested[i] =
+ requested_drc_effect_type->desired_num_drc_effects_of_requested;
+ for (k = 0; k < requested_drc_effect_type->requested_num_drc_effects;
+ k++) {
+ pstr_drc_sel_proc_params->requested_drc_effect_type[i][k] =
+ requested_drc_effect_type->requested_drc_effect_type[k];
}
+ break;
+ case MATCH_DYNAMIC_RANGE:
+ pstr_drc_sel_proc_params->requested_dyn_range_measur_type[i] =
+ drc_ctrl_interface->requested_dyn_rng_measurement_type;
+ pstr_drc_sel_proc_params->requested_dyn_range_range_flag[i] =
+ drc_ctrl_interface->requested_dyn_range_is_single_val_flag;
+ pstr_drc_sel_proc_params->requested_dyn_range_value[i] =
+ drc_ctrl_interface->requested_dyn_range_value;
+ pstr_drc_sel_proc_params->requested_dyn_range_min_val[i] =
+ drc_ctrl_interface->requested_dyn_range_min_val;
+ pstr_drc_sel_proc_params->requested_dyn_range_max_val[i] =
+ drc_ctrl_interface->requested_dyn_range_max_val;
+ break;
+ case MATCH_DRC_CHARACTERISTIC:
+ pstr_drc_sel_proc_params->requested_drc_characteristic[i] =
+ drc_ctrl_interface->requested_drc_characteristic;
+ break;
+ default:
+ return (UNEXPECTED_ERROR);
}
+ }
- pstr_drc_sel_proc_params->boost = drc_parameter_interface->boost;
- pstr_drc_sel_proc_params->compress = drc_parameter_interface->compress;
- pstr_drc_sel_proc_params->drc_characteristic_target = drc_parameter_interface->drc_characteristic_target;
+ pstr_drc_sel_proc_params->boost = drc_parameter_interface->boost;
+ pstr_drc_sel_proc_params->compress = drc_parameter_interface->compress;
+ pstr_drc_sel_proc_params->drc_characteristic_target =
+ drc_parameter_interface->drc_characteristic_target;
- return (0);
+ return (0);
}
-WORD32 impd_eval_custom_params_selection_process(ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params)
-{
- pstr_drc_sel_proc_params->loudness_norm_gain_db_max = max (0.0f, pstr_drc_sel_proc_params->loudness_norm_gain_db_max);
- pstr_drc_sel_proc_params->loudness_deviation_max = max (0, pstr_drc_sel_proc_params->loudness_deviation_max);
-
- return (0);
+WORD32 impd_eval_custom_params_selection_process(
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params) {
+ pstr_drc_sel_proc_params->loudness_norm_gain_db_max =
+ max(0.0f, pstr_drc_sel_proc_params->loudness_norm_gain_db_max);
+ pstr_drc_sel_proc_params->loudness_deviation_max =
+ max(0, pstr_drc_sel_proc_params->loudness_deviation_max);
+
+ return (0);
}
-
-
diff --git a/decoder/drc_src/impd_drc_host_params.h b/decoder/drc_src/impd_drc_host_params.h
index 111bd72..9c71245 100644
--- a/decoder/drc_src/impd_drc_host_params.h
+++ b/decoder/drc_src/impd_drc_host_params.h
@@ -24,12 +24,15 @@
extern "C" {
#endif /* __cplusplus */
-WORD32 impd_set_default_params_selection_process(ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params);
+WORD32 impd_set_default_params_selection_process(
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params);
-WORD32 impd_set_custom_params(const WORD32 param_set_idx,
- ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params);
+WORD32 impd_set_custom_params(
+ const WORD32 param_set_idx,
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params);
-WORD32 impd_eval_custom_params_selection_process(ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params);
+WORD32 impd_eval_custom_params_selection_process(
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params);
#ifdef __cplusplus
}
diff --git a/decoder/drc_src/impd_drc_init.c b/decoder/drc_src/impd_drc_init.c
index 4542827..5f51a3f 100644
--- a/decoder/drc_src/impd_drc_init.c
+++ b/decoder/drc_src/impd_drc_init.c
@@ -42,541 +42,582 @@
#include "impd_drc_peak_limiter.h"
#include "impd_drc_host_params.h"
-
#define PARAMETRIC_DRC_DELAY_MAX_DEFAULT 4096
-#define EQ_DELAY_MAX_DEFAULT 256
+#define EQ_DELAY_MAX_DEFAULT 256
-IA_ERRORCODE impd_drc_mem_api(ia_drc_api_struct *p_obj_drc,
- WORD32 iCmd, WORD32 iIdx, pVOID pvValue);
+IA_ERRORCODE impd_drc_mem_api(ia_drc_api_struct *p_obj_drc, WORD32 iCmd,
+ WORD32 iIdx, pVOID pvValue);
IA_ERRORCODE impd_drc_fill_mem_tables(ia_drc_api_struct *p_obj_drc);
WORD32
-impd_drc_dec_interface_process(
- ia_bit_buf_struct* it_bit_buff,
- ia_drc_interface_struct* pstr_drc_interface,
- UWORD8* it_bit_buf,
- WORD32 num_bit_stream_bits,
- WORD32* num_bits_read);
+impd_drc_dec_interface_process(ia_bit_buf_struct *it_bit_buff,
+ ia_drc_interface_struct *pstr_drc_interface,
+ UWORD8 *it_bit_buf, WORD32 num_bit_stream_bits,
+ WORD32 *num_bits_read);
WORD32
-impd_drc_dec_interface_add_effect_type(ia_drc_interface_struct* pstr_drc_interface,
- WORD32 drc_effect_type,WORD32 target_loudness, WORD32 loud_norm);
-
+impd_drc_dec_interface_add_effect_type(
+ ia_drc_interface_struct *pstr_drc_interface, WORD32 drc_effect_type,
+ WORD32 target_loudness, WORD32 loud_norm);
#define NUM_GAIN_DEC_INSTANCES 2
-#define BITSTREAM_FILE_FORMAT_SPLIT 1
-#define LIM_DEFAULT_THRESHOLD (0.89125094f)
-
-static WORD32 impd_match_downmix(WORD32 downmix_id, WORD32 dec_downmix_id)
-{
- WORD32 id_match = 0;
-
- switch (dec_downmix_id )
- {
- case 0:
- id_match = (downmix_id == 0);
- break;
- case 1:
- id_match = ( (downmix_id == 0) || (downmix_id == 0x7F) );
- break;
- case 2:
- id_match = (downmix_id == 0x7F);
- break;
- case 3:
- id_match = ( (downmix_id != 0) && (downmix_id != 0x7F) );
- break;
- case 4:
- id_match = (downmix_id != 0);
- break;
- }
- return id_match;
+#define BITSTREAM_FILE_FORMAT_SPLIT 1
+#define LIM_DEFAULT_THRESHOLD (0.89125094f)
+
+static WORD32 impd_match_downmix(WORD32 downmix_id, WORD32 dec_downmix_id) {
+ WORD32 id_match = 0;
+
+ switch (dec_downmix_id) {
+ case 0:
+ id_match = (downmix_id == 0);
+ break;
+ case 1:
+ id_match = ((downmix_id == 0) || (downmix_id == 0x7F));
+ break;
+ case 2:
+ id_match = (downmix_id == 0x7F);
+ break;
+ case 3:
+ id_match = ((downmix_id != 0) && (downmix_id != 0x7F));
+ break;
+ case 4:
+ id_match = (downmix_id != 0);
+ break;
+ }
+ return id_match;
}
-IA_ERRORCODE impd_drc_set_default_config(ia_drc_api_struct *p_obj_drc)
-{
- p_obj_drc->str_config.bitstream_file_format = 0;
- p_obj_drc->str_config.dec_type = 0;
- p_obj_drc->str_config.sub_band_domain_mode = 0;
- p_obj_drc->str_config.sub_band_count = 0;
- p_obj_drc->str_config.sub_band_down_sampling_factor = 0;
- p_obj_drc->str_config.sampling_rate = 0;
- p_obj_drc->str_config.frame_size = 1024;
- p_obj_drc->str_config.num_ch_in = -1;
- p_obj_drc->str_config.num_ch_out = -1;
- p_obj_drc->str_config.control_parameter_index = -1;
- p_obj_drc->str_config.peak_limiter = 0;
- p_obj_drc->str_config.delay_mode = 0;
- p_obj_drc->str_config.interface_bitstream_present = 0;
- p_obj_drc->str_config.gain_delay_samples = 0;
- p_obj_drc->str_config.absorb_delay_on = 1;
- p_obj_drc->str_config.subband_domain_io_flag = 0;
- p_obj_drc->str_config.constant_delay_on = 0;
- p_obj_drc->str_config.audio_delay_samples = 0;
- p_obj_drc->str_config.effect_type = 0;
- p_obj_drc->str_config.target_loudness = -24;
- p_obj_drc->str_config.loud_norm_flag = 0;
- p_obj_drc->str_bit_handler.byte_index_bs = 0;
- p_obj_drc->str_bit_handler.num_bytes_bs = 0;
- p_obj_drc->str_bit_handler.num_bits_offset_bs = 0;
- p_obj_drc->str_bit_handler.num_bits_read_bs = 0;
- p_obj_drc->str_bit_handler.cpy_over = 0;
- p_obj_drc->str_bit_handler.num_bytes_bs_drc_config = 0;
- p_obj_drc->str_bit_handler.cpy_over_ic = 0;
- p_obj_drc->str_bit_handler.num_bytes_bs_loudness_info = 0;
- p_obj_drc->str_bit_handler.cpy_over_il = 0;
- p_obj_drc->str_bit_handler.num_bytes_bs_unidrc_interface = 0;
- p_obj_drc->str_bit_handler.num_bits_read_bs_unidrc_interface = 0;
- p_obj_drc->str_bit_handler.cpy_over_in = 0;
- p_obj_drc->str_bit_handler.gain_stream_flag = 0;
-
- return IA_NO_ERROR;
+IA_ERRORCODE impd_drc_set_default_config(ia_drc_api_struct *p_obj_drc) {
+ p_obj_drc->str_config.bitstream_file_format = 0;
+ p_obj_drc->str_config.dec_type = 0;
+ p_obj_drc->str_config.sub_band_domain_mode = 0;
+ p_obj_drc->str_config.sub_band_count = 0;
+ p_obj_drc->str_config.sub_band_down_sampling_factor = 0;
+ p_obj_drc->str_config.sampling_rate = 0;
+ p_obj_drc->str_config.frame_size = 1024;
+ p_obj_drc->str_config.num_ch_in = -1;
+ p_obj_drc->str_config.num_ch_out = -1;
+ p_obj_drc->str_config.control_parameter_index = -1;
+ p_obj_drc->str_config.peak_limiter = 0;
+ p_obj_drc->str_config.delay_mode = 0;
+ p_obj_drc->str_config.interface_bitstream_present = 0;
+ p_obj_drc->str_config.gain_delay_samples = 0;
+ p_obj_drc->str_config.absorb_delay_on = 1;
+ p_obj_drc->str_config.subband_domain_io_flag = 0;
+ p_obj_drc->str_config.constant_delay_on = 0;
+ p_obj_drc->str_config.audio_delay_samples = 0;
+ p_obj_drc->str_config.effect_type = 0;
+ p_obj_drc->str_config.target_loudness = -24;
+ p_obj_drc->str_config.loud_norm_flag = 0;
+ p_obj_drc->str_bit_handler.byte_index_bs = 0;
+ p_obj_drc->str_bit_handler.num_bytes_bs = 0;
+ p_obj_drc->str_bit_handler.num_bits_offset_bs = 0;
+ p_obj_drc->str_bit_handler.num_bits_read_bs = 0;
+ p_obj_drc->str_bit_handler.cpy_over = 0;
+ p_obj_drc->str_bit_handler.num_bytes_bs_drc_config = 0;
+ p_obj_drc->str_bit_handler.cpy_over_ic = 0;
+ p_obj_drc->str_bit_handler.num_bytes_bs_loudness_info = 0;
+ p_obj_drc->str_bit_handler.cpy_over_il = 0;
+ p_obj_drc->str_bit_handler.num_bytes_bs_unidrc_interface = 0;
+ p_obj_drc->str_bit_handler.num_bits_read_bs_unidrc_interface = 0;
+ p_obj_drc->str_bit_handler.cpy_over_in = 0;
+ p_obj_drc->str_bit_handler.gain_stream_flag = 0;
+
+ return IA_NO_ERROR;
}
-
-IA_ERRORCODE impd_drc_set_default_bitstream_config(ia_drc_config *pstr_drc_config)
-{
- WORD32 i;
-
- pstr_drc_config->sample_rate_present=0;
- pstr_drc_config->sampling_rate=0;
- pstr_drc_config->dwnmix_instructions_count=0;
- pstr_drc_config->drc_coefficients_drc_count=1;
- pstr_drc_config->drc_instructions_uni_drc_count=4;
- pstr_drc_config->drc_instructions_count_plus=5;
- pstr_drc_config->drc_description_basic_present=0;
- pstr_drc_config->drc_coefficients_basic_count=0;
- pstr_drc_config->drc_instructions_basic_count=0;
- pstr_drc_config->drc_config_ext_present=1;
- pstr_drc_config->apply_drc=0;
- pstr_drc_config->str_drc_config_ext.drc_config_ext_type[0]=2;
- pstr_drc_config->str_drc_config_ext.ext_bit_size[0]=345;
- pstr_drc_config->str_drc_config_ext.parametric_drc_present=0;
- pstr_drc_config->str_drc_config_ext.drc_extension_v1_present=1;
- pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0].version=1;
- pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0].drc_location=1;
- pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0].gain_set_count=4;
- for(i=0;i<pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0].gain_set_count;i++)
- {
- pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0].gain_set_params[i].gain_interpolation_type=1;
- pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0].gain_set_params[i].band_count=1;
- }
- pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0].gain_sequence_count=4;
- pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0].gain_set_params_index_for_gain_sequence[0]=0;
- pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0].gain_set_params_index_for_gain_sequence[1]=1;
- pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0].gain_set_params_index_for_gain_sequence[2]=2;
- pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0].gain_set_params_index_for_gain_sequence[3]=3;
- pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0].gain_set_count_plus=4;
- pstr_drc_config->str_drc_instruction_str[0].drc_set_id=1;
- pstr_drc_config->str_drc_instruction_str[0].drc_set_complexity_level=2;
- pstr_drc_config->str_drc_instruction_str[0].drc_location=1;
- pstr_drc_config->str_drc_instruction_str[0].dwnmix_id_count=1;
- pstr_drc_config->str_drc_instruction_str[0].drc_set_effect=1;
- pstr_drc_config->str_drc_instruction_str[0].gain_set_index[1]=1;
- pstr_drc_config->str_drc_instruction_str[0].drc_set_target_loudness_value_lower=-63;
- pstr_drc_config->str_drc_instruction_str[0].num_drc_ch_groups=2;
- pstr_drc_config->str_drc_instruction_str[0].gain_set_index_for_channel_group[1]=1;
- pstr_drc_config->str_drc_instruction_str[0].band_count_of_ch_group[0]=1;
- pstr_drc_config->str_drc_instruction_str[0].band_count_of_ch_group[1]=1;
- pstr_drc_config->str_drc_instruction_str[0].gain_interpolation_type_for_channel_group[0]=1;
- pstr_drc_config->str_drc_instruction_str[0].gain_interpolation_type_for_channel_group[1]=1;
- pstr_drc_config->str_drc_instruction_str[0].time_delta_min_for_channel_group[0]=32;
- pstr_drc_config->str_drc_instruction_str[0].time_delta_min_for_channel_group[1]=32;
- pstr_drc_config->str_drc_instruction_str[0].channel_group_of_ch[1]=1;
- pstr_drc_config->str_drc_instruction_str[0].gain_element_count=2;
-
- pstr_drc_config->str_drc_instruction_str[1].drc_set_id=2;
- pstr_drc_config->str_drc_instruction_str[1].drc_set_complexity_level=2;
- pstr_drc_config->str_drc_instruction_str[1].drc_location=1;
- pstr_drc_config->str_drc_instruction_str[1].dwnmix_id_count=1;
- pstr_drc_config->str_drc_instruction_str[1].drc_set_effect=2;
- pstr_drc_config->str_drc_instruction_str[1].gain_set_index[0]=1;
- pstr_drc_config->str_drc_instruction_str[1].gain_set_index[1]=2;
- pstr_drc_config->str_drc_instruction_str[1].drc_set_target_loudness_value_lower=-63;
- pstr_drc_config->str_drc_instruction_str[1].num_drc_ch_groups=2;
- pstr_drc_config->str_drc_instruction_str[1].gain_set_index_for_channel_group[0]=1;
- pstr_drc_config->str_drc_instruction_str[1].gain_set_index_for_channel_group[1]=2;
- pstr_drc_config->str_drc_instruction_str[1].band_count_of_ch_group[0]=1;
- pstr_drc_config->str_drc_instruction_str[1].band_count_of_ch_group[1]=1;
- pstr_drc_config->str_drc_instruction_str[1].gain_interpolation_type_for_channel_group[0]=1;
- pstr_drc_config->str_drc_instruction_str[1].gain_interpolation_type_for_channel_group[1]=1;
- pstr_drc_config->str_drc_instruction_str[1].time_delta_min_for_channel_group[0]=32;
- pstr_drc_config->str_drc_instruction_str[1].time_delta_min_for_channel_group[1]=32;
- pstr_drc_config->str_drc_instruction_str[1].channel_group_of_ch[1]=1;
- pstr_drc_config->str_drc_instruction_str[1].gain_element_count=2;
-
- pstr_drc_config->str_drc_instruction_str[2].drc_set_id=3;
- pstr_drc_config->str_drc_instruction_str[2].drc_set_complexity_level=2;
- pstr_drc_config->str_drc_instruction_str[2].drc_location=1;
- pstr_drc_config->str_drc_instruction_str[2].dwnmix_id_count=1;
- pstr_drc_config->str_drc_instruction_str[2].drc_set_effect=4;
- pstr_drc_config->str_drc_instruction_str[2].gain_set_index[0]=2;
- pstr_drc_config->str_drc_instruction_str[2].gain_set_index[1]=3;
- pstr_drc_config->str_drc_instruction_str[2].drc_set_target_loudness_value_lower=-63;
- pstr_drc_config->str_drc_instruction_str[2].num_drc_ch_groups=2;
- pstr_drc_config->str_drc_instruction_str[2].gain_set_index_for_channel_group[0]=2;
- pstr_drc_config->str_drc_instruction_str[2].gain_set_index_for_channel_group[1]=3;
- pstr_drc_config->str_drc_instruction_str[2].band_count_of_ch_group[0]=1;
- pstr_drc_config->str_drc_instruction_str[2].band_count_of_ch_group[1]=1;
- pstr_drc_config->str_drc_instruction_str[2].gain_interpolation_type_for_channel_group[0]=1;
- pstr_drc_config->str_drc_instruction_str[2].gain_interpolation_type_for_channel_group[1]=1;
- pstr_drc_config->str_drc_instruction_str[2].time_delta_min_for_channel_group[0]=32;
- pstr_drc_config->str_drc_instruction_str[2].time_delta_min_for_channel_group[1]=32;
- pstr_drc_config->str_drc_instruction_str[2].channel_group_of_ch[1]=1;
- pstr_drc_config->str_drc_instruction_str[2].gain_element_count=2;
-
- pstr_drc_config->str_drc_instruction_str[3].drc_set_id=4;
- pstr_drc_config->str_drc_instruction_str[3].drc_set_complexity_level=2;
- pstr_drc_config->str_drc_instruction_str[3].drc_location=1;
- pstr_drc_config->str_drc_instruction_str[3].dwnmix_id_count=1;
- pstr_drc_config->str_drc_instruction_str[3].drc_set_effect=32;
- pstr_drc_config->str_drc_instruction_str[3].gain_set_index[0]=3;
- pstr_drc_config->str_drc_instruction_str[3].gain_set_index[1]=0;
- pstr_drc_config->str_drc_instruction_str[3].drc_set_target_loudness_value_lower=-63;
- pstr_drc_config->str_drc_instruction_str[3].num_drc_ch_groups=2;
- pstr_drc_config->str_drc_instruction_str[3].gain_set_index_for_channel_group[0]=3;
- pstr_drc_config->str_drc_instruction_str[3].gain_set_index_for_channel_group[1]=0;
- pstr_drc_config->str_drc_instruction_str[3].band_count_of_ch_group[0]=1;
- pstr_drc_config->str_drc_instruction_str[3].band_count_of_ch_group[1]=1;
- pstr_drc_config->str_drc_instruction_str[3].gain_interpolation_type_for_channel_group[0]=1;
- pstr_drc_config->str_drc_instruction_str[3].gain_interpolation_type_for_channel_group[1]=1;
- pstr_drc_config->str_drc_instruction_str[3].time_delta_min_for_channel_group[0]=32;
- pstr_drc_config->str_drc_instruction_str[3].time_delta_min_for_channel_group[1]=32;
- pstr_drc_config->str_drc_instruction_str[3].channel_group_of_ch[1]=1;
- pstr_drc_config->str_drc_instruction_str[3].gain_element_count=2;
-
- pstr_drc_config->str_drc_instruction_str[4].drc_set_id=-1;
- pstr_drc_config->str_drc_instruction_str[4].dwnmix_id_count=1;
- pstr_drc_config->channel_layout.base_channel_count=2;
-
- return IA_NO_ERROR;
+IA_ERRORCODE impd_drc_set_default_bitstream_config(
+ ia_drc_config *pstr_drc_config) {
+ WORD32 i;
+
+ pstr_drc_config->sample_rate_present = 0;
+ pstr_drc_config->sampling_rate = 0;
+ pstr_drc_config->dwnmix_instructions_count = 0;
+ pstr_drc_config->drc_coefficients_drc_count = 1;
+ pstr_drc_config->drc_instructions_uni_drc_count = 4;
+ pstr_drc_config->drc_instructions_count_plus = 5;
+ pstr_drc_config->drc_description_basic_present = 0;
+ pstr_drc_config->drc_coefficients_basic_count = 0;
+ pstr_drc_config->drc_instructions_basic_count = 0;
+ pstr_drc_config->drc_config_ext_present = 1;
+ pstr_drc_config->apply_drc = 0;
+ pstr_drc_config->str_drc_config_ext.drc_config_ext_type[0] = 2;
+ pstr_drc_config->str_drc_config_ext.ext_bit_size[0] = 345;
+ pstr_drc_config->str_drc_config_ext.parametric_drc_present = 0;
+ pstr_drc_config->str_drc_config_ext.drc_extension_v1_present = 1;
+ pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0].version = 1;
+ pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0].drc_location = 1;
+ pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0].gain_set_count = 4;
+ for (i = 0;
+ i <
+ pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0].gain_set_count;
+ i++) {
+ pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0]
+ .gain_set_params[i]
+ .gain_interpolation_type = 1;
+ pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0]
+ .gain_set_params[i]
+ .band_count = 1;
+ }
+ pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0].gain_sequence_count =
+ 4;
+ pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0]
+ .gain_set_params_index_for_gain_sequence[0] = 0;
+ pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0]
+ .gain_set_params_index_for_gain_sequence[1] = 1;
+ pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0]
+ .gain_set_params_index_for_gain_sequence[2] = 2;
+ pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0]
+ .gain_set_params_index_for_gain_sequence[3] = 3;
+ pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0].gain_set_count_plus =
+ 4;
+ pstr_drc_config->str_drc_instruction_str[0].drc_set_id = 1;
+ pstr_drc_config->str_drc_instruction_str[0].drc_set_complexity_level = 2;
+ pstr_drc_config->str_drc_instruction_str[0].drc_location = 1;
+ pstr_drc_config->str_drc_instruction_str[0].dwnmix_id_count = 1;
+ pstr_drc_config->str_drc_instruction_str[0].drc_set_effect = 1;
+ pstr_drc_config->str_drc_instruction_str[0].gain_set_index[1] = 1;
+ pstr_drc_config->str_drc_instruction_str[0]
+ .drc_set_target_loudness_value_lower = -63;
+ pstr_drc_config->str_drc_instruction_str[0].num_drc_ch_groups = 2;
+ pstr_drc_config->str_drc_instruction_str[0]
+ .gain_set_index_for_channel_group[1] = 1;
+ pstr_drc_config->str_drc_instruction_str[0].band_count_of_ch_group[0] = 1;
+ pstr_drc_config->str_drc_instruction_str[0].band_count_of_ch_group[1] = 1;
+ pstr_drc_config->str_drc_instruction_str[0]
+ .gain_interpolation_type_for_channel_group[0] = 1;
+ pstr_drc_config->str_drc_instruction_str[0]
+ .gain_interpolation_type_for_channel_group[1] = 1;
+ pstr_drc_config->str_drc_instruction_str[0]
+ .time_delta_min_for_channel_group[0] = 32;
+ pstr_drc_config->str_drc_instruction_str[0]
+ .time_delta_min_for_channel_group[1] = 32;
+ pstr_drc_config->str_drc_instruction_str[0].channel_group_of_ch[1] = 1;
+ pstr_drc_config->str_drc_instruction_str[0].gain_element_count = 2;
+
+ pstr_drc_config->str_drc_instruction_str[1].drc_set_id = 2;
+ pstr_drc_config->str_drc_instruction_str[1].drc_set_complexity_level = 2;
+ pstr_drc_config->str_drc_instruction_str[1].drc_location = 1;
+ pstr_drc_config->str_drc_instruction_str[1].dwnmix_id_count = 1;
+ pstr_drc_config->str_drc_instruction_str[1].drc_set_effect = 2;
+ pstr_drc_config->str_drc_instruction_str[1].gain_set_index[0] = 1;
+ pstr_drc_config->str_drc_instruction_str[1].gain_set_index[1] = 2;
+ pstr_drc_config->str_drc_instruction_str[1]
+ .drc_set_target_loudness_value_lower = -63;
+ pstr_drc_config->str_drc_instruction_str[1].num_drc_ch_groups = 2;
+ pstr_drc_config->str_drc_instruction_str[1]
+ .gain_set_index_for_channel_group[0] = 1;
+ pstr_drc_config->str_drc_instruction_str[1]
+ .gain_set_index_for_channel_group[1] = 2;
+ pstr_drc_config->str_drc_instruction_str[1].band_count_of_ch_group[0] = 1;
+ pstr_drc_config->str_drc_instruction_str[1].band_count_of_ch_group[1] = 1;
+ pstr_drc_config->str_drc_instruction_str[1]
+ .gain_interpolation_type_for_channel_group[0] = 1;
+ pstr_drc_config->str_drc_instruction_str[1]
+ .gain_interpolation_type_for_channel_group[1] = 1;
+ pstr_drc_config->str_drc_instruction_str[1]
+ .time_delta_min_for_channel_group[0] = 32;
+ pstr_drc_config->str_drc_instruction_str[1]
+ .time_delta_min_for_channel_group[1] = 32;
+ pstr_drc_config->str_drc_instruction_str[1].channel_group_of_ch[1] = 1;
+ pstr_drc_config->str_drc_instruction_str[1].gain_element_count = 2;
+
+ pstr_drc_config->str_drc_instruction_str[2].drc_set_id = 3;
+ pstr_drc_config->str_drc_instruction_str[2].drc_set_complexity_level = 2;
+ pstr_drc_config->str_drc_instruction_str[2].drc_location = 1;
+ pstr_drc_config->str_drc_instruction_str[2].dwnmix_id_count = 1;
+ pstr_drc_config->str_drc_instruction_str[2].drc_set_effect = 4;
+ pstr_drc_config->str_drc_instruction_str[2].gain_set_index[0] = 2;
+ pstr_drc_config->str_drc_instruction_str[2].gain_set_index[1] = 3;
+ pstr_drc_config->str_drc_instruction_str[2]
+ .drc_set_target_loudness_value_lower = -63;
+ pstr_drc_config->str_drc_instruction_str[2].num_drc_ch_groups = 2;
+ pstr_drc_config->str_drc_instruction_str[2]
+ .gain_set_index_for_channel_group[0] = 2;
+ pstr_drc_config->str_drc_instruction_str[2]
+ .gain_set_index_for_channel_group[1] = 3;
+ pstr_drc_config->str_drc_instruction_str[2].band_count_of_ch_group[0] = 1;
+ pstr_drc_config->str_drc_instruction_str[2].band_count_of_ch_group[1] = 1;
+ pstr_drc_config->str_drc_instruction_str[2]
+ .gain_interpolation_type_for_channel_group[0] = 1;
+ pstr_drc_config->str_drc_instruction_str[2]
+ .gain_interpolation_type_for_channel_group[1] = 1;
+ pstr_drc_config->str_drc_instruction_str[2]
+ .time_delta_min_for_channel_group[0] = 32;
+ pstr_drc_config->str_drc_instruction_str[2]
+ .time_delta_min_for_channel_group[1] = 32;
+ pstr_drc_config->str_drc_instruction_str[2].channel_group_of_ch[1] = 1;
+ pstr_drc_config->str_drc_instruction_str[2].gain_element_count = 2;
+
+ pstr_drc_config->str_drc_instruction_str[3].drc_set_id = 4;
+ pstr_drc_config->str_drc_instruction_str[3].drc_set_complexity_level = 2;
+ pstr_drc_config->str_drc_instruction_str[3].drc_location = 1;
+ pstr_drc_config->str_drc_instruction_str[3].dwnmix_id_count = 1;
+ pstr_drc_config->str_drc_instruction_str[3].drc_set_effect = 32;
+ pstr_drc_config->str_drc_instruction_str[3].gain_set_index[0] = 3;
+ pstr_drc_config->str_drc_instruction_str[3].gain_set_index[1] = 0;
+ pstr_drc_config->str_drc_instruction_str[3]
+ .drc_set_target_loudness_value_lower = -63;
+ pstr_drc_config->str_drc_instruction_str[3].num_drc_ch_groups = 2;
+ pstr_drc_config->str_drc_instruction_str[3]
+ .gain_set_index_for_channel_group[0] = 3;
+ pstr_drc_config->str_drc_instruction_str[3]
+ .gain_set_index_for_channel_group[1] = 0;
+ pstr_drc_config->str_drc_instruction_str[3].band_count_of_ch_group[0] = 1;
+ pstr_drc_config->str_drc_instruction_str[3].band_count_of_ch_group[1] = 1;
+ pstr_drc_config->str_drc_instruction_str[3]
+ .gain_interpolation_type_for_channel_group[0] = 1;
+ pstr_drc_config->str_drc_instruction_str[3]
+ .gain_interpolation_type_for_channel_group[1] = 1;
+ pstr_drc_config->str_drc_instruction_str[3]
+ .time_delta_min_for_channel_group[0] = 32;
+ pstr_drc_config->str_drc_instruction_str[3]
+ .time_delta_min_for_channel_group[1] = 32;
+ pstr_drc_config->str_drc_instruction_str[3].channel_group_of_ch[1] = 1;
+ pstr_drc_config->str_drc_instruction_str[3].gain_element_count = 2;
+
+ pstr_drc_config->str_drc_instruction_str[4].drc_set_id = -1;
+ pstr_drc_config->str_drc_instruction_str[4].dwnmix_id_count = 1;
+ pstr_drc_config->channel_layout.base_channel_count = 2;
+
+ return IA_NO_ERROR;
}
+IA_ERRORCODE impd_drc_set_struct_pointer(ia_drc_api_struct *p_obj_drc) {
+ SIZE_T persistant_ptr = (SIZE_T)p_obj_drc->p_state->persistant_ptr;
-IA_ERRORCODE impd_drc_set_struct_pointer(ia_drc_api_struct *p_obj_drc)
-{
- SIZE_T persistant_ptr = (SIZE_T)p_obj_drc->p_state->persistant_ptr;
-
- p_obj_drc->str_payload.pstr_bitstream_dec = (ia_drc_bits_dec_struct*)persistant_ptr;
- persistant_ptr = (SIZE_T)persistant_ptr + sizeof(ia_drc_bits_dec_struct)+32;
+ p_obj_drc->str_payload.pstr_bitstream_dec =
+ (ia_drc_bits_dec_struct *)persistant_ptr;
+ persistant_ptr = (SIZE_T)persistant_ptr + sizeof(ia_drc_bits_dec_struct) + 32;
- p_obj_drc->str_payload.pstr_gain_dec[0] = (ia_drc_gain_dec_struct*)persistant_ptr;
- persistant_ptr = (SIZE_T)persistant_ptr + sizeof(ia_drc_gain_dec_struct)+32;
+ p_obj_drc->str_payload.pstr_gain_dec[0] =
+ (ia_drc_gain_dec_struct *)persistant_ptr;
+ persistant_ptr = (SIZE_T)persistant_ptr + sizeof(ia_drc_gain_dec_struct) + 32;
- p_obj_drc->str_payload.pstr_gain_dec[1] = (ia_drc_gain_dec_struct*)persistant_ptr;
- persistant_ptr = (SIZE_T)persistant_ptr + sizeof(ia_drc_gain_dec_struct)+32;
+ p_obj_drc->str_payload.pstr_gain_dec[1] =
+ (ia_drc_gain_dec_struct *)persistant_ptr;
+ persistant_ptr = (SIZE_T)persistant_ptr + sizeof(ia_drc_gain_dec_struct) + 32;
- p_obj_drc->str_payload.pstr_loudness_info = (ia_drc_loudness_info_set_struct*)persistant_ptr;
- persistant_ptr = (SIZE_T)persistant_ptr + sizeof(ia_drc_loudness_info_set_struct)+32;
+ p_obj_drc->str_payload.pstr_loudness_info =
+ (ia_drc_loudness_info_set_struct *)persistant_ptr;
+ persistant_ptr =
+ (SIZE_T)persistant_ptr + sizeof(ia_drc_loudness_info_set_struct) + 32;
- p_obj_drc->str_payload.pstr_drc_gain = (ia_drc_gain_struct*)persistant_ptr;;
- persistant_ptr = (SIZE_T)persistant_ptr + sizeof(ia_drc_gain_struct)+32;
+ p_obj_drc->str_payload.pstr_drc_gain = (ia_drc_gain_struct *)persistant_ptr;
+ ;
+ persistant_ptr = (SIZE_T)persistant_ptr + sizeof(ia_drc_gain_struct) + 32;
- p_obj_drc->str_payload.pstr_drc_interface = (ia_drc_interface_struct*)persistant_ptr;
- persistant_ptr = (SIZE_T)persistant_ptr + sizeof(ia_drc_interface_struct)+32;
+ p_obj_drc->str_payload.pstr_drc_interface =
+ (ia_drc_interface_struct *)persistant_ptr;
+ persistant_ptr =
+ (SIZE_T)persistant_ptr + sizeof(ia_drc_interface_struct) + 32;
- p_obj_drc->str_payload.pstr_drc_config = (ia_drc_config*)persistant_ptr;
- persistant_ptr = (SIZE_T)persistant_ptr + sizeof(ia_drc_config)+32;
+ p_obj_drc->str_payload.pstr_drc_config = (ia_drc_config *)persistant_ptr;
+ persistant_ptr = (SIZE_T)persistant_ptr + sizeof(ia_drc_config) + 32;
- p_obj_drc->str_payload.pstr_selection_proc = (ia_drc_sel_pro_struct*)persistant_ptr;
- persistant_ptr = (SIZE_T)persistant_ptr + sizeof(ia_drc_sel_pro_struct)+32;
+ p_obj_drc->str_payload.pstr_selection_proc =
+ (ia_drc_sel_pro_struct *)persistant_ptr;
+ persistant_ptr = (SIZE_T)persistant_ptr + sizeof(ia_drc_sel_pro_struct) + 32;
- p_obj_drc->str_bit_handler.it_bit_buf = (UWORD8*)persistant_ptr;
- persistant_ptr = (SIZE_T)persistant_ptr + 32*1024; /*varify the sizelater*/
+ p_obj_drc->str_bit_handler.it_bit_buf = (UWORD8 *)persistant_ptr;
+ persistant_ptr = (SIZE_T)persistant_ptr + 32 * 1024; /*varify the sizelater*/
- p_obj_drc->str_payload.pstr_drc_sel_proc_params = (ia_drc_sel_proc_params_struct*)persistant_ptr;
- persistant_ptr = (SIZE_T)persistant_ptr + sizeof(ia_drc_sel_proc_params_struct);
+ p_obj_drc->str_payload.pstr_drc_sel_proc_params =
+ (ia_drc_sel_proc_params_struct *)persistant_ptr;
+ persistant_ptr =
+ (SIZE_T)persistant_ptr + sizeof(ia_drc_sel_proc_params_struct);
- p_obj_drc->str_payload.pstr_drc_sel_proc_output = (ia_drc_sel_proc_output_struct*)persistant_ptr;
- persistant_ptr = (SIZE_T)persistant_ptr + sizeof(ia_drc_sel_proc_output_struct)+16*1024;
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output =
+ (ia_drc_sel_proc_output_struct *)persistant_ptr;
+ persistant_ptr = (SIZE_T)persistant_ptr +
+ sizeof(ia_drc_sel_proc_output_struct) + 16 * 1024;
- p_obj_drc->str_bit_handler.bitstream_drc_config = (UWORD8*)persistant_ptr;
- persistant_ptr = (SIZE_T)persistant_ptr + 8*1024;
+ p_obj_drc->str_bit_handler.bitstream_drc_config = (UWORD8 *)persistant_ptr;
+ persistant_ptr = (SIZE_T)persistant_ptr + 8 * 1024;
- p_obj_drc->str_bit_handler.bitstream_loudness_info = (UWORD8*)persistant_ptr;
- persistant_ptr = (SIZE_T)persistant_ptr + 8*1024;
+ p_obj_drc->str_bit_handler.bitstream_loudness_info = (UWORD8 *)persistant_ptr;
+ persistant_ptr = (SIZE_T)persistant_ptr + 8 * 1024;
- p_obj_drc->str_bit_handler.bitstream_unidrc_interface = (UWORD8*)persistant_ptr;
- persistant_ptr = (SIZE_T)persistant_ptr + 8*1024;
+ p_obj_drc->str_bit_handler.bitstream_unidrc_interface =
+ (UWORD8 *)persistant_ptr;
+ persistant_ptr = (SIZE_T)persistant_ptr + 8 * 1024;
- p_obj_drc->str_payload.pstr_peak_limiter = (ia_drc_peak_limiter_struct*)persistant_ptr;
- persistant_ptr = (SIZE_T)persistant_ptr + sizeof(ia_drc_peak_limiter_struct)+32;
+ p_obj_drc->str_payload.pstr_peak_limiter =
+ (ia_drc_peak_limiter_struct *)persistant_ptr;
+ persistant_ptr =
+ (SIZE_T)persistant_ptr + sizeof(ia_drc_peak_limiter_struct) + 32;
- p_obj_drc->str_payload.pstr_peak_limiter->buffer = (FLOAT32*)((SIZE_T) p_obj_drc->str_payload.pstr_peak_limiter+sizeof(ia_drc_peak_limiter_struct)+32);
- persistant_ptr = (SIZE_T)persistant_ptr + 16*1024;
+ p_obj_drc->str_payload.pstr_peak_limiter->buffer =
+ (FLOAT32 *)((SIZE_T)p_obj_drc->str_payload.pstr_peak_limiter +
+ sizeof(ia_drc_peak_limiter_struct) + 32);
+ persistant_ptr = (SIZE_T)persistant_ptr + 16 * 1024;
- p_obj_drc->str_payload.pstr_qmf_filter = (ia_drc_qmf_filt_struct*)persistant_ptr;
- persistant_ptr = (SIZE_T)persistant_ptr + sizeof(ia_drc_qmf_filt_struct)+32;
+ p_obj_drc->str_payload.pstr_qmf_filter =
+ (ia_drc_qmf_filt_struct *)persistant_ptr;
+ persistant_ptr = (SIZE_T)persistant_ptr + sizeof(ia_drc_qmf_filt_struct) + 32;
- p_obj_drc->str_payload.pstr_qmf_filter->ana_buff = (FLOAT64*)persistant_ptr;
- persistant_ptr = (SIZE_T)persistant_ptr + 16*1024;
+ p_obj_drc->str_payload.pstr_qmf_filter->ana_buff = (FLOAT64 *)persistant_ptr;
+ persistant_ptr = (SIZE_T)persistant_ptr + 16 * 1024;
- p_obj_drc->str_payload.pstr_qmf_filter->syn_buff = (FLOAT64*)persistant_ptr;
- persistant_ptr = (SIZE_T)persistant_ptr + 16*1024;
+ p_obj_drc->str_payload.pstr_qmf_filter->syn_buff = (FLOAT64 *)persistant_ptr;
+ persistant_ptr = (SIZE_T)persistant_ptr + 16 * 1024;
- p_obj_drc->p_state->persistant_ptr=(pVOID)persistant_ptr;
- return IA_NO_ERROR;
+ p_obj_drc->p_state->persistant_ptr = (pVOID)persistant_ptr;
+ return IA_NO_ERROR;
}
-VOID init_qmf_filt_bank(ia_drc_qmf_filt_struct *qmf_filt)
-{
-
- WORD32 l,k;
-
- FLOAT64 gain_ana =64.0 / QMF_FILT_RESOLUTION;
- FLOAT64 gain_syn =1.0 / 64.0;
- for ( l=0; l<2*QMF_FILT_RESOLUTION; l++ )
- {
- for ( k=0; k<QMF_FILT_RESOLUTION; k++ )
- {
- qmf_filt->syn_tab_real[l][k] = gain_syn * cos((0.0245436926) * (k+0.5) * (2*l-255.0));
- qmf_filt->syn_tab_imag[l][k] = gain_syn * sin((0.0245436926) * (k+0.5) * (2*l-255.0));
- qmf_filt->ana_tab_real[k][l] = gain_ana * cos((0.0245436926) * (k+0.5) * (2*l-1.0));
- qmf_filt->ana_tab_imag[k][l] = gain_ana * sin((0.0245436926) * (k+0.5) * (2*l-1.0));
- }
+VOID init_qmf_filt_bank(ia_drc_qmf_filt_struct *qmf_filt) {
+ WORD32 l, k;
+
+ FLOAT64 gain_ana = 64.0 / QMF_FILT_RESOLUTION;
+ FLOAT64 gain_syn = 1.0 / 64.0;
+ for (l = 0; l < 2 * QMF_FILT_RESOLUTION; l++) {
+ for (k = 0; k < QMF_FILT_RESOLUTION; k++) {
+ qmf_filt->syn_tab_real[l][k] =
+ gain_syn * cos((0.0245436926) * (k + 0.5) * (2 * l - 255.0));
+ qmf_filt->syn_tab_imag[l][k] =
+ gain_syn * sin((0.0245436926) * (k + 0.5) * (2 * l - 255.0));
+ qmf_filt->ana_tab_real[k][l] =
+ gain_ana * cos((0.0245436926) * (k + 0.5) * (2 * l - 1.0));
+ qmf_filt->ana_tab_imag[k][l] =
+ gain_ana * sin((0.0245436926) * (k + 0.5) * (2 * l - 1.0));
}
-
+ }
}
-
-
-
-
-IA_ERRORCODE impd_drc_init(ia_drc_api_struct *p_obj_drc){
- IA_ERRORCODE err_code = IA_NO_ERROR;
- WORD32 i,j;
-
- pVOID persistant_ptr =p_obj_drc->p_state->persistant_ptr;
-
- struct ia_bit_buf_struct *it_bit_buff;
-
- WORD32 decDownmixIdList[NUM_GAIN_DEC_INSTANCES] = { 0, 4 };
-
-
- p_obj_drc->p_state->delay_in_output =0;
- p_obj_drc->str_payload.pstr_selection_proc->first_frame=1;
-
-
- p_obj_drc->pstr_bit_buf = impd_create_init_bit_buf(&p_obj_drc->str_bit_buf, p_obj_drc->str_bit_handler.it_bit_buf, p_obj_drc->str_bit_handler.num_bytes_bs/8);
- it_bit_buff = p_obj_drc->pstr_bit_buf;
-
-
- err_code = impd_init_drc_bitstream_dec(p_obj_drc->str_payload.pstr_bitstream_dec,
- p_obj_drc->str_config.sampling_rate,
- p_obj_drc->str_config.frame_size,
- p_obj_drc->str_config.delay_mode,
- -1,
- 0);
-
-
-
- for (i=0; i<NUM_GAIN_DEC_INSTANCES; i++) {
- err_code = impd_init_drc_decode(p_obj_drc->str_config.frame_size,
- p_obj_drc->str_config.sampling_rate,
- p_obj_drc->str_config.gain_delay_samples,
- p_obj_drc->str_config.delay_mode,
- p_obj_drc->str_config.sub_band_domain_mode,
- p_obj_drc->str_payload.pstr_gain_dec[i]);
-
+IA_ERRORCODE impd_drc_init(ia_drc_api_struct *p_obj_drc) {
+ IA_ERRORCODE err_code = IA_NO_ERROR;
+ WORD32 i, j;
+
+ pVOID persistant_ptr = p_obj_drc->p_state->persistant_ptr;
+
+ struct ia_bit_buf_struct *it_bit_buff;
+
+ WORD32 decDownmixIdList[NUM_GAIN_DEC_INSTANCES] = {0, 4};
+
+ p_obj_drc->p_state->delay_in_output = 0;
+ p_obj_drc->str_payload.pstr_selection_proc->first_frame = 1;
+
+ p_obj_drc->pstr_bit_buf = impd_create_init_bit_buf(
+ &p_obj_drc->str_bit_buf, p_obj_drc->str_bit_handler.it_bit_buf,
+ p_obj_drc->str_bit_handler.num_bytes_bs / 8);
+ it_bit_buff = p_obj_drc->pstr_bit_buf;
+
+ err_code = impd_init_drc_bitstream_dec(
+ p_obj_drc->str_payload.pstr_bitstream_dec,
+ p_obj_drc->str_config.sampling_rate, p_obj_drc->str_config.frame_size,
+ p_obj_drc->str_config.delay_mode, -1, 0);
+
+ for (i = 0; i < NUM_GAIN_DEC_INSTANCES; i++) {
+ err_code = impd_init_drc_decode(p_obj_drc->str_config.frame_size,
+ p_obj_drc->str_config.sampling_rate,
+ p_obj_drc->str_config.gain_delay_samples,
+ p_obj_drc->str_config.delay_mode,
+ p_obj_drc->str_config.sub_band_domain_mode,
+ p_obj_drc->str_payload.pstr_gain_dec[i]);
+ }
+
+ if (p_obj_drc->str_config.interface_bitstream_present) {
+ err_code = impd_drc_dec_interface_add_effect_type(
+ p_obj_drc->str_payload.pstr_drc_interface,
+ p_obj_drc->str_config.effect_type,
+ p_obj_drc->str_config.target_loudness,
+ p_obj_drc->str_config.loud_norm_flag);
+
+ if (err_code != IA_NO_ERROR) return err_code;
+
+ err_code = impd_drc_uni_selction_proc_init(
+ p_obj_drc->str_payload.pstr_selection_proc, 0,
+ p_obj_drc->str_payload.pstr_drc_interface,
+ p_obj_drc->str_config.sub_band_domain_mode);
+ if (err_code != IA_NO_ERROR) return err_code;
+
+ if (p_obj_drc->str_payload.pstr_drc_interface
+ ->loudness_norm_parameter_interface_flag &&
+ p_obj_drc->str_payload.pstr_drc_interface->loudness_norm_param_interface
+ .peak_limiter) {
+ p_obj_drc->str_config.peak_limiter = 1;
}
-
- if (p_obj_drc->str_config.interface_bitstream_present) {
-
-
- err_code = impd_drc_dec_interface_add_effect_type(p_obj_drc->str_payload.pstr_drc_interface,
- p_obj_drc->str_config.effect_type,
- p_obj_drc->str_config.target_loudness,
- p_obj_drc->str_config.loud_norm_flag);
-
-
-
- if (err_code!=IA_NO_ERROR)
- return err_code;
-
- err_code = impd_drc_uni_selction_proc_init(p_obj_drc->str_payload.pstr_selection_proc,
- 0,
- p_obj_drc->str_payload.pstr_drc_interface,
- p_obj_drc->str_config.sub_band_domain_mode);
- if (err_code!=IA_NO_ERROR)
- return err_code;
-
- if (p_obj_drc->str_payload.pstr_drc_interface->loudness_norm_parameter_interface_flag && p_obj_drc->str_payload.pstr_drc_interface->loudness_norm_param_interface.peak_limiter) {
- p_obj_drc->str_config.peak_limiter = 1;
- }
+ } else {
+ err_code = impd_set_default_params_selection_process(
+ p_obj_drc->str_payload.pstr_drc_sel_proc_params);
+ if (err_code != IA_NO_ERROR) return err_code;
+ err_code =
+ impd_set_custom_params(p_obj_drc->str_config.control_parameter_index,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_params);
+ if (err_code != IA_NO_ERROR) return err_code;
+ err_code = impd_eval_custom_params_selection_process(
+ p_obj_drc->str_payload.pstr_drc_sel_proc_params);
+ if (err_code != IA_NO_ERROR) return err_code;
+ err_code = impd_drc_uni_selction_proc_init(
+ p_obj_drc->str_payload.pstr_selection_proc,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_params, 0,
+ p_obj_drc->str_config.sub_band_domain_mode);
+ if (err_code != IA_NO_ERROR) return err_code;
+
+ if (p_obj_drc->str_payload.pstr_drc_sel_proc_params->peak_limiter) {
+ p_obj_drc->str_config.peak_limiter = 1;
}
- else {
-
- err_code = impd_set_default_params_selection_process(p_obj_drc->str_payload.pstr_drc_sel_proc_params);
- if (err_code!=IA_NO_ERROR)
- return err_code;
- err_code = impd_set_custom_params(p_obj_drc->str_config.control_parameter_index,p_obj_drc->str_payload.pstr_drc_sel_proc_params);
- if (err_code!=IA_NO_ERROR)
- return err_code;
- err_code = impd_eval_custom_params_selection_process(p_obj_drc->str_payload.pstr_drc_sel_proc_params);
- if (err_code!=IA_NO_ERROR)
- return err_code;
- err_code = impd_drc_uni_selction_proc_init(p_obj_drc->str_payload.pstr_selection_proc, p_obj_drc->str_payload.pstr_drc_sel_proc_params, 0, p_obj_drc->str_config.sub_band_domain_mode);
- if (err_code!=IA_NO_ERROR)
- return err_code;
-
- if (p_obj_drc->str_payload.pstr_drc_sel_proc_params->peak_limiter) {
- p_obj_drc->str_config.peak_limiter = 1;
- }
+ }
+ p_obj_drc->str_payload.pstr_loudness_info->loudness_info_album_count = 0;
+ p_obj_drc->str_payload.pstr_loudness_info->loudness_info_count = 0;
+ p_obj_drc->str_payload.pstr_loudness_info->loudness_info_set_ext_present = 0;
+ p_obj_drc->p_state->ui_exe_done = 0;
+
+ if (p_obj_drc->str_config.bitstream_file_format ==
+ BITSTREAM_FILE_FORMAT_SPLIT) {
+ err_code = impd_process_drc_bitstream_dec_config(
+ p_obj_drc->str_payload.pstr_bitstream_dec, p_obj_drc->pstr_bit_buf,
+ p_obj_drc->str_payload.pstr_drc_config,
+ &p_obj_drc->str_bit_handler.bitstream_drc_config[0],
+ p_obj_drc->str_bit_handler.num_bytes_bs_drc_config);
+
+ if (err_code == 1) {
+ err_code = impd_drc_set_default_bitstream_config(
+ p_obj_drc->str_payload.pstr_drc_config);
+ p_obj_drc->str_payload.pstr_drc_config->channel_layout
+ .base_channel_count = p_obj_drc->str_config.num_ch_in;
}
- p_obj_drc->str_payload.pstr_loudness_info->loudness_info_album_count=0;
- p_obj_drc->str_payload.pstr_loudness_info->loudness_info_count=0;
- p_obj_drc->str_payload.pstr_loudness_info->loudness_info_set_ext_present=0;
- p_obj_drc->p_state->ui_exe_done =0;
-
- if(p_obj_drc->str_config.bitstream_file_format == BITSTREAM_FILE_FORMAT_SPLIT) {
-
- err_code = impd_process_drc_bitstream_dec_config(p_obj_drc->str_payload.pstr_bitstream_dec,
- p_obj_drc->pstr_bit_buf,
- p_obj_drc->str_payload.pstr_drc_config,
- &p_obj_drc->str_bit_handler.bitstream_drc_config[0],
- p_obj_drc->str_bit_handler.num_bytes_bs_drc_config);
-
-
-
- if(err_code==1)
- {
- err_code=impd_drc_set_default_bitstream_config(p_obj_drc->str_payload.pstr_drc_config);
- p_obj_drc->str_payload.pstr_drc_config->channel_layout.base_channel_count =
- p_obj_drc->str_config.num_ch_in;
- }
-
-
- if (err_code!=IA_NO_ERROR)
- return err_code;
- err_code = impd_process_drc_bitstream_dec_loudness_info_set(p_obj_drc->pstr_bit_buf,
- p_obj_drc->str_payload.pstr_loudness_info,
- &p_obj_drc->str_bit_handler.bitstream_loudness_info[0],
- p_obj_drc->str_bit_handler.num_bytes_bs_loudness_info
- );
- if (err_code!=IA_NO_ERROR)
- return err_code;
+ if (err_code != IA_NO_ERROR) return err_code;
+ err_code = impd_process_drc_bitstream_dec_loudness_info_set(
+ p_obj_drc->pstr_bit_buf, p_obj_drc->str_payload.pstr_loudness_info,
+ &p_obj_drc->str_bit_handler.bitstream_loudness_info[0],
+ p_obj_drc->str_bit_handler.num_bytes_bs_loudness_info);
+ if (err_code != IA_NO_ERROR) return err_code;
+
+ } else {
+ err_code = impd_process_drc_bitstream_dec(
+ p_obj_drc->str_payload.pstr_bitstream_dec, p_obj_drc->pstr_bit_buf,
+ p_obj_drc->str_payload.pstr_drc_config,
+ p_obj_drc->str_payload.pstr_loudness_info,
+ &p_obj_drc->str_bit_handler
+ .it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs],
+ p_obj_drc->str_bit_handler.num_bytes_bs,
+ p_obj_drc->str_bit_handler.num_bits_offset_bs,
+ &p_obj_drc->str_bit_handler.num_bits_read_bs);
+
+ if (err_code > PROC_COMPLETE) return -1;
+
+ p_obj_drc->str_bit_handler.num_bytes_read_bs =
+ (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3);
+ p_obj_drc->str_bit_handler.num_bits_offset_bs =
+ (p_obj_drc->str_bit_handler.num_bits_read_bs & 7);
+ p_obj_drc->str_bit_handler.byte_index_bs +=
+ p_obj_drc->str_bit_handler.num_bytes_read_bs;
+ p_obj_drc->str_bit_handler.num_bytes_bs -=
+ p_obj_drc->str_bit_handler.num_bytes_read_bs;
+ }
+
+ err_code = impd_drc_uni_sel_proc_process(
+ p_obj_drc->str_payload.pstr_selection_proc,
+ p_obj_drc->str_payload.pstr_drc_config,
+ p_obj_drc->str_payload.pstr_loudness_info,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output);
+ if (err_code != IA_NO_ERROR) return err_code;
+
+ for (i = 0; i < NUM_GAIN_DEC_INSTANCES; i++) {
+ WORD32 audio_num_chan = 0;
+ WORD32 numMatchingDrcSets = 0;
+ WORD32 matchingDrcSetIds[3], matchingDownmixIds[3];
+ for (j = 0;
+ j < p_obj_drc->str_payload.pstr_drc_sel_proc_output->num_sel_drc_sets;
+ j++) {
+ if (impd_match_downmix(p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->sel_downmix_ids[j],
+ decDownmixIdList[i])) {
+ matchingDrcSetIds[numMatchingDrcSets] =
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output->sel_drc_set_ids[j];
+ matchingDownmixIds[numMatchingDrcSets] =
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output->sel_downmix_ids[j];
+ numMatchingDrcSets++;
+ }
}
- else {
- err_code = impd_process_drc_bitstream_dec(p_obj_drc->str_payload.pstr_bitstream_dec,
- p_obj_drc->pstr_bit_buf,
- p_obj_drc->str_payload.pstr_drc_config,
- p_obj_drc->str_payload.pstr_loudness_info,
- &p_obj_drc->str_bit_handler.it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs],
- p_obj_drc->str_bit_handler.num_bytes_bs,
- p_obj_drc->str_bit_handler.num_bits_offset_bs,
- &p_obj_drc->str_bit_handler.num_bits_read_bs);
-
- if (err_code > PROC_COMPLETE)
- return -1;
-
- p_obj_drc->str_bit_handler.num_bytes_read_bs = (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3);
- p_obj_drc->str_bit_handler.num_bits_offset_bs = (p_obj_drc->str_bit_handler.num_bits_read_bs & 7);
- p_obj_drc->str_bit_handler.byte_index_bs += p_obj_drc->str_bit_handler.num_bytes_read_bs;
- p_obj_drc->str_bit_handler.num_bytes_bs -= p_obj_drc->str_bit_handler.num_bytes_read_bs;
+ if (i == 0) {
+ if (p_obj_drc->str_config.num_ch_in !=
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output->base_channel_count)
+
+ return -1;
+ audio_num_chan = p_obj_drc->str_config.num_ch_in;
+ } else if (i == 1) {
+ p_obj_drc->str_config.num_ch_out =
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output->target_channel_count;
+ audio_num_chan = p_obj_drc->str_config.num_ch_out;
}
-
- err_code = impd_drc_uni_sel_proc_process(p_obj_drc->str_payload.pstr_selection_proc,
- p_obj_drc->str_payload.pstr_drc_config,
- p_obj_drc->str_payload.pstr_loudness_info,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output);
- if (err_code!=IA_NO_ERROR)
- return err_code;
-
- for (i=0; i<NUM_GAIN_DEC_INSTANCES; i++){
-
- WORD32 audio_num_chan=0;
- WORD32 numMatchingDrcSets = 0;
- WORD32 matchingDrcSetIds[3], matchingDownmixIds[3];
- for (j=0; j<p_obj_drc->str_payload.pstr_drc_sel_proc_output->num_sel_drc_sets; j++) {
-
- if (impd_match_downmix(p_obj_drc->str_payload.pstr_drc_sel_proc_output->sel_downmix_ids[j], decDownmixIdList[i])) {
- matchingDrcSetIds[numMatchingDrcSets] = p_obj_drc->str_payload.pstr_drc_sel_proc_output->sel_drc_set_ids[j];
- matchingDownmixIds[numMatchingDrcSets] = p_obj_drc->str_payload.pstr_drc_sel_proc_output->sel_downmix_ids[j];
- numMatchingDrcSets++;
- }
- }
- if (i==0)
- {
- if (p_obj_drc->str_config.num_ch_in != p_obj_drc->str_payload.pstr_drc_sel_proc_output->base_channel_count)
-
- return -1;
- audio_num_chan = p_obj_drc->str_config.num_ch_in;
- } else if (i==1)
- {
- p_obj_drc->str_config.num_ch_out = p_obj_drc->str_payload.pstr_drc_sel_proc_output->target_channel_count;
- audio_num_chan = p_obj_drc->str_config.num_ch_out;
- }
-
- err_code = impd_init_drc_decode_post_config(audio_num_chan,
- matchingDrcSetIds,
- matchingDownmixIds,
- numMatchingDrcSets
- , p_obj_drc->str_payload.pstr_drc_sel_proc_output->sel_eq_set_ids[i]
-
- , p_obj_drc->str_payload.pstr_gain_dec[i]
- , p_obj_drc->str_payload.pstr_drc_config
- , p_obj_drc->str_payload.pstr_loudness_info
- , &persistant_ptr
- );
-
- impd_get_parametric_drc_delay(p_obj_drc->str_payload.pstr_gain_dec[i], p_obj_drc->str_payload.pstr_drc_config, & p_obj_drc->str_config.parametric_drc_delay_gain_dec_instance, &p_obj_drc->str_config.parametric_drc_delay_max);
- impd_get_eq_delay(p_obj_drc->str_payload.pstr_gain_dec[i], p_obj_drc->str_payload.pstr_drc_config, & p_obj_drc->str_config.eq_delay_gain_dec_instance, & p_obj_drc->str_config.eq_delay_max);
- p_obj_drc->str_config.parametric_drc_delay += p_obj_drc->str_config.parametric_drc_delay_gain_dec_instance;
- p_obj_drc->str_config.eq_delay += p_obj_drc->str_config.eq_delay_gain_dec_instance;
-
+ err_code = impd_init_drc_decode_post_config(
+ audio_num_chan, matchingDrcSetIds, matchingDownmixIds,
+ numMatchingDrcSets,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output->sel_eq_set_ids[i]
+
+ ,
+ p_obj_drc->str_payload.pstr_gain_dec[i],
+ p_obj_drc->str_payload.pstr_drc_config,
+ p_obj_drc->str_payload.pstr_loudness_info, &persistant_ptr);
+
+ impd_get_parametric_drc_delay(
+ p_obj_drc->str_payload.pstr_gain_dec[i],
+ p_obj_drc->str_payload.pstr_drc_config,
+ &p_obj_drc->str_config.parametric_drc_delay_gain_dec_instance,
+ &p_obj_drc->str_config.parametric_drc_delay_max);
+ impd_get_eq_delay(p_obj_drc->str_payload.pstr_gain_dec[i],
+ p_obj_drc->str_payload.pstr_drc_config,
+ &p_obj_drc->str_config.eq_delay_gain_dec_instance,
+ &p_obj_drc->str_config.eq_delay_max);
+ p_obj_drc->str_config.parametric_drc_delay +=
+ p_obj_drc->str_config.parametric_drc_delay_gain_dec_instance;
+ p_obj_drc->str_config.eq_delay +=
+ p_obj_drc->str_config.eq_delay_gain_dec_instance;
+ }
+
+ {
+ if (p_obj_drc->str_config.parametric_drc_delay_max == -1) {
+ p_obj_drc->str_config.parametric_drc_delay_max =
+ PARAMETRIC_DRC_DELAY_MAX_DEFAULT;
}
-
- {
- if (p_obj_drc->str_config.parametric_drc_delay_max == -1) {
- p_obj_drc->str_config.parametric_drc_delay_max = PARAMETRIC_DRC_DELAY_MAX_DEFAULT;
- }
- if (p_obj_drc->str_config.eq_delay_max == -1) {
- p_obj_drc->str_config.eq_delay_max = EQ_DELAY_MAX_DEFAULT;
- }
-
- if (!p_obj_drc->str_config.constant_delay_on) {
-
- p_obj_drc->p_state->delay_in_output += p_obj_drc->str_config.parametric_drc_delay + p_obj_drc->str_config.eq_delay + p_obj_drc->str_config.audio_delay_samples;
- p_obj_drc->str_config.delay_line_samples = p_obj_drc->str_config.audio_delay_samples;
-
- if (!p_obj_drc->str_config.absorb_delay_on) {
- p_obj_drc->p_state->delay_in_output = 0;
- }
- } else {
- p_obj_drc->p_state->delay_in_output += p_obj_drc->str_config.parametric_drc_delay_max + p_obj_drc->str_config.eq_delay_max + p_obj_drc->str_config.audio_delay_samples;
- p_obj_drc->str_config.delay_line_samples = p_obj_drc->p_state->delay_in_output - p_obj_drc->str_config.parametric_drc_delay + p_obj_drc->str_config.eq_delay;
-
- if (!p_obj_drc->str_config.absorb_delay_on ) {
- p_obj_drc->p_state->delay_in_output = 0;
- }
- }
-
- }
- if(p_obj_drc->str_config.dec_type==1)
- {
- init_qmf_filt_bank(p_obj_drc->str_payload.pstr_qmf_filter);
+ if (p_obj_drc->str_config.eq_delay_max == -1) {
+ p_obj_drc->str_config.eq_delay_max = EQ_DELAY_MAX_DEFAULT;
}
- if (p_obj_drc->str_config.peak_limiter)
- {
- impd_peak_limiter_init(p_obj_drc->str_payload.pstr_peak_limiter,
- DEFAULT_ATTACK_TIME_MS,
- DEFAULT_RELEASE_TIME_MS,
- LIM_DEFAULT_THRESHOLD,
- p_obj_drc->str_config.num_ch_out,
- p_obj_drc->str_config.sampling_rate,
- p_obj_drc->str_payload.pstr_peak_limiter->buffer);
+ if (!p_obj_drc->str_config.constant_delay_on) {
+ p_obj_drc->p_state->delay_in_output +=
+ p_obj_drc->str_config.parametric_drc_delay +
+ p_obj_drc->str_config.eq_delay +
+ p_obj_drc->str_config.audio_delay_samples;
+ p_obj_drc->str_config.delay_line_samples =
+ p_obj_drc->str_config.audio_delay_samples;
+
+ if (!p_obj_drc->str_config.absorb_delay_on) {
+ p_obj_drc->p_state->delay_in_output = 0;
+ }
+ } else {
+ p_obj_drc->p_state->delay_in_output +=
+ p_obj_drc->str_config.parametric_drc_delay_max +
+ p_obj_drc->str_config.eq_delay_max +
+ p_obj_drc->str_config.audio_delay_samples;
+ p_obj_drc->str_config.delay_line_samples =
+ p_obj_drc->p_state->delay_in_output -
+ p_obj_drc->str_config.parametric_drc_delay +
+ p_obj_drc->str_config.eq_delay;
+
+ if (!p_obj_drc->str_config.absorb_delay_on) {
+ p_obj_drc->p_state->delay_in_output = 0;
+ }
}
-
- return IA_NO_ERROR;
+ }
+ if (p_obj_drc->str_config.dec_type == 1) {
+ init_qmf_filt_bank(p_obj_drc->str_payload.pstr_qmf_filter);
+ }
+
+ if (p_obj_drc->str_config.peak_limiter) {
+ impd_peak_limiter_init(
+ p_obj_drc->str_payload.pstr_peak_limiter, DEFAULT_ATTACK_TIME_MS,
+ DEFAULT_RELEASE_TIME_MS, LIM_DEFAULT_THRESHOLD,
+ p_obj_drc->str_config.num_ch_out, p_obj_drc->str_config.sampling_rate,
+ p_obj_drc->str_payload.pstr_peak_limiter->buffer);
+ }
+
+ return IA_NO_ERROR;
}
-
-
-
-
-
-
-
diff --git a/decoder/drc_src/impd_drc_interface.h b/decoder/drc_src/impd_drc_interface.h
index 9062eb3..a0e7039 100644
--- a/decoder/drc_src/impd_drc_interface.h
+++ b/decoder/drc_src/impd_drc_interface.h
@@ -21,112 +21,113 @@
#define IMPD_DRC_INTERFACE_H
typedef struct {
- WORD32 loudness_eq_request_flag;
- WORD32 loudness_eq_request;
- WORD32 sensitivity_flag;
- FLOAT32 sensitivity;
- WORD32 playback_gain_flag;
- FLOAT32 playback_gain;
+ WORD32 loudness_eq_request_flag;
+ WORD32 loudness_eq_request;
+ WORD32 sensitivity_flag;
+ FLOAT32 sensitivity;
+ WORD32 playback_gain_flag;
+ FLOAT32 playback_gain;
} ia_loudness_eq_parameter_interface_struct;
typedef struct {
- WORD32 eq_set_purpose_request;
+ WORD32 eq_set_purpose_request;
} ia_equalization_ctrl_interface_struct;
typedef struct {
- WORD32 ext_size_bits;
- WORD32 ext_bit_size;
- WORD32 uni_drc_interface_ext_type;
+ WORD32 ext_size_bits;
+ WORD32 ext_bit_size;
+ WORD32 uni_drc_interface_ext_type;
} ia_specific_interface_extension_struct;
typedef struct {
- WORD32 interface_ext_count;
- ia_specific_interface_extension_struct specific_interface_ext[EXT_COUNT_MAX];
- WORD32 loudness_eq_parameter_interface_flag;
- WORD32 eq_ctrl_interface_flag;
- ia_loudness_eq_parameter_interface_struct loudness_eq_parameter_interface;
- ia_equalization_ctrl_interface_struct eq_ctrl_interface;
+ WORD32 interface_ext_count;
+ ia_specific_interface_extension_struct specific_interface_ext[EXT_COUNT_MAX];
+ WORD32 loudness_eq_parameter_interface_flag;
+ WORD32 eq_ctrl_interface_flag;
+ ia_loudness_eq_parameter_interface_struct loudness_eq_parameter_interface;
+ ia_equalization_ctrl_interface_struct eq_ctrl_interface;
} ia_drc_uni_interface_ext_struct;
typedef struct {
- WORD32 change_compress;
- WORD32 change_boost;
- FLOAT32 compress;
- FLOAT32 boost;
- WORD32 change_drc_characteristic_target;
- WORD32 drc_characteristic_target;
+ WORD32 change_compress;
+ WORD32 change_boost;
+ FLOAT32 compress;
+ FLOAT32 boost;
+ WORD32 change_drc_characteristic_target;
+ WORD32 drc_characteristic_target;
} ia_drc_parameter_interface_struct;
typedef struct {
- WORD32 dynamic_range_control_on;
- WORD32 num_drc_feature_requests;
- WORD32 drc_feature_req_type[MAX_NUM_DRC_FEATURE_REQUESTS];
- WORD32 requested_num_drc_effects[MAX_NUM_DRC_FEATURE_REQUESTS];
- WORD32 desired_num_drc_effects_of_requested[MAX_NUM_DRC_FEATURE_REQUESTS];
- WORD32 requested_drc_effect_type[MAX_NUM_DRC_FEATURE_REQUESTS][MAX_NUM_DRC_EFFECT_TYPE_REQUESTS];
- WORD32 requested_dyn_rng_measurement_type[MAX_NUM_DRC_FEATURE_REQUESTS];
- WORD32 requested_dyn_range_is_single_val_flag[MAX_NUM_DRC_FEATURE_REQUESTS];
- FLOAT32 requested_dyn_range_value[MAX_NUM_DRC_FEATURE_REQUESTS];
- FLOAT32 requested_dyn_range_min_val[MAX_NUM_DRC_FEATURE_REQUESTS];
- FLOAT32 requested_dyn_range_max_val[MAX_NUM_DRC_FEATURE_REQUESTS];
- WORD32 requested_drc_characteristic[MAX_NUM_DRC_FEATURE_REQUESTS];
+ WORD32 dynamic_range_control_on;
+ WORD32 num_drc_feature_requests;
+ WORD32 drc_feature_req_type[MAX_NUM_DRC_FEATURE_REQUESTS];
+ WORD32 requested_num_drc_effects[MAX_NUM_DRC_FEATURE_REQUESTS];
+ WORD32 desired_num_drc_effects_of_requested[MAX_NUM_DRC_FEATURE_REQUESTS];
+ WORD32 requested_drc_effect_type[MAX_NUM_DRC_FEATURE_REQUESTS]
+ [MAX_NUM_DRC_EFFECT_TYPE_REQUESTS];
+ WORD32 requested_dyn_rng_measurement_type[MAX_NUM_DRC_FEATURE_REQUESTS];
+ WORD32 requested_dyn_range_is_single_val_flag[MAX_NUM_DRC_FEATURE_REQUESTS];
+ FLOAT32 requested_dyn_range_value[MAX_NUM_DRC_FEATURE_REQUESTS];
+ FLOAT32 requested_dyn_range_min_val[MAX_NUM_DRC_FEATURE_REQUESTS];
+ FLOAT32 requested_dyn_range_max_val[MAX_NUM_DRC_FEATURE_REQUESTS];
+ WORD32 requested_drc_characteristic[MAX_NUM_DRC_FEATURE_REQUESTS];
} ia_dyn_rng_ctrl_interface_struct;
typedef struct {
- WORD32 album_mode;
- WORD32 peak_limiter;
- WORD32 change_loudness_deviation_max;
- WORD32 loudness_deviation_max;
- WORD32 change_loudness_measur_method;
- WORD32 loudness_measurement_method;
- WORD32 change_loudness_measur_system;
- WORD32 loudness_measurement_system;
- WORD32 change_loudness_measur_pre_proc;
- WORD32 loudness_measurement_pre_proc;
- WORD32 change_device_cut_off_freq;
- WORD32 device_cut_off_frequency;
- WORD32 change_loudness_norm_gain_db_max;
- FLOAT32 loudness_norm_gain_db_max;
- WORD32 change_loudness_norm_gain_modification_db;
- FLOAT32 loudness_norm_gain_modification_db;
- WORD32 change_output_peak_level_max;
- FLOAT32 output_peak_level_max;
+ WORD32 album_mode;
+ WORD32 peak_limiter;
+ WORD32 change_loudness_deviation_max;
+ WORD32 loudness_deviation_max;
+ WORD32 change_loudness_measur_method;
+ WORD32 loudness_measurement_method;
+ WORD32 change_loudness_measur_system;
+ WORD32 loudness_measurement_system;
+ WORD32 change_loudness_measur_pre_proc;
+ WORD32 loudness_measurement_pre_proc;
+ WORD32 change_device_cut_off_freq;
+ WORD32 device_cut_off_frequency;
+ WORD32 change_loudness_norm_gain_db_max;
+ FLOAT32 loudness_norm_gain_db_max;
+ WORD32 change_loudness_norm_gain_modification_db;
+ FLOAT32 loudness_norm_gain_modification_db;
+ WORD32 change_output_peak_level_max;
+ FLOAT32 output_peak_level_max;
} ia_loudness_norm_parameter_interface_struct;
typedef struct {
- WORD32 loudness_normalization_on;
- FLOAT32 target_loudness;
+ WORD32 loudness_normalization_on;
+ FLOAT32 target_loudness;
} ia_loudness_norm_ctrl_interface_struct;
typedef struct {
- WORD32 target_config_request_type;
- WORD32 num_downmix_id_requests;
- WORD32 requested_dwnmix_id[MAX_NUM_DOWNMIX_ID_REQUESTS];
- WORD32 requested_target_layout;
- WORD32 requested_target_ch_count;
+ WORD32 target_config_request_type;
+ WORD32 num_downmix_id_requests;
+ WORD32 requested_dwnmix_id[MAX_NUM_DOWNMIX_ID_REQUESTS];
+ WORD32 requested_target_layout;
+ WORD32 requested_target_ch_count;
} ia_system_interface_struct;
typedef struct {
- WORD32 interface_signat_type;
- WORD32 interface_signat_data_len;
- UWORD32 interface_signat_data[MAX_SIGNATURE_DATA_LENGTH_PLUS_ONE*8];
+ WORD32 interface_signat_type;
+ WORD32 interface_signat_data_len;
+ UWORD32 interface_signat_data[MAX_SIGNATURE_DATA_LENGTH_PLUS_ONE * 8];
} ia_drc_uni_interface_signat_struct;
-typedef struct ia_drc_interface_struct{
- WORD32 interface_signat_flag;
- WORD32 system_interface_flag;
- WORD32 loudness_norm_ctrl_interface_flag;
- WORD32 loudness_norm_parameter_interface_flag;
- WORD32 drc_interface_flag;
- WORD32 drc_parameter_interface_flag;
- WORD32 drc_uni_interface_ext_flag;
- ia_drc_uni_interface_signat_struct drc_uni_interface_signature;
- ia_system_interface_struct system_interface;
- ia_loudness_norm_ctrl_interface_struct loudness_norm_ctrl_interface;
- ia_loudness_norm_parameter_interface_struct loudness_norm_param_interface;
- ia_dyn_rng_ctrl_interface_struct drc_ctrl_interface;
- ia_drc_parameter_interface_struct drc_parameter_interface;
- ia_drc_uni_interface_ext_struct drc_uni_interface_ext;
+typedef struct ia_drc_interface_struct {
+ WORD32 interface_signat_flag;
+ WORD32 system_interface_flag;
+ WORD32 loudness_norm_ctrl_interface_flag;
+ WORD32 loudness_norm_parameter_interface_flag;
+ WORD32 drc_interface_flag;
+ WORD32 drc_parameter_interface_flag;
+ WORD32 drc_uni_interface_ext_flag;
+ ia_drc_uni_interface_signat_struct drc_uni_interface_signature;
+ ia_system_interface_struct system_interface;
+ ia_loudness_norm_ctrl_interface_struct loudness_norm_ctrl_interface;
+ ia_loudness_norm_parameter_interface_struct loudness_norm_param_interface;
+ ia_dyn_rng_ctrl_interface_struct drc_ctrl_interface;
+ ia_drc_parameter_interface_struct drc_parameter_interface;
+ ia_drc_uni_interface_ext_struct drc_uni_interface_ext;
} ia_drc_interface_struct;
#endif
diff --git a/decoder/drc_src/impd_drc_interface_decoder.c b/decoder/drc_src/impd_drc_interface_decoder.c
index dd0d5e6..35b1f3c 100644
--- a/decoder/drc_src/impd_drc_interface_decoder.c
+++ b/decoder/drc_src/impd_drc_interface_decoder.c
@@ -30,139 +30,148 @@
#include "impd_drc_parser_interface.h"
WORD32
-impd_drc_dec_interface_process(
- ia_bit_buf_struct* it_bit_buff,
- ia_drc_interface_struct* pstr_drc_interface,
- UWORD8* it_bit_buf,
- WORD32 num_bit_stream_bits,
- WORD32* num_bits_read)
-{
- WORD32 err = 0;
-
- if (it_bit_buff != NULL && num_bit_stream_bits) {
- it_bit_buff = impd_create_init_bit_buf(it_bit_buff, it_bit_buf, num_bit_stream_bits/8);
+impd_drc_dec_interface_process(ia_bit_buf_struct* it_bit_buff,
+ ia_drc_interface_struct* pstr_drc_interface,
+ UWORD8* it_bit_buf, WORD32 num_bit_stream_bits,
+ WORD32* num_bits_read) {
+ WORD32 err = 0;
- } else {
- return -1;
- }
+ if (it_bit_buff != NULL && num_bit_stream_bits) {
+ it_bit_buff = impd_create_init_bit_buf(it_bit_buff, it_bit_buf,
+ num_bit_stream_bits / 8);
- err = impd_unidrc_interface_read(it_bit_buff, pstr_drc_interface);
- if (err) return(err);
+ } else {
+ return -1;
+ }
- *num_bits_read = (it_bit_buff->size ) - it_bit_buff->cnt_bits;
+ err = impd_unidrc_interface_read(it_bit_buff, pstr_drc_interface);
+ if (err) return (err);
- return err;
+ *num_bits_read = (it_bit_buff->size) - it_bit_buff->cnt_bits;
+ return err;
}
-
WORD32
-impd_drc_dec_interface_add_effect_type(ia_drc_interface_struct* pstr_drc_interface,
- WORD32 drc_effect_type,
- WORD32 target_loudness,
- WORD32 loud_norm)
-{
- WORD32 err = 0;
- WORD32 i = 0;
-
- if (pstr_drc_interface != NULL)
- {
- pstr_drc_interface->interface_signat_flag = 0;
- for(i=0;i<MAX_SIGNATURE_DATA_LENGTH_PLUS_ONE * 8;i++)
- pstr_drc_interface->drc_uni_interface_signature.interface_signat_data[i] = 0;
-
- pstr_drc_interface->drc_uni_interface_signature.interface_signat_data_len = 0;
-
- pstr_drc_interface->system_interface_flag = 1;
-
- pstr_drc_interface->system_interface.target_config_request_type = 0;
- pstr_drc_interface->system_interface.num_downmix_id_requests = 0;
- for (i = 0; i < MAX_NUM_DOWNMIX_ID_REQUESTS; i++)
- {
- pstr_drc_interface->system_interface.requested_dwnmix_id[i] = 0;
- }
- pstr_drc_interface->system_interface.requested_target_layout = 0;
- pstr_drc_interface->system_interface.requested_target_ch_count = 0;
-
- pstr_drc_interface->loudness_norm_ctrl_interface_flag= 1;
- if(loud_norm==1)
- {
- pstr_drc_interface->loudness_norm_ctrl_interface.loudness_normalization_on = 1;
- }
- else
- {
- pstr_drc_interface->loudness_norm_ctrl_interface.loudness_normalization_on = 0;
- }
- pstr_drc_interface->loudness_norm_ctrl_interface.target_loudness = (FLOAT32)target_loudness;
-
- pstr_drc_interface->loudness_norm_parameter_interface_flag = 1;
- pstr_drc_interface->loudness_norm_param_interface.album_mode = 0;
- pstr_drc_interface->loudness_norm_param_interface.peak_limiter = 0;
- pstr_drc_interface->loudness_norm_param_interface.change_loudness_deviation_max = 1;
- pstr_drc_interface->loudness_norm_param_interface.loudness_deviation_max = 63;
- pstr_drc_interface->loudness_norm_param_interface.change_loudness_measur_method = 1;
- pstr_drc_interface->loudness_norm_param_interface.loudness_measurement_method = 1;
- pstr_drc_interface->loudness_norm_param_interface.change_loudness_measur_system = 1;
- pstr_drc_interface->loudness_norm_param_interface.loudness_measurement_system = 1;
- pstr_drc_interface->loudness_norm_param_interface.change_loudness_measur_pre_proc = 0;
- pstr_drc_interface->loudness_norm_param_interface.loudness_measurement_pre_proc = 0;
- pstr_drc_interface->loudness_norm_param_interface.change_device_cut_off_freq = 1;
- pstr_drc_interface->loudness_norm_param_interface.device_cut_off_frequency = 20;
- pstr_drc_interface->loudness_norm_param_interface.change_loudness_norm_gain_db_max = 1;
- pstr_drc_interface->loudness_norm_param_interface.loudness_norm_gain_db_max = 1000.0;
- pstr_drc_interface->loudness_norm_param_interface.change_loudness_norm_gain_modification_db = 1;
- pstr_drc_interface->loudness_norm_param_interface.loudness_norm_gain_modification_db = 0.0;
- pstr_drc_interface->loudness_norm_param_interface.change_output_peak_level_max = 1;
- pstr_drc_interface->loudness_norm_param_interface.output_peak_level_max = 0.0;
-
- pstr_drc_interface->drc_interface_flag = 1;
- if(drc_effect_type==-1)
- {
- pstr_drc_interface->drc_ctrl_interface.dynamic_range_control_on=0;
- pstr_drc_interface->drc_ctrl_interface.requested_drc_effect_type[0][0] = 0;
- }
- else if(drc_effect_type==0)
- {
- pstr_drc_interface->drc_ctrl_interface.dynamic_range_control_on=1;
- pstr_drc_interface->drc_ctrl_interface.num_drc_feature_requests = 0;
- }
- else
- {
- pstr_drc_interface->drc_ctrl_interface.dynamic_range_control_on = 1;
- pstr_drc_interface->drc_ctrl_interface.requested_drc_effect_type[0][0] = drc_effect_type;
- pstr_drc_interface->drc_ctrl_interface.num_drc_feature_requests = 3;
- pstr_drc_interface->drc_ctrl_interface.drc_feature_req_type[0] = 0;
- pstr_drc_interface->drc_ctrl_interface.drc_feature_req_type[1] = 1;
- pstr_drc_interface->drc_ctrl_interface.drc_feature_req_type[2] = 2;
- pstr_drc_interface->drc_ctrl_interface.requested_num_drc_effects[0] = 1;
- pstr_drc_interface->drc_ctrl_interface.desired_num_drc_effects_of_requested[0] = 1;
- }
-
- pstr_drc_interface->drc_ctrl_interface.requested_dyn_rng_measurement_type[0] = 0;
- pstr_drc_interface->drc_ctrl_interface.requested_dyn_range_is_single_val_flag[0] = 0;
- pstr_drc_interface->drc_ctrl_interface.requested_dyn_range_is_single_val_flag[1] = 0;
- pstr_drc_interface->drc_ctrl_interface.requested_dyn_range_min_val[1] = 3.0f;
- pstr_drc_interface->drc_ctrl_interface.requested_dyn_range_max_val[1] = 10.0f;
- pstr_drc_interface->drc_ctrl_interface.requested_drc_characteristic[2] = 3;
-
- pstr_drc_interface->drc_parameter_interface_flag = 1;
- pstr_drc_interface->drc_parameter_interface.change_compress = 1;
- pstr_drc_interface->drc_parameter_interface.change_boost = 1;
- pstr_drc_interface->drc_parameter_interface.compress = 1.0f;
- pstr_drc_interface->drc_parameter_interface.boost = 1.0f;
- pstr_drc_interface->drc_parameter_interface.change_drc_characteristic_target = 1;
- pstr_drc_interface->drc_parameter_interface.drc_characteristic_target = 0;
-
-
- pstr_drc_interface->drc_uni_interface_ext_flag = 0;
-
+impd_drc_dec_interface_add_effect_type(
+ ia_drc_interface_struct* pstr_drc_interface, WORD32 drc_effect_type,
+ WORD32 target_loudness, WORD32 loud_norm) {
+ WORD32 err = 0;
+ WORD32 i = 0;
+
+ if (pstr_drc_interface != NULL) {
+ pstr_drc_interface->interface_signat_flag = 0;
+ for (i = 0; i < MAX_SIGNATURE_DATA_LENGTH_PLUS_ONE * 8; i++)
+ pstr_drc_interface->drc_uni_interface_signature.interface_signat_data[i] =
+ 0;
+
+ pstr_drc_interface->drc_uni_interface_signature.interface_signat_data_len =
+ 0;
+
+ pstr_drc_interface->system_interface_flag = 1;
+
+ pstr_drc_interface->system_interface.target_config_request_type = 0;
+ pstr_drc_interface->system_interface.num_downmix_id_requests = 0;
+ for (i = 0; i < MAX_NUM_DOWNMIX_ID_REQUESTS; i++) {
+ pstr_drc_interface->system_interface.requested_dwnmix_id[i] = 0;
+ }
+ pstr_drc_interface->system_interface.requested_target_layout = 0;
+ pstr_drc_interface->system_interface.requested_target_ch_count = 0;
+ pstr_drc_interface->loudness_norm_ctrl_interface_flag = 1;
+ if (loud_norm == 1) {
+ pstr_drc_interface->loudness_norm_ctrl_interface
+ .loudness_normalization_on = 1;
+ } else {
+ pstr_drc_interface->loudness_norm_ctrl_interface
+ .loudness_normalization_on = 0;
}
- else
- {
- return UNEXPECTED_ERROR;
+ pstr_drc_interface->loudness_norm_ctrl_interface.target_loudness =
+ (FLOAT32)target_loudness;
+
+ pstr_drc_interface->loudness_norm_parameter_interface_flag = 1;
+ pstr_drc_interface->loudness_norm_param_interface.album_mode = 0;
+ pstr_drc_interface->loudness_norm_param_interface.peak_limiter = 0;
+ pstr_drc_interface->loudness_norm_param_interface
+ .change_loudness_deviation_max = 1;
+ pstr_drc_interface->loudness_norm_param_interface.loudness_deviation_max =
+ 63;
+ pstr_drc_interface->loudness_norm_param_interface
+ .change_loudness_measur_method = 1;
+ pstr_drc_interface->loudness_norm_param_interface
+ .loudness_measurement_method = 1;
+ pstr_drc_interface->loudness_norm_param_interface
+ .change_loudness_measur_system = 1;
+ pstr_drc_interface->loudness_norm_param_interface
+ .loudness_measurement_system = 1;
+ pstr_drc_interface->loudness_norm_param_interface
+ .change_loudness_measur_pre_proc = 0;
+ pstr_drc_interface->loudness_norm_param_interface
+ .loudness_measurement_pre_proc = 0;
+ pstr_drc_interface->loudness_norm_param_interface
+ .change_device_cut_off_freq = 1;
+ pstr_drc_interface->loudness_norm_param_interface.device_cut_off_frequency =
+ 20;
+ pstr_drc_interface->loudness_norm_param_interface
+ .change_loudness_norm_gain_db_max = 1;
+ pstr_drc_interface->loudness_norm_param_interface
+ .loudness_norm_gain_db_max = 1000.0;
+ pstr_drc_interface->loudness_norm_param_interface
+ .change_loudness_norm_gain_modification_db = 1;
+ pstr_drc_interface->loudness_norm_param_interface
+ .loudness_norm_gain_modification_db = 0.0;
+ pstr_drc_interface->loudness_norm_param_interface
+ .change_output_peak_level_max = 1;
+ pstr_drc_interface->loudness_norm_param_interface.output_peak_level_max =
+ 0.0;
+
+ pstr_drc_interface->drc_interface_flag = 1;
+ if (drc_effect_type == -1) {
+ pstr_drc_interface->drc_ctrl_interface.dynamic_range_control_on = 0;
+ pstr_drc_interface->drc_ctrl_interface.requested_drc_effect_type[0][0] =
+ 0;
+ } else if (drc_effect_type == 0) {
+ pstr_drc_interface->drc_ctrl_interface.dynamic_range_control_on = 1;
+ pstr_drc_interface->drc_ctrl_interface.num_drc_feature_requests = 0;
+ } else {
+ pstr_drc_interface->drc_ctrl_interface.dynamic_range_control_on = 1;
+ pstr_drc_interface->drc_ctrl_interface.requested_drc_effect_type[0][0] =
+ drc_effect_type;
+ pstr_drc_interface->drc_ctrl_interface.num_drc_feature_requests = 3;
+ pstr_drc_interface->drc_ctrl_interface.drc_feature_req_type[0] = 0;
+ pstr_drc_interface->drc_ctrl_interface.drc_feature_req_type[1] = 1;
+ pstr_drc_interface->drc_ctrl_interface.drc_feature_req_type[2] = 2;
+ pstr_drc_interface->drc_ctrl_interface.requested_num_drc_effects[0] = 1;
+ pstr_drc_interface->drc_ctrl_interface
+ .desired_num_drc_effects_of_requested[0] = 1;
}
-
- return err;
+ pstr_drc_interface->drc_ctrl_interface
+ .requested_dyn_rng_measurement_type[0] = 0;
+ pstr_drc_interface->drc_ctrl_interface
+ .requested_dyn_range_is_single_val_flag[0] = 0;
+ pstr_drc_interface->drc_ctrl_interface
+ .requested_dyn_range_is_single_val_flag[1] = 0;
+ pstr_drc_interface->drc_ctrl_interface.requested_dyn_range_min_val[1] =
+ 3.0f;
+ pstr_drc_interface->drc_ctrl_interface.requested_dyn_range_max_val[1] =
+ 10.0f;
+ pstr_drc_interface->drc_ctrl_interface.requested_drc_characteristic[2] = 3;
+
+ pstr_drc_interface->drc_parameter_interface_flag = 1;
+ pstr_drc_interface->drc_parameter_interface.change_compress = 1;
+ pstr_drc_interface->drc_parameter_interface.change_boost = 1;
+ pstr_drc_interface->drc_parameter_interface.compress = 1.0f;
+ pstr_drc_interface->drc_parameter_interface.boost = 1.0f;
+ pstr_drc_interface->drc_parameter_interface
+ .change_drc_characteristic_target = 1;
+ pstr_drc_interface->drc_parameter_interface.drc_characteristic_target = 0;
+
+ pstr_drc_interface->drc_uni_interface_ext_flag = 0;
+
+ } else {
+ return UNEXPECTED_ERROR;
+ }
+
+ return err;
}
diff --git a/decoder/drc_src/impd_drc_interface_parser.c b/decoder/drc_src/impd_drc_interface_parser.c
index 87dccdd..1ae69a2 100644
--- a/decoder/drc_src/impd_drc_interface_parser.c
+++ b/decoder/drc_src/impd_drc_interface_parser.c
@@ -28,488 +28,487 @@
#include "impd_drc_extr_delta_coded_info.h"
#include "impd_drc_struct.h"
-WORD32 impd_unidrc_interface_signature_read(ia_bit_buf_struct* it_bit_buff,
- ia_drc_uni_interface_signat_struct* drc_uni_interface_signature)
-{
- //WORD32 err = 0
- WORD32 interface_signat_data_len = 0, i, tmp;
-
- tmp = impd_read_bits_buf(it_bit_buff, 16);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- drc_uni_interface_signature->interface_signat_type = (tmp>>8)&0xff;
- drc_uni_interface_signature->interface_signat_data_len = tmp&0xff;
-
- interface_signat_data_len = drc_uni_interface_signature->interface_signat_data_len + 1;
- for (i=0; i<interface_signat_data_len; i++) {
- tmp = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- drc_uni_interface_signature->interface_signat_data[i] = (UWORD32)tmp;
- }
-
- return(0);
+WORD32 impd_unidrc_interface_signature_read(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_drc_uni_interface_signat_struct* drc_uni_interface_signature) {
+ // WORD32 err = 0
+ WORD32 interface_signat_data_len = 0, i, tmp;
+
+ tmp = impd_read_bits_buf(it_bit_buff, 16);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ drc_uni_interface_signature->interface_signat_type = (tmp >> 8) & 0xff;
+ drc_uni_interface_signature->interface_signat_data_len = tmp & 0xff;
+
+ interface_signat_data_len =
+ drc_uni_interface_signature->interface_signat_data_len + 1;
+ for (i = 0; i < interface_signat_data_len; i++) {
+ tmp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ drc_uni_interface_signature->interface_signat_data[i] = (UWORD32)tmp;
+ }
+
+ return (0);
}
WORD32 impd_sys_interface_read(ia_bit_buf_struct* it_bit_buff,
- ia_system_interface_struct* system_interface)
-{
- //WORD32 err = 0;
- WORD32 i = 0, tmp = 0;
-
- system_interface->target_config_request_type = impd_read_bits_buf(it_bit_buff, 2);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- switch (system_interface->target_config_request_type) {
- case 0:
- system_interface->num_downmix_id_requests = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if (system_interface->num_downmix_id_requests == 0) {
- system_interface->num_downmix_id_requests = 1;
- system_interface->requested_dwnmix_id[0] = 0;
- break;
- }
- for (i=0; i<system_interface->num_downmix_id_requests; i++) {
- system_interface->requested_dwnmix_id[i] = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- break;
- case 1:
- system_interface->requested_target_layout = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- break;
- case 2:
- tmp = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- system_interface->requested_target_ch_count = tmp + 1;
- break;
- default:
- return(1);
- break;
- }
- return(0);
+ ia_system_interface_struct* system_interface) {
+ // WORD32 err = 0;
+ WORD32 i = 0, tmp = 0;
+
+ system_interface->target_config_request_type =
+ impd_read_bits_buf(it_bit_buff, 2);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ switch (system_interface->target_config_request_type) {
+ case 0:
+ system_interface->num_downmix_id_requests =
+ impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (system_interface->num_downmix_id_requests == 0) {
+ system_interface->num_downmix_id_requests = 1;
+ system_interface->requested_dwnmix_id[0] = 0;
+ break;
+ }
+ for (i = 0; i < system_interface->num_downmix_id_requests; i++) {
+ system_interface->requested_dwnmix_id[i] =
+ impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+ break;
+ case 1:
+ system_interface->requested_target_layout =
+ impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ break;
+ case 2:
+ tmp = impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ system_interface->requested_target_ch_count = tmp + 1;
+ break;
+ default:
+ return (1);
+ break;
+ }
+ return (0);
}
-WORD32 impd_loudness_norm_control_interface_read(ia_bit_buf_struct* it_bit_buff,
- ia_loudness_norm_ctrl_interface_struct* loudness_norm_ctrl_interface)
-{
- //WORD32 err = 0;
- WORD32 tmp = 0;
-
- loudness_norm_ctrl_interface->loudness_normalization_on = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if (loudness_norm_ctrl_interface->loudness_normalization_on == 1) {
- tmp = impd_read_bits_buf(it_bit_buff, 12);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- loudness_norm_ctrl_interface->target_loudness = - tmp * 0.03125f;
- }
- return(0);
+WORD32 impd_loudness_norm_control_interface_read(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_loudness_norm_ctrl_interface_struct* loudness_norm_ctrl_interface) {
+ // WORD32 err = 0;
+ WORD32 tmp = 0;
+
+ loudness_norm_ctrl_interface->loudness_normalization_on =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (loudness_norm_ctrl_interface->loudness_normalization_on == 1) {
+ tmp = impd_read_bits_buf(it_bit_buff, 12);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ loudness_norm_ctrl_interface->target_loudness = -tmp * 0.03125f;
+ }
+ return (0);
}
-WORD32 impd_loudness_norm_param_interface_read(ia_bit_buf_struct* it_bit_buff,
- ia_loudness_norm_parameter_interface_struct* loudness_norm_param_interface)
-{
- //WORD32 err = 0;
- WORD32 tmp = 0;
-
- tmp = impd_read_bits_buf(it_bit_buff, 3);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- loudness_norm_param_interface->album_mode = (tmp>>2)&1;
- loudness_norm_param_interface->peak_limiter = (tmp>>1)&1;
- loudness_norm_param_interface->change_loudness_deviation_max = tmp&1;
-
- if (loudness_norm_param_interface->change_loudness_deviation_max == 1) {
- loudness_norm_param_interface->loudness_deviation_max = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+WORD32 impd_loudness_norm_param_interface_read(
+ ia_bit_buf_struct* it_bit_buff, ia_loudness_norm_parameter_interface_struct*
+ loudness_norm_param_interface) {
+ // WORD32 err = 0;
+ WORD32 tmp = 0;
+
+ tmp = impd_read_bits_buf(it_bit_buff, 3);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ loudness_norm_param_interface->album_mode = (tmp >> 2) & 1;
+ loudness_norm_param_interface->peak_limiter = (tmp >> 1) & 1;
+ loudness_norm_param_interface->change_loudness_deviation_max = tmp & 1;
+
+ if (loudness_norm_param_interface->change_loudness_deviation_max == 1) {
+ loudness_norm_param_interface->loudness_deviation_max =
+ impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+
+ loudness_norm_param_interface->change_loudness_measur_method =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (loudness_norm_param_interface->change_loudness_measur_method == 1) {
+ loudness_norm_param_interface->loudness_measurement_method =
+ impd_read_bits_buf(it_bit_buff, 3);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+
+ loudness_norm_param_interface->change_loudness_measur_system =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (loudness_norm_param_interface->change_loudness_measur_system == 1) {
+ loudness_norm_param_interface->loudness_measurement_system =
+ impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+
+ loudness_norm_param_interface->change_loudness_measur_pre_proc =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (loudness_norm_param_interface->change_loudness_measur_pre_proc == 1) {
+ loudness_norm_param_interface->loudness_measurement_pre_proc =
+ impd_read_bits_buf(it_bit_buff, 2);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+
+ loudness_norm_param_interface->change_device_cut_off_freq =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (loudness_norm_param_interface->change_device_cut_off_freq == 1) {
+ tmp = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ loudness_norm_param_interface->device_cut_off_frequency =
+ max(min(tmp * 10, 500), 20);
+ }
+
+ loudness_norm_param_interface->change_loudness_norm_gain_db_max =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (loudness_norm_param_interface->change_loudness_norm_gain_db_max == 1) {
+ tmp = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (tmp < 63) {
+ loudness_norm_param_interface->loudness_norm_gain_db_max = tmp * 0.5f;
+ } else {
+ loudness_norm_param_interface->loudness_norm_gain_db_max =
+ LOUDNESS_NORMALIZATION_GAIN_MAX_DEFAULT;
}
+ }
+
+ loudness_norm_param_interface->change_loudness_norm_gain_modification_db =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (loudness_norm_param_interface
+ ->change_loudness_norm_gain_modification_db == 1) {
+ tmp = impd_read_bits_buf(it_bit_buff, 10);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ loudness_norm_param_interface->loudness_norm_gain_modification_db =
+ -16 + tmp * 0.03125f;
+ }
+
+ loudness_norm_param_interface->change_output_peak_level_max =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (loudness_norm_param_interface->change_output_peak_level_max == 1) {
+ tmp = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ loudness_norm_param_interface->output_peak_level_max = tmp * 0.5f;
+ }
+
+ return (0);
+}
- loudness_norm_param_interface->change_loudness_measur_method = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (loudness_norm_param_interface->change_loudness_measur_method == 1) {
- loudness_norm_param_interface->loudness_measurement_method = impd_read_bits_buf(it_bit_buff, 3);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
+WORD32 impd_drc_interface_read(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_dyn_rng_ctrl_interface_struct* drc_ctrl_interface) {
+ // WORD32 err = 0;
+ WORD32 i = 0, j = 0, tmp = 0;
- loudness_norm_param_interface->change_loudness_measur_system = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (loudness_norm_param_interface->change_loudness_measur_system == 1) {
- loudness_norm_param_interface->loudness_measurement_system = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
+ drc_ctrl_interface->dynamic_range_control_on =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
- loudness_norm_param_interface->change_loudness_measur_pre_proc = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (loudness_norm_param_interface->change_loudness_measur_pre_proc == 1) {
- loudness_norm_param_interface->loudness_measurement_pre_proc = impd_read_bits_buf(it_bit_buff, 2);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
+ if (drc_ctrl_interface->dynamic_range_control_on == 1) {
+ drc_ctrl_interface->num_drc_feature_requests =
+ impd_read_bits_buf(it_bit_buff, 3);
+ if (it_bit_buff->error) return it_bit_buff->error;
- loudness_norm_param_interface->change_device_cut_off_freq = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (loudness_norm_param_interface->change_device_cut_off_freq == 1) {
- tmp = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- loudness_norm_param_interface->device_cut_off_frequency = max(min(tmp*10,500),20);
- }
+ for (i = 0; i < drc_ctrl_interface->num_drc_feature_requests; i++) {
+ drc_ctrl_interface->drc_feature_req_type[i] =
+ impd_read_bits_buf(it_bit_buff, 2);
+ if (it_bit_buff->error) return it_bit_buff->error;
- loudness_norm_param_interface->change_loudness_norm_gain_db_max = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (loudness_norm_param_interface->change_loudness_norm_gain_db_max == 1) {
- tmp = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (tmp<63) {
- loudness_norm_param_interface->loudness_norm_gain_db_max = tmp*0.5f;
- } else {
- loudness_norm_param_interface->loudness_norm_gain_db_max = LOUDNESS_NORMALIZATION_GAIN_MAX_DEFAULT;
- }
+ switch (drc_ctrl_interface->drc_feature_req_type[i]) {
+ case 0:
+ tmp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ drc_ctrl_interface->requested_num_drc_effects[i] = (tmp >> 4) & 0xf;
+ drc_ctrl_interface->desired_num_drc_effects_of_requested[i] =
+ tmp & 0xf;
+
+ for (j = 0; j < drc_ctrl_interface->requested_num_drc_effects[i];
+ j++) {
+ drc_ctrl_interface->requested_drc_effect_type[i][j] =
+ impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+ break;
+ case 1:
+ tmp = impd_read_bits_buf(it_bit_buff, 3);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ drc_ctrl_interface->requested_dyn_rng_measurement_type[i] =
+ (tmp >> 1) & 3;
+ drc_ctrl_interface->requested_dyn_range_is_single_val_flag[i] =
+ tmp & 1;
+
+ if (drc_ctrl_interface->requested_dyn_range_is_single_val_flag[i] ==
+ 0) {
+ tmp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (tmp == 0)
+ drc_ctrl_interface->requested_dyn_range_value[i] = 0.0f;
+ else if (tmp <= 128)
+ drc_ctrl_interface->requested_dyn_range_value[i] = tmp * 0.25f;
+ else if (tmp <= 204)
+ drc_ctrl_interface->requested_dyn_range_value[i] =
+ 0.5f * tmp - 32.0f;
+ else
+ drc_ctrl_interface->requested_dyn_range_value[i] = tmp - 134.0f;
+ } else {
+ tmp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (tmp == 0)
+ drc_ctrl_interface->requested_dyn_range_min_val[i] = 0.0f;
+ else if (tmp <= 128)
+ drc_ctrl_interface->requested_dyn_range_min_val[i] = tmp * 0.25f;
+ else if (tmp <= 204)
+ drc_ctrl_interface->requested_dyn_range_min_val[i] =
+ 0.5f * tmp - 32.0f;
+ else
+ drc_ctrl_interface->requested_dyn_range_min_val[i] = tmp - 134.0f;
+ tmp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (tmp == 0)
+ drc_ctrl_interface->requested_dyn_range_max_val[i] = 0.0f;
+ else if (tmp <= 128)
+ drc_ctrl_interface->requested_dyn_range_max_val[i] = tmp * 0.25f;
+ else if (tmp <= 204)
+ drc_ctrl_interface->requested_dyn_range_max_val[i] =
+ 0.5f * tmp - 32.0f;
+ else
+ drc_ctrl_interface->requested_dyn_range_max_val[i] = tmp - 134.0f;
+ }
+ break;
+ case 2:
+ drc_ctrl_interface->requested_drc_characteristic[i] =
+ impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ break;
+ default:
+ return (1);
+ break;
+ }
}
+ }
+ return (0);
+}
- loudness_norm_param_interface->change_loudness_norm_gain_modification_db = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (loudness_norm_param_interface->change_loudness_norm_gain_modification_db == 1) {
- tmp = impd_read_bits_buf(it_bit_buff, 10);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- loudness_norm_param_interface->loudness_norm_gain_modification_db = -16+tmp*0.03125f;
+WORD32 impd_drc_param_interface_read(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_drc_parameter_interface_struct* drc_parameter_interface) {
+ // WORD32 err = 0;
+ WORD32 tmp = 0;
+
+ tmp = impd_read_bits_buf(it_bit_buff, 2);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ drc_parameter_interface->change_compress = (tmp >> 1) & 1;
+ drc_parameter_interface->change_boost = tmp & 1;
+
+ if (drc_parameter_interface->change_compress == 1) {
+ tmp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (tmp < 255) {
+ drc_parameter_interface->compress = 1 - tmp * 0.00390625f;
+ } else {
+ drc_parameter_interface->compress = 0.f;
}
-
- loudness_norm_param_interface->change_output_peak_level_max = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (loudness_norm_param_interface->change_output_peak_level_max == 1) {
- tmp = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- loudness_norm_param_interface->output_peak_level_max = tmp*0.5f;
+ }
+
+ if (drc_parameter_interface->change_boost == 1) {
+ tmp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (tmp < 255) {
+ drc_parameter_interface->boost = 1 - tmp * 0.00390625f;
+ } else {
+ drc_parameter_interface->boost = 0.f;
}
-
- return(0);
+ }
+
+ drc_parameter_interface->change_drc_characteristic_target =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (drc_parameter_interface->change_drc_characteristic_target == 1) {
+ drc_parameter_interface->drc_characteristic_target =
+ impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+ return (0);
}
-WORD32 impd_drc_interface_read(ia_bit_buf_struct* it_bit_buff,
- ia_dyn_rng_ctrl_interface_struct* drc_ctrl_interface)
-{
- //WORD32 err = 0;
- WORD32 i = 0, j = 0, tmp = 0;
-
- drc_ctrl_interface->dynamic_range_control_on = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if (drc_ctrl_interface->dynamic_range_control_on == 1) {
- drc_ctrl_interface->num_drc_feature_requests = impd_read_bits_buf(it_bit_buff, 3);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- for (i=0; i<drc_ctrl_interface->num_drc_feature_requests; i++) {
- drc_ctrl_interface->drc_feature_req_type[i] = impd_read_bits_buf(it_bit_buff, 2);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- switch (drc_ctrl_interface->drc_feature_req_type[i]) {
- case 0:
- tmp = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- drc_ctrl_interface->requested_num_drc_effects[i] = (tmp>>4)&0xf;
- drc_ctrl_interface->desired_num_drc_effects_of_requested[i] = tmp&0xf;
-
- for (j=0; j<drc_ctrl_interface->requested_num_drc_effects[i]; j++)
- {
- drc_ctrl_interface->requested_drc_effect_type[i][j] = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- break;
- case 1:
- tmp = impd_read_bits_buf(it_bit_buff, 3);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- drc_ctrl_interface->requested_dyn_rng_measurement_type[i] = (tmp>>1)&3;
- drc_ctrl_interface->requested_dyn_range_is_single_val_flag[i] = tmp&1;
-
- if (drc_ctrl_interface->requested_dyn_range_is_single_val_flag[i] == 0) {
- tmp = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (tmp == 0)
- drc_ctrl_interface->requested_dyn_range_value[i] = 0.0f;
- else if(tmp <= 128)
- drc_ctrl_interface->requested_dyn_range_value[i] = tmp * 0.25f;
- else if(tmp <= 204)
- drc_ctrl_interface->requested_dyn_range_value[i] = 0.5f * tmp - 32.0f;
- else
- drc_ctrl_interface->requested_dyn_range_value[i] = tmp - 134.0f;
- } else {
- tmp = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (tmp == 0)
- drc_ctrl_interface->requested_dyn_range_min_val[i] = 0.0f;
- else if(tmp <= 128)
- drc_ctrl_interface->requested_dyn_range_min_val[i] = tmp * 0.25f;
- else if(tmp <= 204)
- drc_ctrl_interface->requested_dyn_range_min_val[i] = 0.5f * tmp - 32.0f;
- else
- drc_ctrl_interface->requested_dyn_range_min_val[i] = tmp - 134.0f;
- tmp = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (tmp == 0)
- drc_ctrl_interface->requested_dyn_range_max_val[i] = 0.0f;
- else if(tmp <= 128)
- drc_ctrl_interface->requested_dyn_range_max_val[i] = tmp * 0.25f;
- else if(tmp <= 204)
- drc_ctrl_interface->requested_dyn_range_max_val[i] = 0.5f * tmp - 32.0f;
- else
- drc_ctrl_interface->requested_dyn_range_max_val[i] = tmp - 134.0f;
- }
- break;
- case 2:
- drc_ctrl_interface->requested_drc_characteristic[i] = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- break;
- default:
- return(1);
- break;
- }
- }
- }
- return(0);
+static WORD32 impd_parse_loud_eq_param_interface(
+ ia_bit_buf_struct* it_bit_buff, ia_loudness_eq_parameter_interface_struct*
+ loudness_eq_parameter_interface) {
+ // WORD32 err = 0;
+ WORD32 bsSensitivity, bsPlaybackGain;
+
+ loudness_eq_parameter_interface->loudness_eq_request_flag =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (loudness_eq_parameter_interface->loudness_eq_request_flag) {
+ loudness_eq_parameter_interface->loudness_eq_request =
+ impd_read_bits_buf(it_bit_buff, 2);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+ loudness_eq_parameter_interface->sensitivity_flag =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (loudness_eq_parameter_interface->sensitivity_flag) {
+ bsSensitivity = impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ loudness_eq_parameter_interface->sensitivity = bsSensitivity + 23.0f;
+ }
+ loudness_eq_parameter_interface->playback_gain_flag =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (loudness_eq_parameter_interface->playback_gain_flag) {
+ bsPlaybackGain = impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ loudness_eq_parameter_interface->playback_gain = (FLOAT32)-bsPlaybackGain;
+ }
+ return (0);
}
-WORD32 impd_drc_param_interface_read(ia_bit_buf_struct* it_bit_buff,
- ia_drc_parameter_interface_struct* drc_parameter_interface)
-{
- //WORD32 err = 0;
- WORD32 tmp = 0;
-
- tmp = impd_read_bits_buf(it_bit_buff, 2);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- drc_parameter_interface->change_compress = (tmp>>1)&1;
- drc_parameter_interface->change_boost = tmp&1;
-
- if (drc_parameter_interface->change_compress == 1) {
- tmp = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (tmp<255) {
- drc_parameter_interface->compress = 1 - tmp * 0.00390625f;
- } else {
- drc_parameter_interface->compress = 0.f;
+WORD32
+impd_unidrc_interface_extension_read(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_drc_interface_struct* impd_drc_uni_interface,
+ ia_drc_uni_interface_ext_struct* drc_uni_interface_ext) {
+ WORD32 err = 0, i = 0, tmp = 0, dummy;
+ WORD32 uni_drc_interface_ext_type;
+ ia_specific_interface_extension_struct* specific_interface_ext;
+
+ uni_drc_interface_ext_type = impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ while (uni_drc_interface_ext_type != UNIDRCINTERFACEEXT_TERM) {
+ specific_interface_ext =
+ &(drc_uni_interface_ext->specific_interface_ext[i]);
+ specific_interface_ext->uni_drc_interface_ext_type =
+ uni_drc_interface_ext_type;
+ tmp = impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ specific_interface_ext->ext_size_bits = tmp + 4;
+
+ tmp =
+ impd_read_bits_buf(it_bit_buff, specific_interface_ext->ext_size_bits);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ specific_interface_ext->ext_bit_size = tmp + 1;
+
+ switch (uni_drc_interface_ext_type) {
+ case UNIDRCINTERFACEEXT_EQ:
+ impd_drc_uni_interface->drc_uni_interface_ext
+ .loudness_eq_parameter_interface_flag =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (impd_drc_uni_interface->drc_uni_interface_ext
+ .loudness_eq_parameter_interface_flag) {
+ err = impd_parse_loud_eq_param_interface(
+ it_bit_buff, &(impd_drc_uni_interface->drc_uni_interface_ext
+ .loudness_eq_parameter_interface));
+ if (err) return (err);
}
- }
-
- if (drc_parameter_interface->change_boost == 1) {
- tmp = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (tmp<255) {
- drc_parameter_interface->boost = 1 - tmp * 0.00390625f;
- } else {
- drc_parameter_interface->boost = 0.f;
+ impd_drc_uni_interface->drc_uni_interface_ext.eq_ctrl_interface_flag =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (impd_drc_uni_interface->drc_uni_interface_ext
+ .eq_ctrl_interface_flag) {
+ impd_drc_uni_interface->drc_uni_interface_ext.eq_ctrl_interface
+ .eq_set_purpose_request = impd_read_bits_buf(it_bit_buff, 16);
+ if (it_bit_buff->error) return it_bit_buff->error;
}
+ break;
+ default:
+ dummy = impd_read_bits_buf(it_bit_buff,
+ specific_interface_ext->ext_bit_size);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ break;
}
- drc_parameter_interface->change_drc_characteristic_target = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if (drc_parameter_interface->change_drc_characteristic_target == 1) {
- drc_parameter_interface->drc_characteristic_target = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- return(0);
-}
-
-static WORD32 impd_parse_loud_eq_param_interface(ia_bit_buf_struct* it_bit_buff,
- ia_loudness_eq_parameter_interface_struct* loudness_eq_parameter_interface)
-{
- //WORD32 err = 0;
- WORD32 bsSensitivity, bsPlaybackGain;
-
- loudness_eq_parameter_interface->loudness_eq_request_flag = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (loudness_eq_parameter_interface->loudness_eq_request_flag) {
- loudness_eq_parameter_interface->loudness_eq_request = impd_read_bits_buf(it_bit_buff, 2);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- loudness_eq_parameter_interface->sensitivity_flag = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (loudness_eq_parameter_interface->sensitivity_flag) {
- bsSensitivity = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- loudness_eq_parameter_interface->sensitivity = bsSensitivity + 23.0f;
+ i++;
+ if (i == EXT_COUNT_MAX) {
+ return (1);
}
- loudness_eq_parameter_interface->playback_gain_flag = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (loudness_eq_parameter_interface->playback_gain_flag) {
- bsPlaybackGain = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- loudness_eq_parameter_interface->playback_gain = (FLOAT32) - bsPlaybackGain;
- }
- return (0);
-}
-
-WORD32
-impd_unidrc_interface_extension_read(ia_bit_buf_struct* it_bit_buff,
- ia_drc_interface_struct* impd_drc_uni_interface,
- ia_drc_uni_interface_ext_struct* drc_uni_interface_ext)
-{
- WORD32 err = 0, i = 0, tmp = 0, dummy;
- WORD32 uni_drc_interface_ext_type;
- ia_specific_interface_extension_struct* specific_interface_ext;
-
uni_drc_interface_ext_type = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- while (uni_drc_interface_ext_type != UNIDRCINTERFACEEXT_TERM) {
- specific_interface_ext = &(drc_uni_interface_ext->specific_interface_ext[i]);
- specific_interface_ext->uni_drc_interface_ext_type = uni_drc_interface_ext_type;
- tmp = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- specific_interface_ext->ext_size_bits = tmp+4;
-
- tmp = impd_read_bits_buf(it_bit_buff, specific_interface_ext->ext_size_bits);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- specific_interface_ext->ext_bit_size = tmp+1;
-
- switch (uni_drc_interface_ext_type) {
- case UNIDRCINTERFACEEXT_EQ:
- impd_drc_uni_interface->drc_uni_interface_ext.loudness_eq_parameter_interface_flag = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (impd_drc_uni_interface->drc_uni_interface_ext.loudness_eq_parameter_interface_flag) {
- err = impd_parse_loud_eq_param_interface(it_bit_buff, &(impd_drc_uni_interface->drc_uni_interface_ext.loudness_eq_parameter_interface));
- if (err) return(err);
- }
- impd_drc_uni_interface->drc_uni_interface_ext.eq_ctrl_interface_flag = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (impd_drc_uni_interface->drc_uni_interface_ext.eq_ctrl_interface_flag) {
- impd_drc_uni_interface->drc_uni_interface_ext.eq_ctrl_interface.eq_set_purpose_request = impd_read_bits_buf(it_bit_buff, 16);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- break;
- default:
- dummy = impd_read_bits_buf(it_bit_buff, specific_interface_ext->ext_bit_size);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- break;
- }
-
- i++;
- if (i==EXT_COUNT_MAX)
- {
- return(1);
- }
- uni_drc_interface_ext_type = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- drc_uni_interface_ext->interface_ext_count = i;
- return(0);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+ drc_uni_interface_ext->interface_ext_count = i;
+ return (0);
}
WORD32 impd_unidrc_interface_read(ia_bit_buf_struct* it_bit_buff,
- ia_drc_interface_struct* uniDrcInterface)
-{
- WORD32 err = 0;
-
- uniDrcInterface->interface_signat_flag = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (uniDrcInterface->interface_signat_flag == 1) {
- err = impd_unidrc_interface_signature_read(it_bit_buff, &(uniDrcInterface->drc_uni_interface_signature));
- if (err) return(err);
- }
-
- uniDrcInterface->system_interface_flag = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (uniDrcInterface->system_interface_flag == 1) {
- err = impd_sys_interface_read(it_bit_buff, &(uniDrcInterface->system_interface));
- if (err) return(err);
- }
-
- uniDrcInterface->loudness_norm_ctrl_interface_flag = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (uniDrcInterface->loudness_norm_ctrl_interface_flag == 1) {
- err = impd_loudness_norm_control_interface_read(it_bit_buff, &(uniDrcInterface->loudness_norm_ctrl_interface));
- if (err) return(err);
- }
-
- uniDrcInterface->loudness_norm_parameter_interface_flag = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (uniDrcInterface->loudness_norm_parameter_interface_flag == 1) {
- err = impd_loudness_norm_param_interface_read(it_bit_buff, &(uniDrcInterface->loudness_norm_param_interface));
- if (err) return(err);
- }
-
- uniDrcInterface->drc_interface_flag = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (uniDrcInterface->drc_interface_flag == 1) {
- err = impd_drc_interface_read(it_bit_buff, &(uniDrcInterface->drc_ctrl_interface));
- if (err) return(err);
- }
-
- uniDrcInterface->drc_parameter_interface_flag = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (uniDrcInterface->drc_parameter_interface_flag == 1) {
- err = impd_drc_param_interface_read(it_bit_buff, &(uniDrcInterface->drc_parameter_interface));
- if (err) return(err);
- }
-
- uniDrcInterface->drc_uni_interface_ext_flag = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (uniDrcInterface->drc_uni_interface_ext_flag == 1) {
- err = impd_unidrc_interface_extension_read(it_bit_buff, uniDrcInterface, &(uniDrcInterface->drc_uni_interface_ext));
- if (err) return(err);
- }
-
- return(0);
+ ia_drc_interface_struct* uniDrcInterface) {
+ WORD32 err = 0;
+
+ uniDrcInterface->interface_signat_flag = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (uniDrcInterface->interface_signat_flag == 1) {
+ err = impd_unidrc_interface_signature_read(
+ it_bit_buff, &(uniDrcInterface->drc_uni_interface_signature));
+ if (err) return (err);
+ }
+
+ uniDrcInterface->system_interface_flag = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (uniDrcInterface->system_interface_flag == 1) {
+ err = impd_sys_interface_read(it_bit_buff,
+ &(uniDrcInterface->system_interface));
+ if (err) return (err);
+ }
+
+ uniDrcInterface->loudness_norm_ctrl_interface_flag =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (uniDrcInterface->loudness_norm_ctrl_interface_flag == 1) {
+ err = impd_loudness_norm_control_interface_read(
+ it_bit_buff, &(uniDrcInterface->loudness_norm_ctrl_interface));
+ if (err) return (err);
+ }
+
+ uniDrcInterface->loudness_norm_parameter_interface_flag =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (uniDrcInterface->loudness_norm_parameter_interface_flag == 1) {
+ err = impd_loudness_norm_param_interface_read(
+ it_bit_buff, &(uniDrcInterface->loudness_norm_param_interface));
+ if (err) return (err);
+ }
+
+ uniDrcInterface->drc_interface_flag = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (uniDrcInterface->drc_interface_flag == 1) {
+ err = impd_drc_interface_read(it_bit_buff,
+ &(uniDrcInterface->drc_ctrl_interface));
+ if (err) return (err);
+ }
+
+ uniDrcInterface->drc_parameter_interface_flag =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (uniDrcInterface->drc_parameter_interface_flag == 1) {
+ err = impd_drc_param_interface_read(
+ it_bit_buff, &(uniDrcInterface->drc_parameter_interface));
+ if (err) return (err);
+ }
+
+ uniDrcInterface->drc_uni_interface_ext_flag =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (uniDrcInterface->drc_uni_interface_ext_flag == 1) {
+ err = impd_unidrc_interface_extension_read(
+ it_bit_buff, uniDrcInterface,
+ &(uniDrcInterface->drc_uni_interface_ext));
+ if (err) return (err);
+ }
+
+ return (0);
} \ No newline at end of file
diff --git a/decoder/drc_src/impd_drc_loud_eq.c b/decoder/drc_src/impd_drc_loud_eq.c
index 4f02d00..ef04db2 100644
--- a/decoder/drc_src/impd_drc_loud_eq.c
+++ b/decoder/drc_src/impd_drc_loud_eq.c
@@ -34,158 +34,136 @@
#include "impd_drc_uni_process_audio.h"
#include "impd_drc_rom.h"
-
-WORD32 impd_parametric_drc_instance_reset(WORD32 instance_idx,
- ia_parametric_drc_instance_params_struct* pstr_parametric_drc_instance_params)
-{
- WORD32 err = 0;
-
- if (pstr_parametric_drc_instance_params->parametric_drc_type == PARAM_DRC_TYPE_FF)
- {
-
- ia_parametric_drc_type_ff_params_struct* pstr_parametric_ffwd_type_drc_params = &(pstr_parametric_drc_instance_params->str_parametric_drc_type_ff_params);
- err = impd_parametric_ffwd_type_drc_reset(pstr_parametric_ffwd_type_drc_params);
- if (err)
- return (err);
-
-
- }
- else
- {
- return (UNEXPECTED_ERROR);
- }
-
- return 0;
+WORD32 impd_parametric_drc_instance_reset(
+ WORD32 instance_idx, ia_parametric_drc_instance_params_struct*
+ pstr_parametric_drc_instance_params) {
+ WORD32 err = 0;
+
+ if (pstr_parametric_drc_instance_params->parametric_drc_type ==
+ PARAM_DRC_TYPE_FF) {
+ ia_parametric_drc_type_ff_params_struct*
+ pstr_parametric_ffwd_type_drc_params =
+ &(pstr_parametric_drc_instance_params
+ ->str_parametric_drc_type_ff_params);
+ err = impd_parametric_ffwd_type_drc_reset(
+ pstr_parametric_ffwd_type_drc_params);
+ if (err) return (err);
+
+ } else {
+ return (UNEXPECTED_ERROR);
+ }
+
+ return 0;
}
-WORD32 impd_add_drc_band_audio(ia_drc_instructions_struct* pstr_drc_instruction_arr,
- const WORD32 drc_instructions_index,
- ia_drc_params_struct* ia_drc_params_struct,
- ia_audio_band_buffer_struct* audio_band_buffer,
- FLOAT32* audio_io_buf[])
-{
- WORD32 g, b, i, c;
- FLOAT32 sum;
- WORD32 signalIndex = 0;
- FLOAT32** drcBandAudio;
- FLOAT32** channel_audio;
- ia_drc_instructions_struct* str_drc_instruction_str;
-
- drcBandAudio = audio_band_buffer->non_interleaved_audio;
- channel_audio = audio_io_buf;
-
- if (drc_instructions_index >= 0) {
- str_drc_instruction_str = &(pstr_drc_instruction_arr[drc_instructions_index]);
- } else {
- return -1;
- }
+WORD32 impd_add_drc_band_audio(
+ ia_drc_instructions_struct* pstr_drc_instruction_arr,
+ const WORD32 drc_instructions_index,
+ ia_drc_params_struct* ia_drc_params_struct,
+ ia_audio_band_buffer_struct* audio_band_buffer, FLOAT32* audio_io_buf[]) {
+ WORD32 g, b, i, c;
+ FLOAT32 sum;
+ WORD32 signalIndex = 0;
+ FLOAT32** drcBandAudio;
+ FLOAT32** channel_audio;
+ ia_drc_instructions_struct* str_drc_instruction_str;
+
+ drcBandAudio = audio_band_buffer->non_interleaved_audio;
+ channel_audio = audio_io_buf;
+
+ if (drc_instructions_index >= 0) {
+ str_drc_instruction_str =
+ &(pstr_drc_instruction_arr[drc_instructions_index]);
+ } else {
+ return -1;
+ }
+
+ if (str_drc_instruction_str->drc_set_id > 0) {
+ for (c = 0; c < str_drc_instruction_str->audio_num_chan; c++)
- if (str_drc_instruction_str->drc_set_id > 0)
{
-
- for (c=0; c<str_drc_instruction_str->audio_num_chan; c++)
-
- {
- g = str_drc_instruction_str->channel_group_of_ch[c];
- if (g>=0)
- {
- for (i=0; i<ia_drc_params_struct->drc_frame_size; i++)
- {
- sum = 0.0f;
- for (b=0; b<str_drc_instruction_str->band_count_of_ch_group[g]; b++)
- {
- sum += drcBandAudio[signalIndex+b][i];
- }
-
- channel_audio[c][i] = sum;
-
- }
- signalIndex += str_drc_instruction_str->band_count_of_ch_group[g];
- }
- else
- {
- signalIndex++;
- }
+ g = str_drc_instruction_str->channel_group_of_ch[c];
+ if (g >= 0) {
+ for (i = 0; i < ia_drc_params_struct->drc_frame_size; i++) {
+ sum = 0.0f;
+ for (b = 0; b < str_drc_instruction_str->band_count_of_ch_group[g];
+ b++) {
+ sum += drcBandAudio[signalIndex + b][i];
+ }
+
+ channel_audio[c][i] = sum;
}
+ signalIndex += str_drc_instruction_str->band_count_of_ch_group[g];
+ } else {
+ signalIndex++;
+ }
}
- else
- {
- for (c=0; c<str_drc_instruction_str->audio_num_chan; c++)
+ } else {
+ for (c = 0; c < str_drc_instruction_str->audio_num_chan; c++)
- {
- for (i=0; i<ia_drc_params_struct->drc_frame_size; i++)
- {
- channel_audio[c][i] = drcBandAudio[c][i];
- }
- }
+ {
+ for (i = 0; i < ia_drc_params_struct->drc_frame_size; i++) {
+ channel_audio[c][i] = drcBandAudio[c][i];
+ }
}
- return (0);
+ }
+ return (0);
}
-WORD32 removeTables(void)
-{
-
- return(0);
-}
+WORD32 removeTables(void) { return (0); }
-const ia_slope_code_table_struct*
-impd_get_slope_code_tbl_by_value(void)
-{
- return(&(slopeCodeTableEntryByValue[0]));
+const ia_slope_code_table_struct* impd_get_slope_code_tbl_by_value(void) {
+ return (&(slopeCodeTableEntryByValue[0]));
}
-FLOAT32 impd_decode_slope_idx(const WORD32 slopeCodeIndex)
-{
- const ia_slope_code_table_struct* slopeCodeTable = impd_get_slope_code_tbl_by_value();
- return slopeCodeTable[slopeCodeIndex].value;
+FLOAT32 impd_decode_slope_idx(const WORD32 slopeCodeIndex) {
+ const ia_slope_code_table_struct* slopeCodeTable =
+ impd_get_slope_code_tbl_by_value();
+ return slopeCodeTable[slopeCodeIndex].value;
}
-FLOAT32 impd_decode_slope_idx_magnitude(const WORD32 slopeCodeIndex)
-{
- const ia_slope_code_table_struct* slopeCodeTable = impd_get_slope_code_tbl_by_value();
- return (FLOAT32)fabs((FLOAT64)slopeCodeTable[slopeCodeIndex].value);
+FLOAT32 impd_decode_slope_idx_magnitude(const WORD32 slopeCodeIndex) {
+ const ia_slope_code_table_struct* slopeCodeTable =
+ impd_get_slope_code_tbl_by_value();
+ return (FLOAT32)fabs((FLOAT64)slopeCodeTable[slopeCodeIndex].value);
}
-
WORD32 impd_get_multi_band_drc_present(ia_drc_config* pstr_drc_config,
- WORD32 numSets[3],
- WORD32 multiBandDrcPresent[3])
-{
- WORD32 err=0, k, m;
- for(k=0; k<pstr_drc_config->drc_instructions_uni_drc_count; k++)
- {
- if ((pstr_drc_config->str_drc_instruction_str[k].downmix_id[0] == ID_FOR_BASE_LAYOUT) || (pstr_drc_config->str_drc_instruction_str[k].drc_apply_to_dwnmix == 0))
- {
- numSets[0]++;
- }
- else if (pstr_drc_config->str_drc_instruction_str[k].downmix_id[0] == ID_FOR_ANY_DOWNMIX)
- {
- numSets[1]++;
- }
- else
- {
- numSets[2]++;
- }
- for (m=0; m<pstr_drc_config->str_drc_instruction_str[k].num_drc_ch_groups; m++)
- {
- if (pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0].gain_set_params[pstr_drc_config->str_drc_instruction_str->gain_set_index_for_channel_group[m]].band_count > 1)
- {
- if ((pstr_drc_config->str_drc_instruction_str[k].downmix_id[0] == ID_FOR_BASE_LAYOUT) || (pstr_drc_config->str_drc_instruction_str[k].drc_apply_to_dwnmix == 0))
- {
- multiBandDrcPresent[0] = 1;
- }
- else if (pstr_drc_config->str_drc_instruction_str[k].downmix_id[0] == ID_FOR_ANY_DOWNMIX)
- {
- multiBandDrcPresent[1] = 1;
- }
- else
- {
- multiBandDrcPresent[2] = 1;
- }
- }
+ WORD32 numSets[3],
+ WORD32 multiBandDrcPresent[3]) {
+ WORD32 err = 0, k, m;
+ for (k = 0; k < pstr_drc_config->drc_instructions_uni_drc_count; k++) {
+ if ((pstr_drc_config->str_drc_instruction_str[k].downmix_id[0] ==
+ ID_FOR_BASE_LAYOUT) ||
+ (pstr_drc_config->str_drc_instruction_str[k].drc_apply_to_dwnmix ==
+ 0)) {
+ numSets[0]++;
+ } else if (pstr_drc_config->str_drc_instruction_str[k].downmix_id[0] ==
+ ID_FOR_ANY_DOWNMIX) {
+ numSets[1]++;
+ } else {
+ numSets[2]++;
+ }
+ for (m = 0;
+ m < pstr_drc_config->str_drc_instruction_str[k].num_drc_ch_groups;
+ m++) {
+ if (pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[0]
+ .gain_set_params[pstr_drc_config->str_drc_instruction_str
+ ->gain_set_index_for_channel_group[m]]
+ .band_count > 1) {
+ if ((pstr_drc_config->str_drc_instruction_str[k].downmix_id[0] ==
+ ID_FOR_BASE_LAYOUT) ||
+ (pstr_drc_config->str_drc_instruction_str[k].drc_apply_to_dwnmix ==
+ 0)) {
+ multiBandDrcPresent[0] = 1;
+ } else if (pstr_drc_config->str_drc_instruction_str[k].downmix_id[0] ==
+ ID_FOR_ANY_DOWNMIX) {
+ multiBandDrcPresent[1] = 1;
+ } else {
+ multiBandDrcPresent[2] = 1;
}
+ }
}
- return err;
+ }
+ return err;
}
-
-
diff --git a/decoder/drc_src/impd_drc_loudness_control.c b/decoder/drc_src/impd_drc_loudness_control.c
index 470c5fe..ec8fcf1 100644
--- a/decoder/drc_src/impd_drc_loudness_control.c
+++ b/decoder/drc_src/impd_drc_loudness_control.c
@@ -29,959 +29,889 @@
#include "impd_drc_filter_bank.h"
#include "impd_drc_rom.h"
-WORD32 impd_signal_peak_level_info(ia_drc_config* pstr_drc_config,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- ia_drc_instructions_struct* str_drc_instruction_str,
- WORD32 requested_dwnmix_id,
- WORD32 album_mode,
- WORD32 num_compression_eq_count,
- WORD32* num_compression_eq_id,
- WORD32* peak_info_count,
- WORD32 eq_set_id[],
- FLOAT32 signal_peak_level[],
- WORD32 explicit_peak_information_present[])
-{
- WORD32 c, d, i, k, n, base_channel_count, mode;
- WORD32 pre_lim_count;
- WORD32 peak_count = 0;
- WORD32 loudness_info_count = 0;
- ia_loudness_info_struct* loudness_info;
- FLOAT32 sum, max_sum;
- WORD32 drc_set_id_requested = str_drc_instruction_str->drc_set_id;
- WORD32 loudness_drc_set_id_requested;
- WORD32 match_found_flag = 0;
-
- FLOAT32 signal_peak_level_tmp;
- eq_set_id[0] = 0;
- signal_peak_level[0] = 0.0f;
- explicit_peak_information_present[0] = 0;
-
- k=0;
- if (drc_set_id_requested < 0)
- {
- for (k=0; k<num_compression_eq_count; k++)
- {
- eq_set_id[k] = num_compression_eq_id[k];
- signal_peak_level[k] = 0.0f;
- explicit_peak_information_present[k] = 0;
+WORD32 impd_signal_peak_level_info(
+ ia_drc_config* pstr_drc_config,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ ia_drc_instructions_struct* str_drc_instruction_str,
+ WORD32 requested_dwnmix_id, WORD32 album_mode,
+ WORD32 num_compression_eq_count, WORD32* num_compression_eq_id,
+ WORD32* peak_info_count, WORD32 eq_set_id[], FLOAT32 signal_peak_level[],
+ WORD32 explicit_peak_information_present[]) {
+ WORD32 c, d, i, k, n, base_channel_count, mode;
+ WORD32 pre_lim_count;
+ WORD32 peak_count = 0;
+ WORD32 loudness_info_count = 0;
+ ia_loudness_info_struct* loudness_info;
+ FLOAT32 sum, max_sum;
+ WORD32 drc_set_id_requested = str_drc_instruction_str->drc_set_id;
+ WORD32 loudness_drc_set_id_requested;
+ WORD32 match_found_flag = 0;
+
+ FLOAT32 signal_peak_level_tmp;
+ eq_set_id[0] = 0;
+ signal_peak_level[0] = 0.0f;
+ explicit_peak_information_present[0] = 0;
+
+ k = 0;
+ if (drc_set_id_requested < 0) {
+ for (k = 0; k < num_compression_eq_count; k++) {
+ eq_set_id[k] = num_compression_eq_id[k];
+ signal_peak_level[k] = 0.0f;
+ explicit_peak_information_present[k] = 0;
+ }
+ }
+ eq_set_id[k] = 0;
+ signal_peak_level[k] = 0.0f;
+ explicit_peak_information_present[k] = 0;
+ k++;
+
+ pre_lim_count = k;
+
+ if (drc_set_id_requested < 0) {
+ loudness_drc_set_id_requested = 0;
+ } else {
+ loudness_drc_set_id_requested = drc_set_id_requested;
+ }
+
+ if (album_mode == 1) {
+ mode = 1;
+ loudness_info_count = pstr_loudness_info->loudness_info_album_count;
+ } else {
+ mode = 0;
+ loudness_info_count = pstr_loudness_info->loudness_info_count;
+ }
+
+ for (n = 0; n < loudness_info_count; n++) {
+ if (mode == 1) {
+ loudness_info = &(pstr_loudness_info->str_loudness_info_album[n]);
+ } else {
+ loudness_info = &(pstr_loudness_info->loudness_info[n]);
+ }
+ if (loudness_drc_set_id_requested == loudness_info->drc_set_id &&
+ requested_dwnmix_id == loudness_info->downmix_id) {
+ if (loudness_info->true_peak_level_present) {
+ eq_set_id[peak_count] = loudness_info->eq_set_id;
+
+ signal_peak_level[peak_count] = loudness_info->true_peak_level;
+ explicit_peak_information_present[peak_count] = 1;
+
+ match_found_flag = 1;
+ peak_count++;
+ }
+ if (match_found_flag == 0) {
+ if (loudness_info->sample_peak_level_present) {
+ eq_set_id[peak_count] = loudness_info->eq_set_id;
+
+ signal_peak_level[peak_count] = loudness_info->sample_peak_level;
+ explicit_peak_information_present[peak_count] = 1;
+
+ match_found_flag = 1;
+ peak_count++;
}
- }
- eq_set_id[k] = 0;
- signal_peak_level[k] = 0.0f;
- explicit_peak_information_present[k] = 0;
- k++;
-
- pre_lim_count = k;
-
- if (drc_set_id_requested < 0)
- {
- loudness_drc_set_id_requested = 0;
- }
- else
- {
- loudness_drc_set_id_requested = drc_set_id_requested;
- }
-
- if (album_mode == 1)
- {
- mode = 1;
- loudness_info_count = pstr_loudness_info->loudness_info_album_count;
- }
- else
- {
- mode = 0;
- loudness_info_count = pstr_loudness_info->loudness_info_count;
- }
-
- for (n=0; n<loudness_info_count; n++)
- {
- if (mode == 1)
- {
- loudness_info = &(pstr_loudness_info->str_loudness_info_album[n]);
- }
- else
- {
- loudness_info = &(pstr_loudness_info->loudness_info[n]);
+ }
+ }
+ }
+ if (match_found_flag == 0) {
+ for (n = 0; n < loudness_info_count; n++) {
+ if (mode == 1) {
+ loudness_info = &(pstr_loudness_info->str_loudness_info_album[n]);
+ } else {
+ loudness_info = &(pstr_loudness_info->loudness_info[n]);
+ }
+ if (ID_FOR_ANY_DRC == loudness_info->drc_set_id &&
+ requested_dwnmix_id == loudness_info->downmix_id) {
+ if (loudness_info->true_peak_level_present) {
+ eq_set_id[peak_count] = loudness_info->eq_set_id;
+
+ signal_peak_level[peak_count] = loudness_info->true_peak_level;
+ explicit_peak_information_present[peak_count] = 1;
+
+ match_found_flag = 1;
+ peak_count++;
}
- if (loudness_drc_set_id_requested == loudness_info->drc_set_id && requested_dwnmix_id == loudness_info->downmix_id)
- {
- if (loudness_info->true_peak_level_present)
- {
-
- eq_set_id[peak_count] = loudness_info->eq_set_id;
-
- signal_peak_level[peak_count] = loudness_info->true_peak_level;
- explicit_peak_information_present[peak_count] = 1;
-
- match_found_flag = 1;
- peak_count++;
-
- }
- if (match_found_flag == 0) {
- if (loudness_info->sample_peak_level_present)
- {
- eq_set_id[peak_count] = loudness_info->eq_set_id;
-
- signal_peak_level[peak_count] = loudness_info->sample_peak_level;
- explicit_peak_information_present[peak_count] = 1;
+ if (match_found_flag == 0) {
+ if (loudness_info->sample_peak_level_present) {
+ eq_set_id[peak_count] = loudness_info->eq_set_id;
- match_found_flag = 1;
- peak_count++;
+ signal_peak_level[peak_count] = loudness_info->sample_peak_level;
+ explicit_peak_information_present[peak_count] = 1;
- }
- }
+ match_found_flag = 1;
+ peak_count++;
+ }
}
- }
- if (match_found_flag == 0) {
- for (n=0; n<loudness_info_count; n++)
- {
- if (mode == 1)
- {
- loudness_info = &(pstr_loudness_info->str_loudness_info_album[n]);
- }
- else
- {
- loudness_info = &(pstr_loudness_info->loudness_info[n]);
- }
- if (ID_FOR_ANY_DRC == loudness_info->drc_set_id && requested_dwnmix_id == loudness_info->downmix_id)
- {
- if (loudness_info->true_peak_level_present)
- {
-
- eq_set_id[peak_count] = loudness_info->eq_set_id;
-
- signal_peak_level[peak_count] = loudness_info->true_peak_level;
- explicit_peak_information_present[peak_count] = 1;
-
- match_found_flag = 1;
- peak_count++;
-
- }
- if (match_found_flag == 0) {
- if (loudness_info->sample_peak_level_present)
- {
-
- eq_set_id[peak_count] = loudness_info->eq_set_id;
-
- signal_peak_level[peak_count] = loudness_info->sample_peak_level;
- explicit_peak_information_present[peak_count] = 1;
-
- match_found_flag = 1;
- peak_count++;
-
+ }
+ }
+ }
+ if (match_found_flag == 0) {
+ for (i = 0; i < str_drc_instruction_str->dwnmix_id_count; i++) {
+ if (requested_dwnmix_id == str_drc_instruction_str->downmix_id[0] ||
+ ID_FOR_ANY_DOWNMIX == str_drc_instruction_str->downmix_id[0]) {
+ if (str_drc_instruction_str->limiter_peak_target_present) {
+ if (str_drc_instruction_str->requires_eq == 1) {
+ for (d = 0;
+ d < pstr_drc_config->str_drc_config_ext.eq_instructions_count;
+ d++) {
+ ia_eq_instructions_struct* eq_instructions =
+ &pstr_drc_config->str_drc_config_ext.str_eq_instructions[d];
+ for (c = 0; c < eq_instructions->drc_set_id_count; c++) {
+ if ((eq_instructions->drc_set_id[c] ==
+ loudness_drc_set_id_requested) ||
+ (eq_instructions->drc_set_id[c] == ID_FOR_ANY_DRC)) {
+ for (i = 0; i < eq_instructions->dwnmix_id_count; i++) {
+ if ((eq_instructions->downmix_id[i] ==
+ requested_dwnmix_id) ||
+ (eq_instructions->downmix_id[i] ==
+ ID_FOR_ANY_DOWNMIX)) {
+ eq_set_id[peak_count] = eq_instructions->eq_set_id;
+ signal_peak_level[peak_count] =
+ str_drc_instruction_str->limiter_peak_target;
+ explicit_peak_information_present[peak_count] = 1;
+ match_found_flag = 1;
+ peak_count++;
}
+ }
}
+ }
}
+ } else
+
+ {
+ eq_set_id[peak_count] = 0;
+ signal_peak_level[peak_count] =
+ str_drc_instruction_str->limiter_peak_target;
+ explicit_peak_information_present[peak_count] = 1;
+ match_found_flag = 1;
+ peak_count++;
+ }
}
+ }
}
- if (match_found_flag == 0) {
- for (i=0; i<str_drc_instruction_str->dwnmix_id_count; i++)
+ }
+ if (match_found_flag == 0) {
+ for (i = 1; i < str_drc_instruction_str->dwnmix_id_count; i++) {
+ if (requested_dwnmix_id == str_drc_instruction_str->downmix_id[i]) {
+ if (str_drc_instruction_str->limiter_peak_target_present) {
{
- if (requested_dwnmix_id == str_drc_instruction_str->downmix_id[0] || ID_FOR_ANY_DOWNMIX == str_drc_instruction_str->downmix_id[0])
- {
- if (str_drc_instruction_str->limiter_peak_target_present)
- {
- if (str_drc_instruction_str->requires_eq == 1)
- {
- for (d=0; d<pstr_drc_config->str_drc_config_ext.eq_instructions_count; d++) {
- ia_eq_instructions_struct* eq_instructions = &pstr_drc_config->str_drc_config_ext.str_eq_instructions[d];
- for (c=0; c<eq_instructions->drc_set_id_count; c++) {
- if ((eq_instructions->drc_set_id[c] == loudness_drc_set_id_requested) || (eq_instructions->drc_set_id[c] == ID_FOR_ANY_DRC)) {
- for (i=0; i<eq_instructions->dwnmix_id_count; i++) {
- if ((eq_instructions->downmix_id[i] == requested_dwnmix_id) || (eq_instructions->downmix_id[i] == ID_FOR_ANY_DOWNMIX)) {
- eq_set_id[peak_count] = eq_instructions->eq_set_id;
- signal_peak_level[peak_count] = str_drc_instruction_str->limiter_peak_target;
- explicit_peak_information_present[peak_count] = 1;
- match_found_flag = 1;
- peak_count++;
- }
- }
- }
- }
- }
- }
- else
-
- {
- eq_set_id[peak_count] = 0;
- signal_peak_level[peak_count] = str_drc_instruction_str->limiter_peak_target;
- explicit_peak_information_present[peak_count] = 1;
- match_found_flag = 1;
- peak_count++;
- }
- }
+ eq_set_id[peak_count] = 0;
+ signal_peak_level[peak_count] =
+ str_drc_instruction_str->limiter_peak_target;
+ explicit_peak_information_present[peak_count] = 1;
+ match_found_flag = 1;
+ peak_count++;
+ }
}
- }
-}
- if (match_found_flag == 0) {
- for (i=1; i<str_drc_instruction_str->dwnmix_id_count; i++)
- {
- if (requested_dwnmix_id == str_drc_instruction_str->downmix_id[i])
- {
- if (str_drc_instruction_str->limiter_peak_target_present)
- {
-
- {
- eq_set_id[peak_count] = 0;
- signal_peak_level[peak_count] = str_drc_instruction_str->limiter_peak_target;
- explicit_peak_information_present[peak_count] = 1;
- match_found_flag = 1;
- peak_count++;
- }
- }
- }
+ }
+ }
+ }
+ if (match_found_flag == 0) {
+ if (requested_dwnmix_id != ID_FOR_BASE_LAYOUT) {
+ signal_peak_level_tmp = 0.f;
+ for (i = 0; i < pstr_drc_config->dwnmix_instructions_count; i++) {
+ if (pstr_drc_config->dwnmix_instructions[i].downmix_id ==
+ requested_dwnmix_id) {
+ if (pstr_drc_config->dwnmix_instructions[i]
+ .downmix_coefficients_present) {
+ base_channel_count =
+ pstr_drc_config->channel_layout.base_channel_count;
+ max_sum = 0.0f;
+ for (c = 0;
+ c <
+ pstr_drc_config->dwnmix_instructions[i].target_channel_count;
+ c++) {
+ sum = 0.0f;
+ for (d = 0; d < base_channel_count; d++) {
+ sum += pstr_drc_config->dwnmix_instructions[i]
+ .downmix_coefficient[c * base_channel_count + d];
+ }
+ if (max_sum < sum) max_sum = sum;
}
+ signal_peak_level_tmp = 20.0f * (FLOAT32)log10(max_sum);
+ } else {
+ }
+ break;
}
- if (match_found_flag == 0) {
- if (requested_dwnmix_id != ID_FOR_BASE_LAYOUT) {
- signal_peak_level_tmp = 0.f;
- for (i=0; i<pstr_drc_config->dwnmix_instructions_count; i++)
- {
- if (pstr_drc_config->dwnmix_instructions[i].downmix_id == requested_dwnmix_id)
- {
- if (pstr_drc_config->dwnmix_instructions[i].downmix_coefficients_present)
- {
- base_channel_count = pstr_drc_config->channel_layout.base_channel_count;
- max_sum = 0.0f;
- for (c=0; c<pstr_drc_config->dwnmix_instructions[i].target_channel_count; c++)
- {
- sum = 0.0f;
- for (d=0; d<base_channel_count; d++)
- {
- sum += pstr_drc_config->dwnmix_instructions[i].downmix_coefficient[c * base_channel_count + d];
- }
- if (max_sum < sum) max_sum = sum;
- }
- signal_peak_level_tmp = 20.0f * (FLOAT32)log10(max_sum);
- } else {
-
- }
- break;
- }
+ }
+ for (n = 0; n < loudness_info_count; n++) {
+ if (mode == 1) {
+ loudness_info = &(pstr_loudness_info->str_loudness_info_album[n]);
+ } else {
+ loudness_info = &(pstr_loudness_info->loudness_info[n]);
+ }
+ if (loudness_drc_set_id_requested == loudness_info->drc_set_id &&
+ ID_FOR_BASE_LAYOUT == loudness_info->downmix_id) {
+ if (loudness_info->true_peak_level_present) {
+ eq_set_id[peak_count] = loudness_info->eq_set_id;
+
+ signal_peak_level[peak_count] =
+ loudness_info->true_peak_level + signal_peak_level_tmp;
+ explicit_peak_information_present[peak_count] = 0;
+
+ match_found_flag = 1;
+ peak_count++;
+ }
+ if (match_found_flag == 0) {
+ if (loudness_info->sample_peak_level_present) {
+ eq_set_id[peak_count] = loudness_info->eq_set_id;
+
+ signal_peak_level[peak_count] =
+ loudness_info->sample_peak_level + signal_peak_level_tmp;
+ explicit_peak_information_present[peak_count] = 0;
+
+ match_found_flag = 1;
+ peak_count++;
}
- for (n=0; n<loudness_info_count; n++)
- {
- if (mode == 1)
- {
- loudness_info = &(pstr_loudness_info->str_loudness_info_album[n]);
- }
- else
- {
- loudness_info = &(pstr_loudness_info->loudness_info[n]);
- }
- if (loudness_drc_set_id_requested == loudness_info->drc_set_id && ID_FOR_BASE_LAYOUT == loudness_info->downmix_id) {
- if (loudness_info->true_peak_level_present)
- {
- eq_set_id[peak_count] = loudness_info->eq_set_id;
-
- signal_peak_level[peak_count] = loudness_info->true_peak_level + signal_peak_level_tmp;
- explicit_peak_information_present[peak_count] = 0;
-
- match_found_flag = 1;
- peak_count++;
-
- }
- if (match_found_flag == 0) {
- if (loudness_info->sample_peak_level_present)
- {
- eq_set_id[peak_count] = loudness_info->eq_set_id;
-
- signal_peak_level[peak_count] = loudness_info->sample_peak_level + signal_peak_level_tmp;
- explicit_peak_information_present[peak_count] = 0;
-
- match_found_flag = 1;
- peak_count++;
-
- }
- }
- }
+ }
+ }
+ }
+ if (match_found_flag == 0) {
+ for (n = 0; n < loudness_info_count; n++) {
+ if (mode == 1) {
+ loudness_info = &(pstr_loudness_info->str_loudness_info_album[n]);
+ } else {
+ loudness_info = &(pstr_loudness_info->loudness_info[n]);
+ }
+ if (ID_FOR_ANY_DRC == loudness_info->drc_set_id &&
+ ID_FOR_BASE_LAYOUT == loudness_info->downmix_id) {
+ if (loudness_info->true_peak_level_present) {
+ eq_set_id[peak_count] = loudness_info->eq_set_id;
+
+ signal_peak_level[peak_count] =
+ loudness_info->true_peak_level + signal_peak_level_tmp;
+ explicit_peak_information_present[peak_count] = 0;
+
+ match_found_flag = 1;
+ peak_count++;
}
if (match_found_flag == 0) {
- for (n=0; n<loudness_info_count; n++)
- {
- if (mode == 1)
- {
- loudness_info = &(pstr_loudness_info->str_loudness_info_album[n]);
- }
- else
- {
- loudness_info = &(pstr_loudness_info->loudness_info[n]);
- }
- if (ID_FOR_ANY_DRC == loudness_info->drc_set_id && ID_FOR_BASE_LAYOUT == loudness_info->downmix_id) {
- if (loudness_info->true_peak_level_present)
- {
- eq_set_id[peak_count] = loudness_info->eq_set_id;
-
- signal_peak_level[peak_count] = loudness_info->true_peak_level + signal_peak_level_tmp;
- explicit_peak_information_present[peak_count] = 0;
-
- match_found_flag = 1;
- peak_count++;
-
- }
- if (match_found_flag == 0) {
- if (loudness_info->sample_peak_level_present)
- {
- eq_set_id[peak_count] = loudness_info->eq_set_id;
-
- signal_peak_level[peak_count] = loudness_info->sample_peak_level + signal_peak_level_tmp;
- explicit_peak_information_present[peak_count] = 0;
+ if (loudness_info->sample_peak_level_present) {
+ eq_set_id[peak_count] = loudness_info->eq_set_id;
- match_found_flag = 1;
- peak_count++;
+ signal_peak_level[peak_count] =
+ loudness_info->sample_peak_level + signal_peak_level_tmp;
+ explicit_peak_information_present[peak_count] = 0;
- }
- }
- }
- }
+ match_found_flag = 1;
+ peak_count++;
+ }
}
- if (match_found_flag == 0) {
- ia_drc_instructions_struct* drc_instructions_drc_tmp;
- for (n=0; n<pstr_drc_config->drc_instructions_count_plus; n++) {
- drc_instructions_drc_tmp = &pstr_drc_config->str_drc_instruction_str[n];
- if (loudness_drc_set_id_requested == drc_instructions_drc_tmp->drc_set_id) {
- for (k=0; k<drc_instructions_drc_tmp->dwnmix_id_count; k++) {
- if (ID_FOR_BASE_LAYOUT == drc_instructions_drc_tmp->downmix_id[k]) {
- if (drc_instructions_drc_tmp->limiter_peak_target_present) {
- eq_set_id[peak_count] = -1;
- signal_peak_level[peak_count] = drc_instructions_drc_tmp->limiter_peak_target + signal_peak_level_tmp;
- explicit_peak_information_present[peak_count] = 0;
- match_found_flag = 1;
- peak_count++;
- }
- }
- break;
- }
- }
+ }
+ }
+ }
+ if (match_found_flag == 0) {
+ ia_drc_instructions_struct* drc_instructions_drc_tmp;
+ for (n = 0; n < pstr_drc_config->drc_instructions_count_plus; n++) {
+ drc_instructions_drc_tmp =
+ &pstr_drc_config->str_drc_instruction_str[n];
+ if (loudness_drc_set_id_requested ==
+ drc_instructions_drc_tmp->drc_set_id) {
+ for (k = 0; k < drc_instructions_drc_tmp->dwnmix_id_count; k++) {
+ if (ID_FOR_BASE_LAYOUT ==
+ drc_instructions_drc_tmp->downmix_id[k]) {
+ if (drc_instructions_drc_tmp->limiter_peak_target_present) {
+ eq_set_id[peak_count] = -1;
+ signal_peak_level[peak_count] =
+ drc_instructions_drc_tmp->limiter_peak_target +
+ signal_peak_level_tmp;
+ explicit_peak_information_present[peak_count] = 0;
+ match_found_flag = 1;
+ peak_count++;
}
+ }
+ break;
}
+ }
}
- }
- if (peak_count > 0)
- {
- *peak_info_count = peak_count;
- }
- else
- {
- *peak_info_count = pre_lim_count;
- }
- return (0);
+ }
+ }
+ }
+ if (peak_count > 0) {
+ *peak_info_count = peak_count;
+ } else {
+ *peak_info_count = pre_lim_count;
+ }
+ return (0);
}
-
-
WORD32
-impd_extract_loudness_peak_to_average_info(ia_loudness_info_struct* loudness_info,
- WORD32 dyn_range_measurement_type,
- WORD32 * loudness_peak_2_avg_value_present,
- FLOAT32* loudness_peak_2_avg_value)
-{
- WORD32 k;
- WORD32 program_loudness_present = 0;
- WORD32 peak_loudness_present = 0;
- WORD32 match_measure_program_loudness = 0;
- WORD32 match_measure_peak_loudness = 0;
- FLOAT32 program_loudness = 0.0f;
- FLOAT32 peak_loudness = 0.0f;
- ia_loudness_measure_struct* loudness_measure = NULL;
-
- for (k=0; k<loudness_info->measurement_count; k++)
- {
- loudness_measure = &(loudness_info->loudness_measure[k]);
- if (loudness_measure->method_def == METHOD_DEFINITION_PROGRAM_LOUDNESS)
- {
- if (match_measure_program_loudness < measurement_method_prog_loudness_tbl[loudness_measure->measurement_system])
- {
- program_loudness = loudness_measure->method_val;
- program_loudness_present = 1;
- match_measure_program_loudness = measurement_method_prog_loudness_tbl[loudness_measure->measurement_system];
- }
+impd_extract_loudness_peak_to_average_info(
+ ia_loudness_info_struct* loudness_info, WORD32 dyn_range_measurement_type,
+ WORD32* loudness_peak_2_avg_value_present,
+ FLOAT32* loudness_peak_2_avg_value) {
+ WORD32 k;
+ WORD32 program_loudness_present = 0;
+ WORD32 peak_loudness_present = 0;
+ WORD32 match_measure_program_loudness = 0;
+ WORD32 match_measure_peak_loudness = 0;
+ FLOAT32 program_loudness = 0.0f;
+ FLOAT32 peak_loudness = 0.0f;
+ ia_loudness_measure_struct* loudness_measure = NULL;
+
+ for (k = 0; k < loudness_info->measurement_count; k++) {
+ loudness_measure = &(loudness_info->loudness_measure[k]);
+ if (loudness_measure->method_def == METHOD_DEFINITION_PROGRAM_LOUDNESS) {
+ if (match_measure_program_loudness <
+ measurement_method_prog_loudness_tbl[loudness_measure
+ ->measurement_system]) {
+ program_loudness = loudness_measure->method_val;
+ program_loudness_present = 1;
+ match_measure_program_loudness =
+ measurement_method_prog_loudness_tbl[loudness_measure
+ ->measurement_system];
+ }
+ }
+ switch (dyn_range_measurement_type) {
+ case SHORT_TERM_LOUDNESS_TO_AVG:
+ if (loudness_measure->method_def ==
+ METHOD_DEFINITION_SHORT_TERM_LOUDNESS_MAX) {
+ if (match_measure_peak_loudness <
+ measurement_method_peak_loudness_tbl[loudness_measure
+ ->measurement_system]) {
+ peak_loudness = loudness_measure->method_val;
+ peak_loudness_present = 1;
+ match_measure_peak_loudness =
+ measurement_method_peak_loudness_tbl[loudness_measure
+ ->measurement_system];
+ }
}
- switch (dyn_range_measurement_type) {
- case SHORT_TERM_LOUDNESS_TO_AVG:
- if (loudness_measure->method_def == METHOD_DEFINITION_SHORT_TERM_LOUDNESS_MAX)
- {
- if (match_measure_peak_loudness < measurement_method_peak_loudness_tbl[loudness_measure->measurement_system])
- {
- peak_loudness = loudness_measure->method_val;
- peak_loudness_present = 1;
- match_measure_peak_loudness = measurement_method_peak_loudness_tbl[loudness_measure->measurement_system];
- }
- }
- break;
-
- case MOMENTARY_LOUDNESS_TO_AVG:
- if (loudness_measure->method_def == METHOD_DEFINITION_MOMENTARY_LOUDNESS_MAX)
- {
- if (match_measure_peak_loudness < measurement_method_peak_loudness_tbl[loudness_measure->measurement_system])
- {
- peak_loudness = loudness_measure->method_val;
- peak_loudness_present = 1;
- match_measure_peak_loudness = measurement_method_peak_loudness_tbl[loudness_measure->measurement_system];
- }
- }
- break;
-
- case TOP_OF_LOUDNESS_RANGE_TO_AVG:
- if (loudness_measure->method_def == METHOD_DEFINITION_MAX_OF_LOUDNESS_RANGE)
- {
- if (match_measure_peak_loudness < measurement_method_peak_loudness_tbl[loudness_measure->measurement_system])
- {
- peak_loudness = loudness_measure->method_val;
- peak_loudness_present = 1;
- match_measure_peak_loudness = measurement_method_peak_loudness_tbl[loudness_measure->measurement_system];
- }
- }
- break;
+ break;
+
+ case MOMENTARY_LOUDNESS_TO_AVG:
+ if (loudness_measure->method_def ==
+ METHOD_DEFINITION_MOMENTARY_LOUDNESS_MAX) {
+ if (match_measure_peak_loudness <
+ measurement_method_peak_loudness_tbl[loudness_measure
+ ->measurement_system]) {
+ peak_loudness = loudness_measure->method_val;
+ peak_loudness_present = 1;
+ match_measure_peak_loudness =
+ measurement_method_peak_loudness_tbl[loudness_measure
+ ->measurement_system];
+ }
+ }
+ break;
+
+ case TOP_OF_LOUDNESS_RANGE_TO_AVG:
+ if (loudness_measure->method_def ==
+ METHOD_DEFINITION_MAX_OF_LOUDNESS_RANGE) {
+ if (match_measure_peak_loudness <
+ measurement_method_peak_loudness_tbl[loudness_measure
+ ->measurement_system]) {
+ peak_loudness = loudness_measure->method_val;
+ peak_loudness_present = 1;
+ match_measure_peak_loudness =
+ measurement_method_peak_loudness_tbl[loudness_measure
+ ->measurement_system];
+ }
+ }
+ break;
- default:
- return (UNEXPECTED_ERROR);
+ default:
+ return (UNEXPECTED_ERROR);
- break;
- }
+ break;
}
- if ((program_loudness_present == 1) && (peak_loudness_present == 1))
- {
- *loudness_peak_2_avg_value = peak_loudness - program_loudness;
- *loudness_peak_2_avg_value_present = 1;
- }
- return (0);
+ }
+ if ((program_loudness_present == 1) && (peak_loudness_present == 1)) {
+ *loudness_peak_2_avg_value = peak_loudness - program_loudness;
+ *loudness_peak_2_avg_value_present = 1;
+ }
+ return (0);
}
WORD32 impd_loudness_peak_to_average_info(
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- ia_drc_instructions_struct* str_drc_instruction_str,
- WORD32 requested_dwnmix_id,
- WORD32 dyn_range_measurement_type,
- WORD32 album_mode,
- WORD32* loudness_peak_2_avg_value_present,
- FLOAT32* loudness_peak_2_avg_value)
-{
- WORD32 n, err;
- WORD32 drc_set_id = max(0,str_drc_instruction_str->drc_set_id);
-
- *loudness_peak_2_avg_value_present = 0;
-
- if (album_mode == 1)
- {
- for (n=0; n<pstr_loudness_info->loudness_info_album_count; n++)
- {
- ia_loudness_info_struct* loudness_info = &(pstr_loudness_info->str_loudness_info_album[n]);
- if (drc_set_id == loudness_info->drc_set_id)
- {
- if (requested_dwnmix_id == loudness_info->downmix_id)
- {
-
- err = impd_extract_loudness_peak_to_average_info(loudness_info,
- dyn_range_measurement_type,
- loudness_peak_2_avg_value_present,
- loudness_peak_2_avg_value);
- if (err) return (err);
-
- }
- }
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ ia_drc_instructions_struct* str_drc_instruction_str,
+ WORD32 requested_dwnmix_id, WORD32 dyn_range_measurement_type,
+ WORD32 album_mode, WORD32* loudness_peak_2_avg_value_present,
+ FLOAT32* loudness_peak_2_avg_value) {
+ WORD32 n, err;
+ WORD32 drc_set_id = max(0, str_drc_instruction_str->drc_set_id);
+
+ *loudness_peak_2_avg_value_present = 0;
+
+ if (album_mode == 1) {
+ for (n = 0; n < pstr_loudness_info->loudness_info_album_count; n++) {
+ ia_loudness_info_struct* loudness_info =
+ &(pstr_loudness_info->str_loudness_info_album[n]);
+ if (drc_set_id == loudness_info->drc_set_id) {
+ if (requested_dwnmix_id == loudness_info->downmix_id) {
+ err = impd_extract_loudness_peak_to_average_info(
+ loudness_info, dyn_range_measurement_type,
+ loudness_peak_2_avg_value_present, loudness_peak_2_avg_value);
+ if (err) return (err);
}
- }
- if (*loudness_peak_2_avg_value_present == 0)
- {
- for (n=0; n<pstr_loudness_info->loudness_info_count; n++)
- {
- ia_loudness_info_struct* loudness_info = &(pstr_loudness_info->loudness_info[n]);
- if (drc_set_id == loudness_info->drc_set_id)
- {
- if (requested_dwnmix_id == loudness_info->downmix_id)
- {
-
- err = impd_extract_loudness_peak_to_average_info(loudness_info,
- dyn_range_measurement_type,
- loudness_peak_2_avg_value_present,
- loudness_peak_2_avg_value);
- if (err) return (err);
-
- }
- }
+ }
+ }
+ }
+ if (*loudness_peak_2_avg_value_present == 0) {
+ for (n = 0; n < pstr_loudness_info->loudness_info_count; n++) {
+ ia_loudness_info_struct* loudness_info =
+ &(pstr_loudness_info->loudness_info[n]);
+ if (drc_set_id == loudness_info->drc_set_id) {
+ if (requested_dwnmix_id == loudness_info->downmix_id) {
+ err = impd_extract_loudness_peak_to_average_info(
+ loudness_info, dyn_range_measurement_type,
+ loudness_peak_2_avg_value_present, loudness_peak_2_avg_value);
+ if (err) return (err);
}
+ }
}
- return (0);
+ }
+ return (0);
}
+WORD32 impd_overall_loudness_present(ia_loudness_info_struct* loudness_info,
+ WORD32* loudness_info_present) {
+ WORD32 m;
-WORD32 impd_overall_loudness_present( ia_loudness_info_struct* loudness_info,
- WORD32* loudness_info_present)
-{
- WORD32 m;
-
- *loudness_info_present = 0;
- for (m=0; m<loudness_info->measurement_count; m++)
- {
- if ((loudness_info->loudness_measure[m].method_def == METHOD_DEFINITION_PROGRAM_LOUDNESS) ||
- (loudness_info->loudness_measure[m].method_def == METHOD_DEFINITION_ANCHOR_LOUDNESS))
- {
- *loudness_info_present = 1;
- }
+ *loudness_info_present = 0;
+ for (m = 0; m < loudness_info->measurement_count; m++) {
+ if ((loudness_info->loudness_measure[m].method_def ==
+ METHOD_DEFINITION_PROGRAM_LOUDNESS) ||
+ (loudness_info->loudness_measure[m].method_def ==
+ METHOD_DEFINITION_ANCHOR_LOUDNESS)) {
+ *loudness_info_present = 1;
}
- return (0);
+ }
+ return (0);
}
WORD32 impd_check_loud_info(WORD32 loudness_info_count,
- ia_loudness_info_struct* loudness_info,
- WORD32 requested_dwnmix_id,
- WORD32 drc_set_id_requested,
- WORD32* info_count,
- ia_loudness_info_struct* loudness_info_matching[])
-{
- WORD32 n, err;
- WORD32 loudness_info_present;
- for (n=0; n<loudness_info_count; n++)
- {
- if (requested_dwnmix_id == loudness_info[n].downmix_id)
- {
- if (drc_set_id_requested == loudness_info[n].drc_set_id)
- {
- err = impd_overall_loudness_present(&(loudness_info[n]), &loudness_info_present);
- if (err)
- return (err);
- if (loudness_info_present)
- {
- loudness_info_matching[*info_count] = &(loudness_info[n]);
- (*info_count)++;
- }
- }
+ ia_loudness_info_struct* loudness_info,
+ WORD32 requested_dwnmix_id,
+ WORD32 drc_set_id_requested, WORD32* info_count,
+ ia_loudness_info_struct* loudness_info_matching[]) {
+ WORD32 n, err;
+ WORD32 loudness_info_present;
+ for (n = 0; n < loudness_info_count; n++) {
+ if (requested_dwnmix_id == loudness_info[n].downmix_id) {
+ if (drc_set_id_requested == loudness_info[n].drc_set_id) {
+ err = impd_overall_loudness_present(&(loudness_info[n]),
+ &loudness_info_present);
+ if (err) return (err);
+ if (loudness_info_present) {
+ loudness_info_matching[*info_count] = &(loudness_info[n]);
+ (*info_count)++;
}
+ }
}
+ }
- return (0);
+ return (0);
}
-WORD32 impd_check_loud_payload(WORD32 loudness_info_count,
- ia_loudness_info_struct* loudness_info,
- WORD32 requested_dwnmix_id,
- WORD32 drc_set_id_requested,
- WORD32* info_count,
- ia_loudness_info_struct* loudness_info_matching[])
-{
- WORD32 err = 0;
-
- err = impd_check_loud_info(loudness_info_count, loudness_info, requested_dwnmix_id, drc_set_id_requested, info_count, loudness_info_matching);
- if (err || *info_count) goto matchEnd;
- err = impd_check_loud_info(loudness_info_count, loudness_info, ID_FOR_ANY_DOWNMIX, drc_set_id_requested, info_count, loudness_info_matching); if (err || *info_count) goto matchEnd;
- err = impd_check_loud_info(loudness_info_count, loudness_info, requested_dwnmix_id, ID_FOR_ANY_DRC, info_count, loudness_info_matching); if (err || *info_count) goto matchEnd;
- err = impd_check_loud_info(loudness_info_count, loudness_info, requested_dwnmix_id, ID_FOR_NO_DRC, info_count, loudness_info_matching); if (err || *info_count) goto matchEnd;
- err = impd_check_loud_info(loudness_info_count, loudness_info, ID_FOR_ANY_DOWNMIX, ID_FOR_ANY_DRC, info_count, loudness_info_matching); if (err || *info_count) goto matchEnd;
- err = impd_check_loud_info(loudness_info_count, loudness_info, ID_FOR_ANY_DOWNMIX, ID_FOR_NO_DRC, info_count, loudness_info_matching); if (err || *info_count) goto matchEnd;
- err = impd_check_loud_info(loudness_info_count, loudness_info, ID_FOR_BASE_LAYOUT, drc_set_id_requested, info_count, loudness_info_matching); if (err || *info_count) goto matchEnd;
- err = impd_check_loud_info(loudness_info_count, loudness_info, ID_FOR_BASE_LAYOUT, ID_FOR_ANY_DRC, info_count, loudness_info_matching); if (err || *info_count) goto matchEnd;
- err = impd_check_loud_info(loudness_info_count, loudness_info, ID_FOR_BASE_LAYOUT, ID_FOR_NO_DRC, info_count, loudness_info_matching); if (err || *info_count) goto matchEnd;
+WORD32 impd_check_loud_payload(
+ WORD32 loudness_info_count, ia_loudness_info_struct* loudness_info,
+ WORD32 requested_dwnmix_id, WORD32 drc_set_id_requested, WORD32* info_count,
+ ia_loudness_info_struct* loudness_info_matching[]) {
+ WORD32 err = 0;
+
+ err = impd_check_loud_info(loudness_info_count, loudness_info,
+ requested_dwnmix_id, drc_set_id_requested,
+ info_count, loudness_info_matching);
+ if (err || *info_count) goto matchEnd;
+ err = impd_check_loud_info(loudness_info_count, loudness_info,
+ ID_FOR_ANY_DOWNMIX, drc_set_id_requested,
+ info_count, loudness_info_matching);
+ if (err || *info_count) goto matchEnd;
+ err = impd_check_loud_info(loudness_info_count, loudness_info,
+ requested_dwnmix_id, ID_FOR_ANY_DRC, info_count,
+ loudness_info_matching);
+ if (err || *info_count) goto matchEnd;
+ err = impd_check_loud_info(loudness_info_count, loudness_info,
+ requested_dwnmix_id, ID_FOR_NO_DRC, info_count,
+ loudness_info_matching);
+ if (err || *info_count) goto matchEnd;
+ err = impd_check_loud_info(loudness_info_count, loudness_info,
+ ID_FOR_ANY_DOWNMIX, ID_FOR_ANY_DRC, info_count,
+ loudness_info_matching);
+ if (err || *info_count) goto matchEnd;
+ err = impd_check_loud_info(loudness_info_count, loudness_info,
+ ID_FOR_ANY_DOWNMIX, ID_FOR_NO_DRC, info_count,
+ loudness_info_matching);
+ if (err || *info_count) goto matchEnd;
+ err = impd_check_loud_info(loudness_info_count, loudness_info,
+ ID_FOR_BASE_LAYOUT, drc_set_id_requested,
+ info_count, loudness_info_matching);
+ if (err || *info_count) goto matchEnd;
+ err = impd_check_loud_info(loudness_info_count, loudness_info,
+ ID_FOR_BASE_LAYOUT, ID_FOR_ANY_DRC, info_count,
+ loudness_info_matching);
+ if (err || *info_count) goto matchEnd;
+ err = impd_check_loud_info(loudness_info_count, loudness_info,
+ ID_FOR_BASE_LAYOUT, ID_FOR_NO_DRC, info_count,
+ loudness_info_matching);
+ if (err || *info_count) goto matchEnd;
matchEnd:
- return (err);
+ return (err);
}
-
-WORD32 impd_find_overall_loudness_info(ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- WORD32 requested_dwnmix_id,
- WORD32 drc_set_id_requested,
- WORD32* overall_loudness_info_present,
- WORD32* info_count,
- ia_loudness_info_struct* loudness_info_matching[])
-{
- WORD32 err;
- WORD32 loudness_drc_set_id_requested;
-
- *info_count = 0;
- if (drc_set_id_requested < 0)
- {
- loudness_drc_set_id_requested = ID_FOR_NO_DRC;
- }
- else
- {
- loudness_drc_set_id_requested = drc_set_id_requested;
- }
- if (pstr_drc_sel_proc_params_struct->album_mode == 1)
- {
- err = impd_check_loud_payload(pstr_loudness_info->loudness_info_album_count,
- pstr_loudness_info->str_loudness_info_album,
- requested_dwnmix_id,
- loudness_drc_set_id_requested,
- info_count,
- loudness_info_matching);
- if (err) return (err);
-
- }
- if (*info_count == 0)
- {
- err = impd_check_loud_payload(pstr_loudness_info->loudness_info_count,
- pstr_loudness_info->loudness_info,
- requested_dwnmix_id,
- loudness_drc_set_id_requested,
-
- info_count,
- loudness_info_matching);
- if (err) return (err);
- }
- *overall_loudness_info_present = (*info_count > 0);
- return(0);
+WORD32 impd_find_overall_loudness_info(
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ WORD32 requested_dwnmix_id, WORD32 drc_set_id_requested,
+ WORD32* overall_loudness_info_present, WORD32* info_count,
+ ia_loudness_info_struct* loudness_info_matching[]) {
+ WORD32 err;
+ WORD32 loudness_drc_set_id_requested;
+
+ *info_count = 0;
+ if (drc_set_id_requested < 0) {
+ loudness_drc_set_id_requested = ID_FOR_NO_DRC;
+ } else {
+ loudness_drc_set_id_requested = drc_set_id_requested;
+ }
+ if (pstr_drc_sel_proc_params_struct->album_mode == 1) {
+ err = impd_check_loud_payload(
+ pstr_loudness_info->loudness_info_album_count,
+ pstr_loudness_info->str_loudness_info_album, requested_dwnmix_id,
+ loudness_drc_set_id_requested, info_count, loudness_info_matching);
+ if (err) return (err);
+ }
+ if (*info_count == 0) {
+ err = impd_check_loud_payload(pstr_loudness_info->loudness_info_count,
+ pstr_loudness_info->loudness_info,
+ requested_dwnmix_id,
+ loudness_drc_set_id_requested,
+
+ info_count, loudness_info_matching);
+ if (err) return (err);
+ }
+ *overall_loudness_info_present = (*info_count > 0);
+ return (0);
}
-
WORD32
-impd_high_pass_loudness_adjust_info( ia_loudness_info_struct* loudness_info,
- WORD32* loudness_hp_adjust_present,
- FLOAT32* loudness_hp_adjust)
-{
- WORD32 m, k;
-
- *loudness_hp_adjust_present = 0;
- *loudness_hp_adjust = 0.0f;
- for (m=0; m<loudness_info->measurement_count; m++)
- {
- if (loudness_info->loudness_measure[m].measurement_system == MEASUREMENT_SYSTEM_BS_1770_4_PRE_PROCESSING)
- {
- for (k=0; k<loudness_info->measurement_count; k++)
- {
- if (loudness_info->loudness_measure[k].measurement_system == MEASUREMENT_SYSTEM_BS_1770_4)
- {
- if (loudness_info->loudness_measure[m].method_def == loudness_info->loudness_measure[k].method_def)
- {
- *loudness_hp_adjust_present = 1;
- *loudness_hp_adjust = loudness_info->loudness_measure[m].method_val - loudness_info->loudness_measure[k].method_val;
- }
- }
- }
+impd_high_pass_loudness_adjust_info(ia_loudness_info_struct* loudness_info,
+ WORD32* loudness_hp_adjust_present,
+ FLOAT32* loudness_hp_adjust) {
+ WORD32 m, k;
+
+ *loudness_hp_adjust_present = 0;
+ *loudness_hp_adjust = 0.0f;
+ for (m = 0; m < loudness_info->measurement_count; m++) {
+ if (loudness_info->loudness_measure[m].measurement_system ==
+ MEASUREMENT_SYSTEM_BS_1770_4_PRE_PROCESSING) {
+ for (k = 0; k < loudness_info->measurement_count; k++) {
+ if (loudness_info->loudness_measure[k].measurement_system ==
+ MEASUREMENT_SYSTEM_BS_1770_4) {
+ if (loudness_info->loudness_measure[m].method_def ==
+ loudness_info->loudness_measure[k].method_def) {
+ *loudness_hp_adjust_present = 1;
+ *loudness_hp_adjust =
+ loudness_info->loudness_measure[m].method_val -
+ loudness_info->loudness_measure[k].method_val;
+ }
}
+ }
}
- return (0);
+ }
+ return (0);
}
WORD32 impd_find_high_pass_loudness_adjust(
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- WORD32 requested_dwnmix_id,
- WORD32 drc_set_id_requested,
- WORD32 album_mode,
- FLOAT32 device_cutoff_freq,
- WORD32* loudness_hp_adjust_present,
- FLOAT32* loudness_hp_adjust)
-{
- WORD32 n, err;
- WORD32 loudness_drc_set_id_requested;
-
- if (drc_set_id_requested < 0)
- {
- loudness_drc_set_id_requested = 0;
- }
- else
- {
- loudness_drc_set_id_requested = drc_set_id_requested;
- }
-
- *loudness_hp_adjust_present = 0;
-
- if (album_mode == 1)
- {
- for (n=0; n<pstr_loudness_info->loudness_info_album_count; n++)
- {
- if ((requested_dwnmix_id == pstr_loudness_info->str_loudness_info_album[n].downmix_id) || (ID_FOR_ANY_DOWNMIX == pstr_loudness_info->str_loudness_info_album[n].downmix_id))
- {
- if (loudness_drc_set_id_requested == pstr_loudness_info->str_loudness_info_album[n].drc_set_id)
- {
- err = impd_high_pass_loudness_adjust_info(&(pstr_loudness_info->loudness_info[n]), loudness_hp_adjust_present, loudness_hp_adjust);
- if (err) return (err);
- }
- }
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ WORD32 requested_dwnmix_id, WORD32 drc_set_id_requested, WORD32 album_mode,
+ FLOAT32 device_cutoff_freq, WORD32* loudness_hp_adjust_present,
+ FLOAT32* loudness_hp_adjust) {
+ WORD32 n, err;
+ WORD32 loudness_drc_set_id_requested;
+
+ if (drc_set_id_requested < 0) {
+ loudness_drc_set_id_requested = 0;
+ } else {
+ loudness_drc_set_id_requested = drc_set_id_requested;
+ }
+
+ *loudness_hp_adjust_present = 0;
+
+ if (album_mode == 1) {
+ for (n = 0; n < pstr_loudness_info->loudness_info_album_count; n++) {
+ if ((requested_dwnmix_id ==
+ pstr_loudness_info->str_loudness_info_album[n].downmix_id) ||
+ (ID_FOR_ANY_DOWNMIX ==
+ pstr_loudness_info->str_loudness_info_album[n].downmix_id)) {
+ if (loudness_drc_set_id_requested ==
+ pstr_loudness_info->str_loudness_info_album[n].drc_set_id) {
+ err = impd_high_pass_loudness_adjust_info(
+ &(pstr_loudness_info->loudness_info[n]),
+ loudness_hp_adjust_present, loudness_hp_adjust);
+ if (err) return (err);
}
- }
- if (*loudness_hp_adjust_present == 0)
- {
- for (n=0; n<pstr_loudness_info->loudness_info_count; n++)
- {
- if ((requested_dwnmix_id == pstr_loudness_info->loudness_info[n].downmix_id) || (ID_FOR_ANY_DOWNMIX == pstr_loudness_info->loudness_info[n].downmix_id))
- {
- if (loudness_drc_set_id_requested == pstr_loudness_info->loudness_info[n].drc_set_id)
- {
- err = impd_high_pass_loudness_adjust_info(&(pstr_loudness_info->loudness_info[n]), loudness_hp_adjust_present, loudness_hp_adjust);
- if (err) return (err);
- }
- }
+ }
+ }
+ }
+ if (*loudness_hp_adjust_present == 0) {
+ for (n = 0; n < pstr_loudness_info->loudness_info_count; n++) {
+ if ((requested_dwnmix_id ==
+ pstr_loudness_info->loudness_info[n].downmix_id) ||
+ (ID_FOR_ANY_DOWNMIX ==
+ pstr_loudness_info->loudness_info[n].downmix_id)) {
+ if (loudness_drc_set_id_requested ==
+ pstr_loudness_info->loudness_info[n].drc_set_id) {
+ err = impd_high_pass_loudness_adjust_info(
+ &(pstr_loudness_info->loudness_info[n]),
+ loudness_hp_adjust_present, loudness_hp_adjust);
+ if (err) return (err);
}
- }
- if (*loudness_hp_adjust_present == 0)
- {
- for (n=0; n<pstr_loudness_info->loudness_info_count; n++)
- {
- if (ID_FOR_BASE_LAYOUT == pstr_loudness_info->loudness_info[n].downmix_id) /* base layout */
- {
- if (loudness_drc_set_id_requested == pstr_loudness_info->loudness_info[n].drc_set_id)
- {
- err = impd_high_pass_loudness_adjust_info(&(pstr_loudness_info->loudness_info[n]), loudness_hp_adjust_present, loudness_hp_adjust);
- if (err) return (err);
- }
- }
+ }
+ }
+ }
+ if (*loudness_hp_adjust_present == 0) {
+ for (n = 0; n < pstr_loudness_info->loudness_info_count; n++) {
+ if (ID_FOR_BASE_LAYOUT ==
+ pstr_loudness_info->loudness_info[n].downmix_id) /* base layout */
+ {
+ if (loudness_drc_set_id_requested ==
+ pstr_loudness_info->loudness_info[n].drc_set_id) {
+ err = impd_high_pass_loudness_adjust_info(
+ &(pstr_loudness_info->loudness_info[n]),
+ loudness_hp_adjust_present, loudness_hp_adjust);
+ if (err) return (err);
}
- }
- if (*loudness_hp_adjust_present == 0)
- {
- for (n=0; n<pstr_loudness_info->loudness_info_count; n++)
- {
- if (ID_FOR_BASE_LAYOUT == pstr_loudness_info->loudness_info[n].downmix_id) /* base layout */
- {
- if (0 == pstr_loudness_info->loudness_info[n].drc_set_id)
- {
- err = impd_high_pass_loudness_adjust_info(&(pstr_loudness_info->loudness_info[n]), loudness_hp_adjust_present, loudness_hp_adjust);
- if (err) return (err);
- }
- }
+ }
+ }
+ }
+ if (*loudness_hp_adjust_present == 0) {
+ for (n = 0; n < pstr_loudness_info->loudness_info_count; n++) {
+ if (ID_FOR_BASE_LAYOUT ==
+ pstr_loudness_info->loudness_info[n].downmix_id) /* base layout */
+ {
+ if (0 == pstr_loudness_info->loudness_info[n].drc_set_id) {
+ err = impd_high_pass_loudness_adjust_info(
+ &(pstr_loudness_info->loudness_info[n]),
+ loudness_hp_adjust_present, loudness_hp_adjust);
+ if (err) return (err);
}
+ }
}
- if (*loudness_hp_adjust_present == 0)
- {
- *loudness_hp_adjust = 0.0f;
- }
- else
- {
- *loudness_hp_adjust *= (max(20.0f, min(500.0f, device_cutoff_freq)) - 20.0f) / (500.0f - 20.0f);
- }
- return(0);
+ }
+ if (*loudness_hp_adjust_present == 0) {
+ *loudness_hp_adjust = 0.0f;
+ } else {
+ *loudness_hp_adjust *=
+ (max(20.0f, min(500.0f, device_cutoff_freq)) - 20.0f) /
+ (500.0f - 20.0f);
+ }
+ return (0);
}
-
-WORD32 impd_init_loudness_control (ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- WORD32 requested_dwnmix_id,
- WORD32 drc_set_id_requested,
- WORD32 num_compression_eq_count,
- WORD32* num_compression_eq_id,
- WORD32* loudness_info_count,
- WORD32 eq_set_id[],
- FLOAT32 loudness_normalization_gain_db[],
- FLOAT32 loudness[])
-{
- WORD32 err, k, info_count = 0, pre_lim_count;
- WORD32 loudness_hp_adjust_present;
- WORD32 overall_loudness_info_present;
- FLOAT32 pre_proc_adjust;
-
- k=0;
- if (drc_set_id_requested < 0)
- {
- for (k=0; k<num_compression_eq_count; k++)
- {
- eq_set_id[k] = num_compression_eq_id[k];
- loudness[k] = UNDEFINED_LOUDNESS_VALUE;
- loudness_normalization_gain_db[k] = 0.0f;
+WORD32 impd_init_loudness_control(
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ WORD32 requested_dwnmix_id, WORD32 drc_set_id_requested,
+ WORD32 num_compression_eq_count, WORD32* num_compression_eq_id,
+ WORD32* loudness_info_count, WORD32 eq_set_id[],
+ FLOAT32 loudness_normalization_gain_db[], FLOAT32 loudness[]) {
+ WORD32 err, k, info_count = 0, pre_lim_count;
+ WORD32 loudness_hp_adjust_present;
+ WORD32 overall_loudness_info_present;
+ FLOAT32 pre_proc_adjust;
+
+ k = 0;
+ if (drc_set_id_requested < 0) {
+ for (k = 0; k < num_compression_eq_count; k++) {
+ eq_set_id[k] = num_compression_eq_id[k];
+ loudness[k] = UNDEFINED_LOUDNESS_VALUE;
+ loudness_normalization_gain_db[k] = 0.0f;
+ }
+ }
+ eq_set_id[k] = 0;
+ loudness[k] = UNDEFINED_LOUDNESS_VALUE;
+ loudness_normalization_gain_db[k] = 0.0f;
+ k++;
+
+ pre_lim_count = k;
+
+ if (pstr_drc_sel_proc_params_struct->loudness_normalization_on == 1) {
+ WORD32 n;
+ ia_loudness_info_struct* loudness_info[16];
+ err = impd_find_overall_loudness_info(
+ pstr_drc_sel_proc_params_struct, pstr_loudness_info,
+ requested_dwnmix_id, drc_set_id_requested,
+ &overall_loudness_info_present, &info_count, loudness_info);
+ if (err) return (err);
+
+ if (overall_loudness_info_present == 1) {
+ WORD32 requested_method_definition = METHOD_DEFINITION_PROGRAM_LOUDNESS;
+ WORD32 other_method_definition = METHOD_DEFINITION_PROGRAM_LOUDNESS;
+ WORD32 requested_measurement_system = MEASUREMENT_SYSTEM_BS_1770_4;
+ WORD32 requested_preprocessing = 0;
+
+ WORD32* system_bonus = measurement_system_default_tbl;
+
+ WORD32 match_measure;
+ FLOAT32 method_val = 0;
+
+ switch (pstr_drc_sel_proc_params_struct->loudness_measurement_method) {
+ case USER_METHOD_DEFINITION_DEFAULT:
+ case USER_METHOD_DEFINITION_PROGRAM_LOUDNESS:
+ requested_method_definition = METHOD_DEFINITION_PROGRAM_LOUDNESS;
+ other_method_definition = METHOD_DEFINITION_ANCHOR_LOUDNESS;
+ break;
+ case USER_METHOD_DEFINITION_ANCHOR_LOUDNESS:
+ requested_method_definition = METHOD_DEFINITION_ANCHOR_LOUDNESS;
+ other_method_definition = METHOD_DEFINITION_PROGRAM_LOUDNESS;
+ break;
+
+ default:
+ return (UNEXPECTED_ERROR);
+ break;
+ }
+
+ switch (pstr_drc_sel_proc_params_struct->loudness_measurement_system) {
+ case USER_MEASUREMENT_SYSTEM_DEFAULT:
+ case USER_MEASUREMENT_SYSTEM_BS_1770_4:
+ requested_measurement_system = MEASUREMENT_SYSTEM_BS_1770_4;
+ system_bonus = measurement_system_bs1770_3_tbl;
+ break;
+ case USER_MEASUREMENT_SYSTEM_USER:
+ requested_measurement_system = MEASUREMENT_SYSTEM_USER;
+ system_bonus = measurement_system_user_tbl;
+ break;
+ case USER_MEASUREMENT_SYSTEM_EXPERT_PANEL:
+ requested_measurement_system = MEASUREMENT_SYSTEM_EXPERT_PANEL;
+ system_bonus = measurement_system_expert_tbl;
+ break;
+ case USER_MEASUREMENT_SYSTEM_RESERVED_A:
+ requested_measurement_system = USER_MEASUREMENT_SYSTEM_RESERVED_A;
+ system_bonus = measurement_system_rms_a_tbl;
+ break;
+ case USER_MEASUREMENT_SYSTEM_RESERVED_B:
+ requested_measurement_system = USER_MEASUREMENT_SYSTEM_RESERVED_B;
+ system_bonus = measurement_system_rms_b_tbl;
+ break;
+ case USER_MEASUREMENT_SYSTEM_RESERVED_C:
+ requested_measurement_system = USER_MEASUREMENT_SYSTEM_RESERVED_C;
+ system_bonus = measurement_system_rms_c_tbl;
+ break;
+ case USER_MEASUREMENT_SYSTEM_RESERVED_D:
+ requested_measurement_system = USER_MEASUREMENT_SYSTEM_RESERVED_D;
+ system_bonus = measurement_system_rms_d_tbl;
+ break;
+ case USER_MEASUREMENT_SYSTEM_RESERVED_E:
+ requested_measurement_system = USER_MEASUREMENT_SYSTEM_RESERVED_E;
+ system_bonus = measurement_system_rms_e_tbl;
+ break;
+
+ default:
+ return (UNEXPECTED_ERROR);
+ break;
+ }
+
+ switch (pstr_drc_sel_proc_params_struct->loudness_measurement_pre_proc) {
+ case USER_LOUDNESS_PREPROCESSING_DEFAULT:
+ case USER_LOUDNESS_PREPROCESSING_OFF:
+ requested_preprocessing = 0;
+ break;
+ case USER_LOUDNESS_PREPROCESSING_HIGHPASS:
+ requested_preprocessing = 1;
+ break;
+
+ default:
+ return (UNEXPECTED_ERROR);
+ break;
+ }
+
+ for (k = 0; k < info_count; k++) {
+ match_measure = -1;
+ for (n = 0; n < loudness_info[k]->measurement_count; n++) {
+ ia_loudness_measure_struct* loudness_measure =
+ &(loudness_info[k]->loudness_measure[n]);
+ if (match_measure <
+ system_bonus[loudness_measure->measurement_system] &&
+ requested_method_definition == loudness_measure->method_def) {
+ method_val = loudness_measure->method_val;
+ match_measure = system_bonus[loudness_measure->measurement_system];
+ }
}
- }
- eq_set_id[k] = 0;
- loudness[k] = UNDEFINED_LOUDNESS_VALUE;
- loudness_normalization_gain_db[k] = 0.0f;
- k++;
-
- pre_lim_count = k;
-
- if (pstr_drc_sel_proc_params_struct->loudness_normalization_on == 1)
- {
- WORD32 n;
- ia_loudness_info_struct* loudness_info[16];
- err = impd_find_overall_loudness_info(pstr_drc_sel_proc_params_struct,
- pstr_loudness_info,
- requested_dwnmix_id,
- drc_set_id_requested,
- &overall_loudness_info_present,
- &info_count,
- loudness_info);
- if (err) return (err);
-
- if (overall_loudness_info_present == 1)
- {
- WORD32 requested_method_definition = METHOD_DEFINITION_PROGRAM_LOUDNESS;
- WORD32 other_method_definition = METHOD_DEFINITION_PROGRAM_LOUDNESS;
- WORD32 requested_measurement_system = MEASUREMENT_SYSTEM_BS_1770_4;
- WORD32 requested_preprocessing = 0;
-
- WORD32* system_bonus = measurement_system_default_tbl;
-
- WORD32 match_measure;
- FLOAT32 method_val = 0;
-
- switch (pstr_drc_sel_proc_params_struct->loudness_measurement_method) {
- case USER_METHOD_DEFINITION_DEFAULT:
- case USER_METHOD_DEFINITION_PROGRAM_LOUDNESS:
- requested_method_definition = METHOD_DEFINITION_PROGRAM_LOUDNESS;
- other_method_definition = METHOD_DEFINITION_ANCHOR_LOUDNESS;
- break;
- case USER_METHOD_DEFINITION_ANCHOR_LOUDNESS:
- requested_method_definition = METHOD_DEFINITION_ANCHOR_LOUDNESS;
- other_method_definition = METHOD_DEFINITION_PROGRAM_LOUDNESS;
- break;
-
- default:
- return (UNEXPECTED_ERROR);
- break;
- }
-
- switch (pstr_drc_sel_proc_params_struct->loudness_measurement_system) {
- case USER_MEASUREMENT_SYSTEM_DEFAULT:
- case USER_MEASUREMENT_SYSTEM_BS_1770_4:
- requested_measurement_system = MEASUREMENT_SYSTEM_BS_1770_4;
- system_bonus = measurement_system_bs1770_3_tbl;
- break;
- case USER_MEASUREMENT_SYSTEM_USER:
- requested_measurement_system = MEASUREMENT_SYSTEM_USER;
- system_bonus = measurement_system_user_tbl;
- break;
- case USER_MEASUREMENT_SYSTEM_EXPERT_PANEL:
- requested_measurement_system = MEASUREMENT_SYSTEM_EXPERT_PANEL;
- system_bonus = measurement_system_expert_tbl;
- break;
- case USER_MEASUREMENT_SYSTEM_RESERVED_A:
- requested_measurement_system = USER_MEASUREMENT_SYSTEM_RESERVED_A;
- system_bonus = measurement_system_rms_a_tbl;
- break;
- case USER_MEASUREMENT_SYSTEM_RESERVED_B:
- requested_measurement_system = USER_MEASUREMENT_SYSTEM_RESERVED_B;
- system_bonus = measurement_system_rms_b_tbl;
- break;
- case USER_MEASUREMENT_SYSTEM_RESERVED_C:
- requested_measurement_system = USER_MEASUREMENT_SYSTEM_RESERVED_C;
- system_bonus = measurement_system_rms_c_tbl;
- break;
- case USER_MEASUREMENT_SYSTEM_RESERVED_D:
- requested_measurement_system = USER_MEASUREMENT_SYSTEM_RESERVED_D;
- system_bonus = measurement_system_rms_d_tbl;
- break;
- case USER_MEASUREMENT_SYSTEM_RESERVED_E:
- requested_measurement_system = USER_MEASUREMENT_SYSTEM_RESERVED_E;
- system_bonus = measurement_system_rms_e_tbl;
- break;
-
- default:
- return (UNEXPECTED_ERROR);
- break;
- }
-
- switch (pstr_drc_sel_proc_params_struct->loudness_measurement_pre_proc) {
- case USER_LOUDNESS_PREPROCESSING_DEFAULT:
- case USER_LOUDNESS_PREPROCESSING_OFF:
- requested_preprocessing = 0;
- break;
- case USER_LOUDNESS_PREPROCESSING_HIGHPASS:
- requested_preprocessing = 1;
- break;
-
- default:
- return (UNEXPECTED_ERROR);
- break;
+ if (match_measure == -1) {
+ for (n = 0; n < loudness_info[k]->measurement_count; n++) {
+ ia_loudness_measure_struct* loudness_measure =
+ &(loudness_info[k]->loudness_measure[n]);
+ if (match_measure <
+ system_bonus[loudness_measure->measurement_system] &&
+ other_method_definition == loudness_measure->method_def) {
+ method_val = loudness_measure->method_val;
+ match_measure =
+ system_bonus[loudness_measure->measurement_system];
}
+ }
+ }
- for (k=0; k<info_count; k++)
- {
- match_measure = -1;
- for (n=0; n<loudness_info[k]->measurement_count; n++)
- {
- ia_loudness_measure_struct* loudness_measure = &(loudness_info[k]->loudness_measure[n]);
- if (match_measure < system_bonus[loudness_measure->measurement_system] && requested_method_definition == loudness_measure->method_def)
- {
- method_val = loudness_measure->method_val;
- match_measure = system_bonus[loudness_measure->measurement_system];
- }
- }
- if (match_measure == -1)
- {
- for (n=0; n<loudness_info[k]->measurement_count; n++)
- {
- ia_loudness_measure_struct* loudness_measure = &(loudness_info[k]->loudness_measure[n]);
- if (match_measure < system_bonus[loudness_measure->measurement_system] && other_method_definition == loudness_measure->method_def)
- {
- method_val = loudness_measure->method_val;
- match_measure = system_bonus[loudness_measure->measurement_system];
- }
- }
- }
-
- if (requested_preprocessing == 1)
- {
- err = impd_find_high_pass_loudness_adjust(pstr_loudness_info, requested_dwnmix_id, drc_set_id_requested, pstr_drc_sel_proc_params_struct->album_mode, (FLOAT32)pstr_drc_sel_proc_params_struct->device_cut_off_frequency,
- &loudness_hp_adjust_present, &pre_proc_adjust);
- if (err) return (err);
-
- if (loudness_hp_adjust_present == 0)
- {
- pre_proc_adjust = -2.0f;
- }
- method_val += pre_proc_adjust;
- }
+ if (requested_preprocessing == 1) {
+ err = impd_find_high_pass_loudness_adjust(
+ pstr_loudness_info, requested_dwnmix_id, drc_set_id_requested,
+ pstr_drc_sel_proc_params_struct->album_mode,
+ (FLOAT32)
+ pstr_drc_sel_proc_params_struct->device_cut_off_frequency,
+ &loudness_hp_adjust_present, &pre_proc_adjust);
+ if (err) return (err);
+
+ if (loudness_hp_adjust_present == 0) {
+ pre_proc_adjust = -2.0f;
+ }
+ method_val += pre_proc_adjust;
+ }
- eq_set_id[k] = 0;
+ eq_set_id[k] = 0;
- loudness_normalization_gain_db[k] = pstr_drc_sel_proc_params_struct->target_loudness - method_val;
- loudness[k] = method_val;
- }
- }
- }
- if (info_count > 0)
- {
- *loudness_info_count = info_count;
- }
- else
- {
- *loudness_info_count = pre_lim_count;
+ loudness_normalization_gain_db[k] =
+ pstr_drc_sel_proc_params_struct->target_loudness - method_val;
+ loudness[k] = method_val;
+ }
}
+ }
+ if (info_count > 0) {
+ *loudness_info_count = info_count;
+ } else {
+ *loudness_info_count = pre_lim_count;
+ }
- return (0);
+ return (0);
}
-
#define MIXING_LEVEL_DEFAULT 85.0f
WORD32
-impd_mixing_level_info(ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- WORD32 requested_dwnmix_id,
- WORD32 drc_set_id_requested,
- WORD32 eq_set_id_requested,
- FLOAT32* mixing_level)
-{
- WORD32 n, k, info_count;
- WORD32 album_mode = pstr_drc_sel_proc_params_struct->album_mode;
- WORD32 loudness_drc_set_id_requested;
- ia_loudness_info_struct* loudness_info;
-
- *mixing_level = MIXING_LEVEL_DEFAULT;
- if (drc_set_id_requested < 0)
- {
- loudness_drc_set_id_requested = 0;
- }
- else
- {
- loudness_drc_set_id_requested = drc_set_id_requested;
- }
- if (album_mode == 1)
- {
- info_count = pstr_loudness_info->loudness_info_album_count;
- loudness_info = pstr_loudness_info->str_loudness_info_album;
- }
- else
- {
- info_count = pstr_loudness_info->loudness_info_count;
- loudness_info = pstr_loudness_info->loudness_info;
- }
- for (n=0; n<info_count; n++)
- {
- if ((requested_dwnmix_id == loudness_info[n].downmix_id) || (ID_FOR_ANY_DOWNMIX == loudness_info[n].downmix_id))
- {
- if (loudness_drc_set_id_requested == loudness_info[n].drc_set_id)
- {
- if (eq_set_id_requested == loudness_info[n].eq_set_id)
- {
- for (k=0; k<loudness_info[n].measurement_count; k++)
- {
- if (loudness_info[n].loudness_measure[k].method_def == METHOD_DEFINITION_MIXING_LEVEL)
- {
- *mixing_level = loudness_info[n].loudness_measure[k].method_val;
- break;
- }
- }
- }
+impd_mixing_level_info(
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ WORD32 requested_dwnmix_id, WORD32 drc_set_id_requested,
+ WORD32 eq_set_id_requested, FLOAT32* mixing_level) {
+ WORD32 n, k, info_count;
+ WORD32 album_mode = pstr_drc_sel_proc_params_struct->album_mode;
+ WORD32 loudness_drc_set_id_requested;
+ ia_loudness_info_struct* loudness_info;
+
+ *mixing_level = MIXING_LEVEL_DEFAULT;
+ if (drc_set_id_requested < 0) {
+ loudness_drc_set_id_requested = 0;
+ } else {
+ loudness_drc_set_id_requested = drc_set_id_requested;
+ }
+ if (album_mode == 1) {
+ info_count = pstr_loudness_info->loudness_info_album_count;
+ loudness_info = pstr_loudness_info->str_loudness_info_album;
+ } else {
+ info_count = pstr_loudness_info->loudness_info_count;
+ loudness_info = pstr_loudness_info->loudness_info;
+ }
+ for (n = 0; n < info_count; n++) {
+ if ((requested_dwnmix_id == loudness_info[n].downmix_id) ||
+ (ID_FOR_ANY_DOWNMIX == loudness_info[n].downmix_id)) {
+ if (loudness_drc_set_id_requested == loudness_info[n].drc_set_id) {
+ if (eq_set_id_requested == loudness_info[n].eq_set_id) {
+ for (k = 0; k < loudness_info[n].measurement_count; k++) {
+ if (loudness_info[n].loudness_measure[k].method_def ==
+ METHOD_DEFINITION_MIXING_LEVEL) {
+ *mixing_level = loudness_info[n].loudness_measure[k].method_val;
+ break;
}
+ }
}
+ }
}
- return(0);
+ }
+ return (0);
}
diff --git a/decoder/drc_src/impd_drc_loudness_control.h b/decoder/drc_src/impd_drc_loudness_control.h
index 0cdfcb3..76acc26 100644
--- a/decoder/drc_src/impd_drc_loudness_control.h
+++ b/decoder/drc_src/impd_drc_loudness_control.h
@@ -25,80 +25,68 @@ extern "C" {
#endif /* __cplusplus */
WORD32
-impd_mixing_level_info(ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- WORD32 requested_dwnmix_id,
- WORD32 drc_set_id_requested,
- WORD32 eq_set_id_requested,
- FLOAT32* mixing_level);
+impd_mixing_level_info(
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ WORD32 requested_dwnmix_id, WORD32 drc_set_id_requested,
+ WORD32 eq_set_id_requested, FLOAT32* mixing_level);
WORD32
impd_signal_peak_level_info(ia_drc_config* pstr_drc_config,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- ia_drc_instructions_struct* str_drc_instruction_str,
- WORD32 requested_dwnmix_id,
- WORD32 album_mode,
- WORD32 num_compression_eq_count,
- WORD32* num_compression_eq_id,
- WORD32* peak_info_count,
- WORD32 eq_set_id[],
- FLOAT32 signal_peak_level[],
- WORD32 explicit_peak_information_present[]);
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ ia_drc_instructions_struct* str_drc_instruction_str,
+ WORD32 requested_dwnmix_id, WORD32 album_mode,
+ WORD32 num_compression_eq_count,
+ WORD32* num_compression_eq_id,
+ WORD32* peak_info_count, WORD32 eq_set_id[],
+ FLOAT32 signal_peak_level[],
+ WORD32 explicit_peak_information_present[]);
WORD32
-impd_extract_loudness_peak_to_average_info(ia_loudness_info_struct* loudness_info,
- WORD32 dyn_range_measurement_type,
- WORD32 * loudness_peak_2_avg_value_present,
- FLOAT32* loudness_peak_2_avg_value);
+impd_extract_loudness_peak_to_average_info(
+ ia_loudness_info_struct* loudness_info, WORD32 dyn_range_measurement_type,
+ WORD32* loudness_peak_2_avg_value_present,
+ FLOAT32* loudness_peak_2_avg_value);
WORD32
impd_loudness_peak_to_average_info(
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- ia_drc_instructions_struct* str_drc_instruction_str,
- WORD32 requested_dwnmix_id,
- WORD32 dyn_range_measurement_type,
- WORD32 album_mode,
- WORD32* loudness_peak_2_avg_value_present,
- FLOAT32* loudness_peak_2_avg_value);
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ ia_drc_instructions_struct* str_drc_instruction_str,
+ WORD32 requested_dwnmix_id, WORD32 dyn_range_measurement_type,
+ WORD32 album_mode, WORD32* loudness_peak_2_avg_value_present,
+ FLOAT32* loudness_peak_2_avg_value);
WORD32
-impd_overall_loudness_present( ia_loudness_info_struct* loudness_info,
+impd_overall_loudness_present(ia_loudness_info_struct* loudness_info,
WORD32* loudness_info_present);
WORD32
-impd_find_overall_loudness_info(ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- WORD32 requested_dwnmix_id,
- WORD32 drc_set_id_requested,
- WORD32* overall_loudness_info_present,
- WORD32* loudness_info_count,
- ia_loudness_info_struct* loudness_info[]);
+impd_find_overall_loudness_info(
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ WORD32 requested_dwnmix_id, WORD32 drc_set_id_requested,
+ WORD32* overall_loudness_info_present, WORD32* loudness_info_count,
+ ia_loudness_info_struct* loudness_info[]);
WORD32
-impd_high_pass_loudness_adjust_info( ia_loudness_info_struct* loudness_info,
- WORD32* loudness_hp_adjust_present,
- FLOAT32* loudness_hp_adjust);
+impd_high_pass_loudness_adjust_info(ia_loudness_info_struct* loudness_info,
+ WORD32* loudness_hp_adjust_present,
+ FLOAT32* loudness_hp_adjust);
WORD32
impd_find_high_pass_loudness_adjust(
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- WORD32 requested_dwnmix_id,
- WORD32 drc_set_id_requested,
- WORD32 album_mode,
- FLOAT32 device_cutoff_freq,
- WORD32* loudness_hp_adjust_present,
- FLOAT32* loudness_hp_adjust);
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ WORD32 requested_dwnmix_id, WORD32 drc_set_id_requested, WORD32 album_mode,
+ FLOAT32 device_cutoff_freq, WORD32* loudness_hp_adjust_present,
+ FLOAT32* loudness_hp_adjust);
WORD32
-impd_init_loudness_control (ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- WORD32 requested_dwnmix_id,
- WORD32 drc_set_id_requested,
- WORD32 num_compression_eq_count,
- WORD32* num_compression_eq_id,
- WORD32* loudness_info_count,
- WORD32 eq_set_id[],
- FLOAT32 loudness_normalization_gain_db[],
- FLOAT32 loudness[]);
+impd_init_loudness_control(
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ WORD32 requested_dwnmix_id, WORD32 drc_set_id_requested,
+ WORD32 num_compression_eq_count, WORD32* num_compression_eq_id,
+ WORD32* loudness_info_count, WORD32 eq_set_id[],
+ FLOAT32 loudness_normalization_gain_db[], FLOAT32 loudness[]);
#ifdef __cplusplus
}
diff --git a/decoder/drc_src/impd_drc_main_qmf_process.c b/decoder/drc_src/impd_drc_main_qmf_process.c
index 9426eb6..3c4e711 100644
--- a/decoder/drc_src/impd_drc_main_qmf_process.c
+++ b/decoder/drc_src/impd_drc_main_qmf_process.c
@@ -41,197 +41,214 @@
#define BITSTREAM_FILE_FORMAT_SPLIT 1
-static WORD32 impd_down_mix ( ia_drc_sel_proc_output_struct *uni_drc_sel_proc_output, FLOAT32** input_audio, WORD32 frame_len)
-{
- WORD32 num_base_ch = uni_drc_sel_proc_output->base_channel_count;
- WORD32 num_target_ch = uni_drc_sel_proc_output->target_channel_count;
- WORD32 i, i_ch, o_ch;
- FLOAT32 tmp_out[MAX_CHANNEL_COUNT];
-
- if (uni_drc_sel_proc_output->downmix_matrix_present == 0)
- return 0;
-
- if (input_audio == 0)
- return 0;
-
- if (num_target_ch > MAX_CHANNEL_COUNT)
- return -1;
-
- if (num_target_ch > num_base_ch)
- return -1;
-
- for (i=0; i<frame_len; i++) {
- for (o_ch=0; o_ch<num_target_ch; o_ch++)
- {
- tmp_out[o_ch] = 0.0f;
- for (i_ch=0; i_ch<num_base_ch; i_ch++)
- {
- tmp_out[o_ch] += input_audio[i_ch][i] * uni_drc_sel_proc_output->downmix_matrix[i_ch][o_ch];
- }
- }
- for (o_ch=0; o_ch<num_target_ch; o_ch++) {
- input_audio[o_ch][i] = tmp_out[o_ch];
- }
- for ( ; o_ch<num_base_ch; o_ch++) {
- input_audio[o_ch][i] = 0.0f;
- }
- }
+static WORD32 impd_down_mix(
+ ia_drc_sel_proc_output_struct *uni_drc_sel_proc_output,
+ FLOAT32 **input_audio, WORD32 frame_len) {
+ WORD32 num_base_ch = uni_drc_sel_proc_output->base_channel_count;
+ WORD32 num_target_ch = uni_drc_sel_proc_output->target_channel_count;
+ WORD32 i, i_ch, o_ch;
+ FLOAT32 tmp_out[MAX_CHANNEL_COUNT];
+ if (uni_drc_sel_proc_output->downmix_matrix_present == 0) return 0;
- return 0;
-}
+ if (input_audio == 0) return 0;
-WORD32 impd_init_process_audio_main_qmf (ia_drc_api_struct *p_obj_drc)
+ if (num_target_ch > MAX_CHANNEL_COUNT) return -1;
-{
- WORD32 error=0, i, j, num_samples_per_channel;
- FLOAT32 *input_buffer;
- FLOAT32 *output_buffer;
- FLOAT32 *audio_io_buf_real[10];
- FLOAT32 *audio_io_buf_imag[10];
- FLOAT32 *scratch_buffer;
- WORD32 last_frame=0;
- scratch_buffer= (FLOAT32*)p_obj_drc->pp_mem[1];
- input_buffer = (FLOAT32*)p_obj_drc->pp_mem[2];
- output_buffer = (FLOAT32*)p_obj_drc->pp_mem[3];
-
- if(p_obj_drc->p_state->ui_in_bytes<=0)
- {
- p_obj_drc->p_state->ui_out_bytes=0;
- return 0;
- }
+ if (num_target_ch > num_base_ch) return -1;
- if((p_obj_drc->p_state->ui_in_bytes/p_obj_drc->str_config.num_ch_in/(p_obj_drc->str_config.pcm_size>>3)) < (UWORD32)p_obj_drc->str_config.frame_size)
- last_frame=1;
- for(i=0;i<p_obj_drc->str_config.num_ch_in;i++){
- audio_io_buf_real[i]=scratch_buffer+i*(p_obj_drc->str_config.frame_size+32);
- audio_io_buf_imag[i]=scratch_buffer+p_obj_drc->str_config.num_ch_in*p_obj_drc->str_config.frame_size+p_obj_drc->str_config.num_ch_in*64+i*(p_obj_drc->str_config.frame_size+64);
- for(j=0;j<p_obj_drc->str_config.frame_size;j++){
- audio_io_buf_real[i][j]=input_buffer[j*p_obj_drc->str_config.num_ch_in + i];
- audio_io_buf_imag[i][j]=input_buffer[p_obj_drc->str_config.num_ch_in*p_obj_drc->str_config.frame_size+j*p_obj_drc->str_config.num_ch_in + i];
+ for (i = 0; i < frame_len; i++) {
+ for (o_ch = 0; o_ch < num_target_ch; o_ch++) {
+ tmp_out[o_ch] = 0.0f;
+ for (i_ch = 0; i_ch < num_base_ch; i_ch++) {
+ tmp_out[o_ch] += input_audio[i_ch][i] *
+ uni_drc_sel_proc_output->downmix_matrix[i_ch][o_ch];
}
}
-
- error = impd_process_drc_bitstream_dec_gain(p_obj_drc->str_payload.pstr_bitstream_dec,
- p_obj_drc->pstr_bit_buf,
- p_obj_drc->str_payload.pstr_drc_config,
- p_obj_drc->str_payload.pstr_drc_gain,
- &p_obj_drc->str_bit_handler.it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs],
- p_obj_drc->str_bit_handler.num_bytes_bs,
- p_obj_drc->str_bit_handler.num_bits_offset_bs,
- &p_obj_drc->str_bit_handler.num_bits_read_bs);
-
-
-
- if (error > PROC_COMPLETE) return -1;
-
- p_obj_drc->str_bit_handler.num_bytes_read_bs = (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3);
- p_obj_drc->str_bit_handler.num_bits_offset_bs = (p_obj_drc->str_bit_handler.num_bits_read_bs & 7);
- p_obj_drc->str_bit_handler.byte_index_bs += p_obj_drc->str_bit_handler.num_bytes_read_bs;
- if(p_obj_drc->str_bit_handler.gain_stream_flag==0) //ITTIAM: Flag for applying gain frame by frame
- {
- p_obj_drc->str_bit_handler.num_bytes_bs -= p_obj_drc->str_bit_handler.num_bytes_read_bs;
+ for (o_ch = 0; o_ch < num_target_ch; o_ch++) {
+ input_audio[o_ch][i] = tmp_out[o_ch];
}
+ for (; o_ch < num_base_ch; o_ch++) {
+ input_audio[o_ch][i] = 0.0f;
+ }
+ }
+ return 0;
+}
+WORD32 impd_init_process_audio_main_qmf(ia_drc_api_struct *p_obj_drc)
-
-
-
-
- if (p_obj_drc->str_config.bitstream_file_format == BITSTREAM_FILE_FORMAT_SPLIT) {
- if (p_obj_drc->str_bit_handler.num_bits_offset_bs != 0)
- {
- p_obj_drc->str_bit_handler.num_bits_read_bs = p_obj_drc->str_bit_handler.num_bits_read_bs + 8 - p_obj_drc->str_bit_handler.num_bits_offset_bs;
- p_obj_drc->str_bit_handler.num_bytes_read_bs = p_obj_drc->str_bit_handler.num_bytes_read_bs + 1;
- p_obj_drc->str_bit_handler.num_bits_offset_bs = 0;
- p_obj_drc->str_bit_handler.byte_index_bs = p_obj_drc->str_bit_handler.byte_index_bs + 1;
- if(p_obj_drc->str_bit_handler.gain_stream_flag==0) //ITTIAM: Flag for applying gain frame by frame
- {
- p_obj_drc->str_bit_handler.num_bytes_bs = p_obj_drc->str_bit_handler.num_bytes_bs - 1;
- }
- }
+{
+ WORD32 error = 0, i, j, num_samples_per_channel;
+ FLOAT32 *input_buffer;
+ FLOAT32 *output_buffer;
+ FLOAT32 *audio_io_buf_real[10];
+ FLOAT32 *audio_io_buf_imag[10];
+ FLOAT32 *scratch_buffer;
+ WORD32 last_frame = 0;
+ scratch_buffer = (FLOAT32 *)p_obj_drc->pp_mem[1];
+ input_buffer = (FLOAT32 *)p_obj_drc->pp_mem[2];
+ output_buffer = (FLOAT32 *)p_obj_drc->pp_mem[3];
+
+ if (p_obj_drc->p_state->ui_in_bytes <= 0) {
+ p_obj_drc->p_state->ui_out_bytes = 0;
+ return 0;
+ }
+
+ if ((p_obj_drc->p_state->ui_in_bytes / p_obj_drc->str_config.num_ch_in /
+ (p_obj_drc->str_config.pcm_size >> 3)) <
+ (UWORD32)p_obj_drc->str_config.frame_size)
+ last_frame = 1;
+ for (i = 0; i < p_obj_drc->str_config.num_ch_in; i++) {
+ audio_io_buf_real[i] =
+ scratch_buffer + i * (p_obj_drc->str_config.frame_size + 32);
+ audio_io_buf_imag[i] =
+ scratch_buffer +
+ p_obj_drc->str_config.num_ch_in * p_obj_drc->str_config.frame_size +
+ p_obj_drc->str_config.num_ch_in * 64 +
+ i * (p_obj_drc->str_config.frame_size + 64);
+ for (j = 0; j < p_obj_drc->str_config.frame_size; j++) {
+ audio_io_buf_real[i][j] =
+ input_buffer[j * p_obj_drc->str_config.num_ch_in + i];
+ audio_io_buf_imag[i][j] =
+ input_buffer[p_obj_drc->str_config.num_ch_in *
+ p_obj_drc->str_config.frame_size +
+ j * p_obj_drc->str_config.num_ch_in + i];
}
-
- error = impd_drc_process_freq_domain(p_obj_drc->str_payload.pstr_gain_dec[0],
- p_obj_drc->str_payload.pstr_drc_config,
- p_obj_drc->str_payload.pstr_drc_gain,
- audio_io_buf_real,
- audio_io_buf_imag,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->loudness_normalization_gain_db,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->boost,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->compress,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->drc_characteristic_target);
- if (error) return -1;
-
- error = impd_down_mix(p_obj_drc->str_payload.pstr_drc_sel_proc_output,
- audio_io_buf_real,
- p_obj_drc->str_config.frame_size);
- if (error) return -1;
-
- error = impd_down_mix(p_obj_drc->str_payload.pstr_drc_sel_proc_output,
- audio_io_buf_imag,
- p_obj_drc->str_config.frame_size);
- if (error) return -1;
-
- error = impd_drc_process_freq_domain(p_obj_drc->str_payload.pstr_gain_dec[1],
- p_obj_drc->str_payload.pstr_drc_config,
- p_obj_drc->str_payload.pstr_drc_gain,
- audio_io_buf_real,
- audio_io_buf_imag,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->loudness_normalization_gain_db,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->boost,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->compress,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->drc_characteristic_target);
- if (error) return -1;
-
- if (p_obj_drc->str_payload.pstr_drc_sel_proc_output->loudness_normalization_gain_db != 0.0f)
- {
- FLOAT32 loudness_normalization_gain = (FLOAT32)pow(10.0,p_obj_drc->str_payload.pstr_drc_sel_proc_output->loudness_normalization_gain_db/20.0);
- for (i=0; i < p_obj_drc->str_config.num_ch_out; i++) {
- for (j=0; j <p_obj_drc->str_config. frame_size; j++) {
- audio_io_buf_real[i][j] *= loudness_normalization_gain;
- audio_io_buf_imag[i][j] *= loudness_normalization_gain;
-
- }
- }
- }
- num_samples_per_channel = p_obj_drc->str_config.frame_size;
-
- for (i=0; i < p_obj_drc->str_config.num_ch_out; i++) {
- for (j=0; j < p_obj_drc->str_config.frame_size; j++) {
- output_buffer[j*p_obj_drc->str_config.num_ch_out + i] = audio_io_buf_real[i][j];
- output_buffer[p_obj_drc->str_config.frame_size*p_obj_drc->str_config.num_ch_in+j*p_obj_drc->str_config.num_ch_out + i] = audio_io_buf_imag[i][j];
-
- }
- }
- p_obj_drc->p_state->ui_out_bytes=p_obj_drc->str_config.num_ch_out*(p_obj_drc->str_config.frame_size)*4;
- p_obj_drc->p_state->ui_out_bytes=p_obj_drc->str_config.num_ch_out*(p_obj_drc->p_state->ui_in_bytes/p_obj_drc->str_config.num_ch_in);
-
- if(last_frame==0){
-
- if (p_obj_drc->str_config.bitstream_file_format != BITSTREAM_FILE_FORMAT_SPLIT) {
- error = impd_process_drc_bitstream_dec(p_obj_drc->str_payload.pstr_bitstream_dec,
- p_obj_drc->pstr_bit_buf,
- p_obj_drc->str_payload.pstr_drc_config,
- p_obj_drc->str_payload.pstr_loudness_info,
- &p_obj_drc->str_bit_handler.it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs],
- p_obj_drc->str_bit_handler.num_bytes_bs,
- p_obj_drc->str_bit_handler.num_bits_offset_bs,
- &p_obj_drc->str_bit_handler.num_bits_read_bs);
-
- if (error > PROC_COMPLETE)
- return -1;
-
- p_obj_drc->str_bit_handler.num_bytes_read_bs = (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3);
- p_obj_drc->str_bit_handler.num_bits_offset_bs = (p_obj_drc->str_bit_handler.num_bits_read_bs & 7);
- p_obj_drc->str_bit_handler.byte_index_bs += p_obj_drc->str_bit_handler.num_bytes_read_bs;
- p_obj_drc->str_bit_handler.num_bytes_bs -= p_obj_drc->str_bit_handler.num_bytes_read_bs;
-
- }
-
+ }
+
+ error = impd_process_drc_bitstream_dec_gain(
+ p_obj_drc->str_payload.pstr_bitstream_dec, p_obj_drc->pstr_bit_buf,
+ p_obj_drc->str_payload.pstr_drc_config,
+ p_obj_drc->str_payload.pstr_drc_gain,
+ &p_obj_drc->str_bit_handler
+ .it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs],
+ p_obj_drc->str_bit_handler.num_bytes_bs,
+ p_obj_drc->str_bit_handler.num_bits_offset_bs,
+ &p_obj_drc->str_bit_handler.num_bits_read_bs);
+
+ if (error > PROC_COMPLETE) return -1;
+
+ p_obj_drc->str_bit_handler.num_bytes_read_bs =
+ (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3);
+ p_obj_drc->str_bit_handler.num_bits_offset_bs =
+ (p_obj_drc->str_bit_handler.num_bits_read_bs & 7);
+ p_obj_drc->str_bit_handler.byte_index_bs +=
+ p_obj_drc->str_bit_handler.num_bytes_read_bs;
+ if (p_obj_drc->str_bit_handler.gain_stream_flag ==
+ 0) // ITTIAM: Flag for applying gain frame by frame
+ {
+ p_obj_drc->str_bit_handler.num_bytes_bs -=
+ p_obj_drc->str_bit_handler.num_bytes_read_bs;
+ }
+
+ if (p_obj_drc->str_config.bitstream_file_format ==
+ BITSTREAM_FILE_FORMAT_SPLIT) {
+ if (p_obj_drc->str_bit_handler.num_bits_offset_bs != 0) {
+ p_obj_drc->str_bit_handler.num_bits_read_bs =
+ p_obj_drc->str_bit_handler.num_bits_read_bs + 8 -
+ p_obj_drc->str_bit_handler.num_bits_offset_bs;
+ p_obj_drc->str_bit_handler.num_bytes_read_bs =
+ p_obj_drc->str_bit_handler.num_bytes_read_bs + 1;
+ p_obj_drc->str_bit_handler.num_bits_offset_bs = 0;
+ p_obj_drc->str_bit_handler.byte_index_bs =
+ p_obj_drc->str_bit_handler.byte_index_bs + 1;
+ if (p_obj_drc->str_bit_handler.gain_stream_flag ==
+ 0) // ITTIAM: Flag for applying gain frame by frame
+ {
+ p_obj_drc->str_bit_handler.num_bytes_bs =
+ p_obj_drc->str_bit_handler.num_bytes_bs - 1;
+ }
}
- return error;
-
+ }
+
+ error = impd_drc_process_freq_domain(
+ p_obj_drc->str_payload.pstr_gain_dec[0],
+ p_obj_drc->str_payload.pstr_drc_config,
+ p_obj_drc->str_payload.pstr_drc_gain, audio_io_buf_real,
+ audio_io_buf_imag, p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->loudness_normalization_gain_db,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output->boost,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output->compress,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->drc_characteristic_target);
+ if (error) return -1;
+
+ error = impd_down_mix(p_obj_drc->str_payload.pstr_drc_sel_proc_output,
+ audio_io_buf_real, p_obj_drc->str_config.frame_size);
+ if (error) return -1;
+
+ error = impd_down_mix(p_obj_drc->str_payload.pstr_drc_sel_proc_output,
+ audio_io_buf_imag, p_obj_drc->str_config.frame_size);
+ if (error) return -1;
+
+ error = impd_drc_process_freq_domain(
+ p_obj_drc->str_payload.pstr_gain_dec[1],
+ p_obj_drc->str_payload.pstr_drc_config,
+ p_obj_drc->str_payload.pstr_drc_gain, audio_io_buf_real,
+ audio_io_buf_imag, p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->loudness_normalization_gain_db,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output->boost,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output->compress,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->drc_characteristic_target);
+ if (error) return -1;
+
+ if (p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->loudness_normalization_gain_db != 0.0f) {
+ FLOAT32 loudness_normalization_gain =
+ (FLOAT32)pow(10.0, p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->loudness_normalization_gain_db /
+ 20.0);
+ for (i = 0; i < p_obj_drc->str_config.num_ch_out; i++) {
+ for (j = 0; j < p_obj_drc->str_config.frame_size; j++) {
+ audio_io_buf_real[i][j] *= loudness_normalization_gain;
+ audio_io_buf_imag[i][j] *= loudness_normalization_gain;
+ }
+ }
+ }
+ num_samples_per_channel = p_obj_drc->str_config.frame_size;
+
+ for (i = 0; i < p_obj_drc->str_config.num_ch_out; i++) {
+ for (j = 0; j < p_obj_drc->str_config.frame_size; j++) {
+ output_buffer[j * p_obj_drc->str_config.num_ch_out + i] =
+ audio_io_buf_real[i][j];
+ output_buffer[p_obj_drc->str_config.frame_size *
+ p_obj_drc->str_config.num_ch_in +
+ j * p_obj_drc->str_config.num_ch_out + i] =
+ audio_io_buf_imag[i][j];
+ }
+ }
+ p_obj_drc->p_state->ui_out_bytes =
+ p_obj_drc->str_config.num_ch_out * (p_obj_drc->str_config.frame_size) * 4;
+ p_obj_drc->p_state->ui_out_bytes =
+ p_obj_drc->str_config.num_ch_out *
+ (p_obj_drc->p_state->ui_in_bytes / p_obj_drc->str_config.num_ch_in);
+
+ if (last_frame == 0) {
+ if (p_obj_drc->str_config.bitstream_file_format !=
+ BITSTREAM_FILE_FORMAT_SPLIT) {
+ error = impd_process_drc_bitstream_dec(
+ p_obj_drc->str_payload.pstr_bitstream_dec, p_obj_drc->pstr_bit_buf,
+ p_obj_drc->str_payload.pstr_drc_config,
+ p_obj_drc->str_payload.pstr_loudness_info,
+ &p_obj_drc->str_bit_handler
+ .it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs],
+ p_obj_drc->str_bit_handler.num_bytes_bs,
+ p_obj_drc->str_bit_handler.num_bits_offset_bs,
+ &p_obj_drc->str_bit_handler.num_bits_read_bs);
+
+ if (error > PROC_COMPLETE) return -1;
+
+ p_obj_drc->str_bit_handler.num_bytes_read_bs =
+ (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3);
+ p_obj_drc->str_bit_handler.num_bits_offset_bs =
+ (p_obj_drc->str_bit_handler.num_bits_read_bs & 7);
+ p_obj_drc->str_bit_handler.byte_index_bs +=
+ p_obj_drc->str_bit_handler.num_bytes_read_bs;
+ p_obj_drc->str_bit_handler.num_bytes_bs -=
+ p_obj_drc->str_bit_handler.num_bytes_read_bs;
+ }
+ }
+ return error;
}
-
diff --git a/decoder/drc_src/impd_drc_main_stft_process.c b/decoder/drc_src/impd_drc_main_stft_process.c
index c2fcc73..c1e89e1 100644
--- a/decoder/drc_src/impd_drc_main_stft_process.c
+++ b/decoder/drc_src/impd_drc_main_stft_process.c
@@ -39,194 +39,216 @@
#define BITSTREAM_FILE_FORMAT_SPLIT 1
-static WORD32 impd_down_mix(ia_drc_sel_proc_output_struct *uni_drc_sel_proc_output, FLOAT32** input_audio, WORD32 frame_len)
-{
- WORD32 num_base_ch = uni_drc_sel_proc_output->base_channel_count;
- WORD32 num_target_ch = uni_drc_sel_proc_output->target_channel_count;
- WORD32 i, i_ch, o_ch;
- FLOAT32 tmp_out[MAX_CHANNEL_COUNT];
-
- if (uni_drc_sel_proc_output->downmix_matrix_present == 0)
- return 0;
-
- if (input_audio == 0)
- return 0;
-
- if (num_target_ch > MAX_CHANNEL_COUNT)
- return -1;
-
- if (num_target_ch > num_base_ch)
- return -1;
-
- for (i=0; i<frame_len; i++) {
- for (o_ch=0; o_ch<num_target_ch; o_ch++) {
- tmp_out[o_ch] = 0.0f;
- for (i_ch=0; i_ch<num_base_ch; i_ch++) {
- tmp_out[o_ch] += input_audio[i_ch][i] * uni_drc_sel_proc_output->downmix_matrix[i_ch][o_ch];
- }
- }
- for (o_ch=0; o_ch<num_target_ch; o_ch++) {
- input_audio[o_ch][i] = tmp_out[o_ch];
- }
- for ( ; o_ch<num_base_ch; o_ch++) {
- input_audio[o_ch][i] = 0.0f;
- }
- }
+static WORD32 impd_down_mix(
+ ia_drc_sel_proc_output_struct *uni_drc_sel_proc_output,
+ FLOAT32 **input_audio, WORD32 frame_len) {
+ WORD32 num_base_ch = uni_drc_sel_proc_output->base_channel_count;
+ WORD32 num_target_ch = uni_drc_sel_proc_output->target_channel_count;
+ WORD32 i, i_ch, o_ch;
+ FLOAT32 tmp_out[MAX_CHANNEL_COUNT];
+ if (uni_drc_sel_proc_output->downmix_matrix_present == 0) return 0;
- return 0;
-}
+ if (input_audio == 0) return 0;
+
+ if (num_target_ch > MAX_CHANNEL_COUNT) return -1;
+ if (num_target_ch > num_base_ch) return -1;
+ for (i = 0; i < frame_len; i++) {
+ for (o_ch = 0; o_ch < num_target_ch; o_ch++) {
+ tmp_out[o_ch] = 0.0f;
+ for (i_ch = 0; i_ch < num_base_ch; i_ch++) {
+ tmp_out[o_ch] += input_audio[i_ch][i] *
+ uni_drc_sel_proc_output->downmix_matrix[i_ch][o_ch];
+ }
+ }
+ for (o_ch = 0; o_ch < num_target_ch; o_ch++) {
+ input_audio[o_ch][i] = tmp_out[o_ch];
+ }
+ for (; o_ch < num_base_ch; o_ch++) {
+ input_audio[o_ch][i] = 0.0f;
+ }
+ }
+ return 0;
+}
-WORD32 impd_init_process_audio_main_stft (ia_drc_api_struct *p_obj_drc)
+WORD32 impd_init_process_audio_main_stft(ia_drc_api_struct *p_obj_drc)
{
- WORD32 error=0, i, j, num_samples_per_channel;
- FLOAT32 *input_buffer;
- FLOAT32 *output_buffer;
- FLOAT32 *audio_io_buf_real[10];
- FLOAT32 *audio_io_buf_imag[10];
- FLOAT32 *scratch_buffer;
- WORD32 last_frame=0;
- scratch_buffer= (FLOAT32*)p_obj_drc->pp_mem[1];
- input_buffer = (FLOAT32*)p_obj_drc->pp_mem[2];
- output_buffer = (FLOAT32*)p_obj_drc->pp_mem[3];
-
-
- if(p_obj_drc->p_state->ui_in_bytes<=0){
- p_obj_drc->p_state->ui_out_bytes=0;
- return 0;
+ WORD32 error = 0, i, j, num_samples_per_channel;
+ FLOAT32 *input_buffer;
+ FLOAT32 *output_buffer;
+ FLOAT32 *audio_io_buf_real[10];
+ FLOAT32 *audio_io_buf_imag[10];
+ FLOAT32 *scratch_buffer;
+ WORD32 last_frame = 0;
+ scratch_buffer = (FLOAT32 *)p_obj_drc->pp_mem[1];
+ input_buffer = (FLOAT32 *)p_obj_drc->pp_mem[2];
+ output_buffer = (FLOAT32 *)p_obj_drc->pp_mem[3];
+
+ if (p_obj_drc->p_state->ui_in_bytes <= 0) {
+ p_obj_drc->p_state->ui_out_bytes = 0;
+ return 0;
+ }
+
+ if ((p_obj_drc->p_state->ui_in_bytes / p_obj_drc->str_config.num_ch_in /
+ (p_obj_drc->str_config.pcm_size >> 3)) <
+ (UWORD32)p_obj_drc->str_config.frame_size)
+ last_frame = 1;
+ for (i = 0; i < p_obj_drc->str_config.num_ch_in; i++) {
+ audio_io_buf_real[i] =
+ scratch_buffer + i * (p_obj_drc->str_config.frame_size + 32);
+ audio_io_buf_imag[i] =
+ scratch_buffer +
+ p_obj_drc->str_config.num_ch_in * p_obj_drc->str_config.frame_size +
+ p_obj_drc->str_config.num_ch_in * 64 +
+ i * (p_obj_drc->str_config.frame_size + 64);
+ for (j = 0; j < p_obj_drc->str_config.frame_size; j++) {
+ audio_io_buf_real[i][j] =
+ input_buffer[j * p_obj_drc->str_config.num_ch_in + i];
+ audio_io_buf_imag[i][j] =
+ input_buffer[p_obj_drc->str_config.num_ch_in *
+ p_obj_drc->str_config.frame_size +
+ j * p_obj_drc->str_config.num_ch_in + i];
}
-
- if((p_obj_drc->p_state->ui_in_bytes/p_obj_drc->str_config.num_ch_in/(p_obj_drc->str_config.pcm_size>>3)) < (UWORD32)p_obj_drc->str_config.frame_size)
- last_frame=1;
- for(i=0;i<p_obj_drc->str_config.num_ch_in;i++){
- audio_io_buf_real[i]=scratch_buffer+i*(p_obj_drc->str_config.frame_size+32);
- audio_io_buf_imag[i]=scratch_buffer+p_obj_drc->str_config.num_ch_in*p_obj_drc->str_config.frame_size+p_obj_drc->str_config.num_ch_in*64+i*(p_obj_drc->str_config.frame_size+64);
- for(j=0;j<p_obj_drc->str_config.frame_size;j++){
- audio_io_buf_real[i][j]=input_buffer[j*p_obj_drc->str_config.num_ch_in + i];
- audio_io_buf_imag[i][j]=input_buffer[p_obj_drc->str_config.num_ch_in*p_obj_drc->str_config.frame_size+j*p_obj_drc->str_config.num_ch_in + i];
+ }
+
+ error = impd_process_drc_bitstream_dec_gain(
+ p_obj_drc->str_payload.pstr_bitstream_dec, p_obj_drc->pstr_bit_buf,
+ p_obj_drc->str_payload.pstr_drc_config,
+ p_obj_drc->str_payload.pstr_drc_gain,
+ &p_obj_drc->str_bit_handler
+ .it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs],
+ p_obj_drc->str_bit_handler.num_bytes_bs,
+ p_obj_drc->str_bit_handler.num_bits_offset_bs,
+ &p_obj_drc->str_bit_handler.num_bits_read_bs);
+
+ if (error > PROC_COMPLETE) return -1;
+
+ p_obj_drc->str_bit_handler.num_bytes_read_bs =
+ (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3);
+ p_obj_drc->str_bit_handler.num_bits_offset_bs =
+ (p_obj_drc->str_bit_handler.num_bits_read_bs & 7);
+ p_obj_drc->str_bit_handler.byte_index_bs +=
+ p_obj_drc->str_bit_handler.num_bytes_read_bs;
+ if (p_obj_drc->str_bit_handler.gain_stream_flag ==
+ 0) // ITTIAM: Flag for applying gain frame by frame
+ {
+ p_obj_drc->str_bit_handler.num_bytes_bs -=
+ p_obj_drc->str_bit_handler.num_bytes_read_bs;
+ }
+
+ if (p_obj_drc->str_config.bitstream_file_format ==
+ BITSTREAM_FILE_FORMAT_SPLIT) {
+ if (p_obj_drc->str_bit_handler.num_bits_offset_bs != 0) {
+ p_obj_drc->str_bit_handler.num_bits_read_bs =
+ p_obj_drc->str_bit_handler.num_bits_read_bs + 8 -
+ p_obj_drc->str_bit_handler.num_bits_offset_bs;
+ p_obj_drc->str_bit_handler.num_bytes_read_bs =
+ p_obj_drc->str_bit_handler.num_bytes_read_bs + 1;
+ p_obj_drc->str_bit_handler.num_bits_offset_bs = 0;
+ p_obj_drc->str_bit_handler.byte_index_bs =
+ p_obj_drc->str_bit_handler.byte_index_bs + 1;
+ if (p_obj_drc->str_bit_handler.gain_stream_flag ==
+ 0) // ITTIAM: Flag for applying gain frame by frame
+ {
+ p_obj_drc->str_bit_handler.num_bytes_bs =
+ p_obj_drc->str_bit_handler.num_bytes_bs - 1;
}
}
-
- error = impd_process_drc_bitstream_dec_gain(p_obj_drc->str_payload.pstr_bitstream_dec,
- p_obj_drc->pstr_bit_buf,
- p_obj_drc->str_payload.pstr_drc_config,
- p_obj_drc->str_payload.pstr_drc_gain,
- &p_obj_drc->str_bit_handler.it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs],
- p_obj_drc->str_bit_handler.num_bytes_bs,
- p_obj_drc->str_bit_handler.num_bits_offset_bs,
- &p_obj_drc->str_bit_handler.num_bits_read_bs);
-
-
-
- if (error > PROC_COMPLETE) return -1;
-
- p_obj_drc->str_bit_handler.num_bytes_read_bs = (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3);
- p_obj_drc->str_bit_handler.num_bits_offset_bs = (p_obj_drc->str_bit_handler.num_bits_read_bs & 7);
- p_obj_drc->str_bit_handler.byte_index_bs += p_obj_drc->str_bit_handler.num_bytes_read_bs;
- if(p_obj_drc->str_bit_handler.gain_stream_flag==0) //ITTIAM: Flag for applying gain frame by frame
- {
- p_obj_drc->str_bit_handler.num_bytes_bs -= p_obj_drc->str_bit_handler.num_bytes_read_bs;
+ }
+
+ error = impd_drc_process_freq_domain(
+ p_obj_drc->str_payload.pstr_gain_dec[0],
+ p_obj_drc->str_payload.pstr_drc_config,
+ p_obj_drc->str_payload.pstr_drc_gain, audio_io_buf_real,
+ audio_io_buf_imag, p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->loudness_normalization_gain_db,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output->boost,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output->compress,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->drc_characteristic_target);
+ if (error) return -1;
+
+ error = impd_down_mix(p_obj_drc->str_payload.pstr_drc_sel_proc_output,
+ audio_io_buf_real, p_obj_drc->str_config.frame_size);
+ if (error) return -1;
+
+ error = impd_down_mix(p_obj_drc->str_payload.pstr_drc_sel_proc_output,
+ audio_io_buf_imag, p_obj_drc->str_config.frame_size);
+ if (error) return -1;
+
+ error = impd_drc_process_freq_domain(
+ p_obj_drc->str_payload.pstr_gain_dec[1],
+ p_obj_drc->str_payload.pstr_drc_config,
+ p_obj_drc->str_payload.pstr_drc_gain, audio_io_buf_real,
+ audio_io_buf_imag, p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->loudness_normalization_gain_db,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output->boost,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output->compress,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->drc_characteristic_target);
+ if (error) return -1;
+
+ if (p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->loudness_normalization_gain_db != 0.0f) {
+ FLOAT32 loudness_normalization_gain =
+ (FLOAT32)pow(10.0, p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->loudness_normalization_gain_db /
+ 20.0);
+ for (i = 0; i < p_obj_drc->str_config.num_ch_out; i++) {
+ for (j = 0; j < p_obj_drc->str_config.frame_size; j++) {
+ audio_io_buf_real[i][j] *= loudness_normalization_gain;
+ audio_io_buf_imag[i][j] *= loudness_normalization_gain;
+ }
}
-
-
- if (p_obj_drc->str_config.bitstream_file_format == BITSTREAM_FILE_FORMAT_SPLIT) {
- if (p_obj_drc->str_bit_handler.num_bits_offset_bs != 0)
- {
- p_obj_drc->str_bit_handler.num_bits_read_bs = p_obj_drc->str_bit_handler.num_bits_read_bs + 8 - p_obj_drc->str_bit_handler.num_bits_offset_bs;
- p_obj_drc->str_bit_handler.num_bytes_read_bs = p_obj_drc->str_bit_handler.num_bytes_read_bs + 1;
- p_obj_drc->str_bit_handler.num_bits_offset_bs = 0;
- p_obj_drc->str_bit_handler.byte_index_bs = p_obj_drc->str_bit_handler.byte_index_bs + 1;
- if(p_obj_drc->str_bit_handler.gain_stream_flag==0) //ITTIAM: Flag for applying gain frame by frame
- {
- p_obj_drc->str_bit_handler.num_bytes_bs = p_obj_drc->str_bit_handler.num_bytes_bs - 1;
- }
- }
+ }
+
+ num_samples_per_channel = p_obj_drc->str_config.frame_size;
+
+ for (i = 0; i < p_obj_drc->str_config.num_ch_out; i++) {
+ for (j = 0; j < p_obj_drc->str_config.frame_size; j++) {
+ output_buffer[j * p_obj_drc->str_config.num_ch_out + i] =
+ audio_io_buf_real[i][j];
+ output_buffer[p_obj_drc->str_config.frame_size *
+ p_obj_drc->str_config.num_ch_in +
+ j * p_obj_drc->str_config.num_ch_out + i] =
+ audio_io_buf_imag[i][j];
}
-
- error = impd_drc_process_freq_domain(p_obj_drc->str_payload.pstr_gain_dec[0],
- p_obj_drc->str_payload.pstr_drc_config,
- p_obj_drc->str_payload.pstr_drc_gain,
- audio_io_buf_real,
- audio_io_buf_imag,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->loudness_normalization_gain_db,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->boost,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->compress,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->drc_characteristic_target);
- if (error) return -1;
-
- error = impd_down_mix(p_obj_drc->str_payload.pstr_drc_sel_proc_output,
- audio_io_buf_real,
- p_obj_drc->str_config.frame_size);
- if (error) return -1;
-
- error = impd_down_mix(p_obj_drc->str_payload.pstr_drc_sel_proc_output,
- audio_io_buf_imag,
- p_obj_drc->str_config.frame_size);
- if (error) return -1;
-
- error = impd_drc_process_freq_domain(p_obj_drc->str_payload.pstr_gain_dec[1],
- p_obj_drc->str_payload.pstr_drc_config,
- p_obj_drc->str_payload.pstr_drc_gain,
- audio_io_buf_real,
- audio_io_buf_imag,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->loudness_normalization_gain_db,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->boost,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->compress,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->drc_characteristic_target);
- if (error) return -1;
-
- if (p_obj_drc->str_payload.pstr_drc_sel_proc_output->loudness_normalization_gain_db != 0.0f)
- {
- FLOAT32 loudness_normalization_gain = (FLOAT32)pow(10.0,p_obj_drc->str_payload.pstr_drc_sel_proc_output->loudness_normalization_gain_db/20.0);
- for (i=0; i < p_obj_drc->str_config.num_ch_out; i++) {
- for (j=0; j <p_obj_drc->str_config. frame_size; j++) {
- audio_io_buf_real[i][j] *= loudness_normalization_gain;
- audio_io_buf_imag[i][j] *= loudness_normalization_gain;
-
- }
- }
- }
-
- num_samples_per_channel = p_obj_drc->str_config.frame_size;
-
- for (i=0; i < p_obj_drc->str_config.num_ch_out; i++) {
- for (j=0; j < p_obj_drc->str_config.frame_size; j++) {
- output_buffer[j*p_obj_drc->str_config.num_ch_out + i] = audio_io_buf_real[i][j];
- output_buffer[p_obj_drc->str_config.frame_size*p_obj_drc->str_config.num_ch_in+j*p_obj_drc->str_config.num_ch_out + i] = audio_io_buf_imag[i][j];
-
- }
- }
- p_obj_drc->p_state->ui_out_bytes=p_obj_drc->str_config.num_ch_out*(p_obj_drc->str_config.frame_size)*4;
- p_obj_drc->p_state->ui_out_bytes=p_obj_drc->str_config.num_ch_out*(p_obj_drc->p_state->ui_in_bytes/p_obj_drc->str_config.num_ch_in);
-
- if(last_frame==0){
-
- if (p_obj_drc->str_config.bitstream_file_format != BITSTREAM_FILE_FORMAT_SPLIT) {
- error = impd_process_drc_bitstream_dec(p_obj_drc->str_payload.pstr_bitstream_dec,
- p_obj_drc->pstr_bit_buf,
- p_obj_drc->str_payload.pstr_drc_config,
- p_obj_drc->str_payload.pstr_loudness_info,
- &p_obj_drc->str_bit_handler.it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs],
- p_obj_drc->str_bit_handler.num_bytes_bs,
- p_obj_drc->str_bit_handler.num_bits_offset_bs,
- &p_obj_drc->str_bit_handler.num_bits_read_bs);
-
- if (error > PROC_COMPLETE)
- return -1;
-
- p_obj_drc->str_bit_handler.num_bytes_read_bs = (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3);
- p_obj_drc->str_bit_handler.num_bits_offset_bs = (p_obj_drc->str_bit_handler.num_bits_read_bs & 7);
- p_obj_drc->str_bit_handler.byte_index_bs += p_obj_drc->str_bit_handler.num_bytes_read_bs;
- p_obj_drc->str_bit_handler.num_bytes_bs -= p_obj_drc->str_bit_handler.num_bytes_read_bs;
-
- }
-
+ }
+ p_obj_drc->p_state->ui_out_bytes =
+ p_obj_drc->str_config.num_ch_out * (p_obj_drc->str_config.frame_size) * 4;
+ p_obj_drc->p_state->ui_out_bytes =
+ p_obj_drc->str_config.num_ch_out *
+ (p_obj_drc->p_state->ui_in_bytes / p_obj_drc->str_config.num_ch_in);
+
+ if (last_frame == 0) {
+ if (p_obj_drc->str_config.bitstream_file_format !=
+ BITSTREAM_FILE_FORMAT_SPLIT) {
+ error = impd_process_drc_bitstream_dec(
+ p_obj_drc->str_payload.pstr_bitstream_dec, p_obj_drc->pstr_bit_buf,
+ p_obj_drc->str_payload.pstr_drc_config,
+ p_obj_drc->str_payload.pstr_loudness_info,
+ &p_obj_drc->str_bit_handler
+ .it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs],
+ p_obj_drc->str_bit_handler.num_bytes_bs,
+ p_obj_drc->str_bit_handler.num_bits_offset_bs,
+ &p_obj_drc->str_bit_handler.num_bits_read_bs);
+
+ if (error > PROC_COMPLETE) return -1;
+
+ p_obj_drc->str_bit_handler.num_bytes_read_bs =
+ (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3);
+ p_obj_drc->str_bit_handler.num_bits_offset_bs =
+ (p_obj_drc->str_bit_handler.num_bits_read_bs & 7);
+ p_obj_drc->str_bit_handler.byte_index_bs +=
+ p_obj_drc->str_bit_handler.num_bytes_read_bs;
+ p_obj_drc->str_bit_handler.num_bytes_bs -=
+ p_obj_drc->str_bit_handler.num_bytes_read_bs;
}
+ }
- return error;
+ return error;
}
-
diff --git a/decoder/drc_src/impd_drc_main_td_process.c b/decoder/drc_src/impd_drc_main_td_process.c
index 49dcba2..6449531 100644
--- a/decoder/drc_src/impd_drc_main_td_process.c
+++ b/decoder/drc_src/impd_drc_main_td_process.c
@@ -41,274 +41,285 @@
#include "impd_drc_hashdefines.h"
#include "impd_drc_peak_limiter.h"
-static IA_ERRORCODE impd_down_mix ( ia_drc_sel_proc_output_struct *uni_drc_sel_proc_output, FLOAT32** input_audio, WORD32 frame_len)
-{
- WORD32 num_base_ch = uni_drc_sel_proc_output->base_channel_count;
- WORD32 num_target_ch = uni_drc_sel_proc_output->target_channel_count;
- WORD32 i, i_ch, o_ch;
- FLOAT32 tmp_out[MAX_CHANNEL_COUNT];
-
-
- if (num_target_ch > MAX_CHANNEL_COUNT)
- return -1;
-
- if (num_target_ch > num_base_ch)
- return -1;
-
- for (i=0; i<frame_len; i++)
- {
- for (o_ch=0; o_ch<num_target_ch; o_ch++)
- {
- tmp_out[o_ch] = 0.0f;
- for (i_ch=0; i_ch<num_base_ch; i_ch++)
- {
- tmp_out[o_ch] += input_audio[i_ch][i] * uni_drc_sel_proc_output->downmix_matrix[i_ch][o_ch];
- }
- }
- for (o_ch=0; o_ch<num_target_ch; o_ch++)
- {
- input_audio[o_ch][i] = tmp_out[o_ch];
- }
- for ( ; o_ch<num_base_ch; o_ch++)
- {
- input_audio[o_ch][i] = 0.0f;
- }
+static IA_ERRORCODE impd_down_mix(
+ ia_drc_sel_proc_output_struct *uni_drc_sel_proc_output,
+ FLOAT32 **input_audio, WORD32 frame_len) {
+ WORD32 num_base_ch = uni_drc_sel_proc_output->base_channel_count;
+ WORD32 num_target_ch = uni_drc_sel_proc_output->target_channel_count;
+ WORD32 i, i_ch, o_ch;
+ FLOAT32 tmp_out[MAX_CHANNEL_COUNT];
+
+ if (num_target_ch > MAX_CHANNEL_COUNT) return -1;
+
+ if (num_target_ch > num_base_ch) return -1;
+
+ for (i = 0; i < frame_len; i++) {
+ for (o_ch = 0; o_ch < num_target_ch; o_ch++) {
+ tmp_out[o_ch] = 0.0f;
+ for (i_ch = 0; i_ch < num_base_ch; i_ch++) {
+ tmp_out[o_ch] += input_audio[i_ch][i] *
+ uni_drc_sel_proc_output->downmix_matrix[i_ch][o_ch];
+ }
}
-
-
- return IA_NO_ERROR;
-}
-
-IA_ERRORCODE impd_process_time_domain(ia_drc_api_struct *p_obj_drc)
-{
- IA_ERRORCODE err_code= IA_NO_ERROR;
- WORD32 i, j;
- FLOAT32 *input_buffer;
- WORD16 *input_buffer16, *output_buffer16;
- FLOAT32 *output_buffer;
- FLOAT32 *audio_buff[10];
- FLOAT32 *scratch_buffer;
- WORD32 last_frame=0;
- WORD32 num_sample_to_process;
- scratch_buffer = (FLOAT32*)p_obj_drc->pp_mem[1];
- input_buffer = (FLOAT32*)p_obj_drc->pp_mem[2];
- output_buffer = (FLOAT32*)p_obj_drc->pp_mem[3];
- input_buffer16 = (WORD16*)p_obj_drc->pp_mem[2];
- output_buffer16 = (WORD16*)p_obj_drc->pp_mem[3];
-
- if(p_obj_drc->p_state->ui_in_bytes<=0){
- p_obj_drc->p_state->ui_out_bytes=0;
- return IA_NO_ERROR;
+ for (o_ch = 0; o_ch < num_target_ch; o_ch++) {
+ input_audio[o_ch][i] = tmp_out[o_ch];
}
-
- err_code = impd_process_drc_bitstream_dec_gain(p_obj_drc->str_payload.pstr_bitstream_dec,
- p_obj_drc->pstr_bit_buf,
- p_obj_drc->str_payload.pstr_drc_config,
- p_obj_drc->str_payload.pstr_drc_gain,
- &p_obj_drc->str_bit_handler.it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs],
- p_obj_drc->str_bit_handler.num_bytes_bs,
- p_obj_drc->str_bit_handler.num_bits_offset_bs,
- &p_obj_drc->str_bit_handler.num_bits_read_bs);
-
- if (err_code > PROC_COMPLETE)
- return -1;
-
- p_obj_drc->str_bit_handler.num_bytes_read_bs = (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3);
- p_obj_drc->str_bit_handler.num_bits_offset_bs = (p_obj_drc->str_bit_handler.num_bits_read_bs & 7);
- p_obj_drc->str_bit_handler.byte_index_bs += p_obj_drc->str_bit_handler.num_bytes_read_bs;
- if(p_obj_drc->str_bit_handler.gain_stream_flag==0) //ITTIAM: Flag for applying gain frame by frame
- {
- p_obj_drc->str_bit_handler.num_bytes_bs -= p_obj_drc->str_bit_handler.num_bytes_read_bs;
+ for (; o_ch < num_base_ch; o_ch++) {
+ input_audio[o_ch][i] = 0.0f;
}
+ }
- if (p_obj_drc->str_config.bitstream_file_format == BITSTREAM_FILE_FORMAT_SPLIT) {
- if (p_obj_drc->str_bit_handler.num_bits_offset_bs != 0)
- {
- p_obj_drc->str_bit_handler.num_bits_read_bs = p_obj_drc->str_bit_handler.num_bits_read_bs + 8
- - p_obj_drc->str_bit_handler.num_bits_offset_bs;
- p_obj_drc->str_bit_handler.num_bytes_read_bs = p_obj_drc->str_bit_handler.num_bytes_read_bs + 1;
- p_obj_drc->str_bit_handler.num_bits_offset_bs = 0;
- p_obj_drc->str_bit_handler.byte_index_bs = p_obj_drc->str_bit_handler.byte_index_bs + 1;
- if(p_obj_drc->str_bit_handler.gain_stream_flag==0)
- {
- p_obj_drc->str_bit_handler.num_bytes_bs = p_obj_drc->str_bit_handler.num_bytes_bs - 1;
- }
- }
- }
+ return IA_NO_ERROR;
+}
- num_sample_to_process=(p_obj_drc->p_state->ui_in_bytes/p_obj_drc->str_config.num_ch_in/(p_obj_drc->str_config.pcm_size>>3));
+IA_ERRORCODE impd_process_time_domain(ia_drc_api_struct *p_obj_drc) {
+ IA_ERRORCODE err_code = IA_NO_ERROR;
+ WORD32 i, j;
+ FLOAT32 *input_buffer;
+ WORD16 *input_buffer16, *output_buffer16;
+ FLOAT32 *output_buffer;
+ FLOAT32 *audio_buff[10];
+ FLOAT32 *scratch_buffer;
+ WORD32 last_frame = 0;
+ WORD32 num_sample_to_process;
+ scratch_buffer = (FLOAT32 *)p_obj_drc->pp_mem[1];
+ input_buffer = (FLOAT32 *)p_obj_drc->pp_mem[2];
+ output_buffer = (FLOAT32 *)p_obj_drc->pp_mem[3];
+ input_buffer16 = (WORD16 *)p_obj_drc->pp_mem[2];
+ output_buffer16 = (WORD16 *)p_obj_drc->pp_mem[3];
+
+ if (p_obj_drc->p_state->ui_in_bytes <= 0) {
+ p_obj_drc->p_state->ui_out_bytes = 0;
+ return IA_NO_ERROR;
+ }
+
+ err_code = impd_process_drc_bitstream_dec_gain(
+ p_obj_drc->str_payload.pstr_bitstream_dec, p_obj_drc->pstr_bit_buf,
+ p_obj_drc->str_payload.pstr_drc_config,
+ p_obj_drc->str_payload.pstr_drc_gain,
+ &p_obj_drc->str_bit_handler
+ .it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs],
+ p_obj_drc->str_bit_handler.num_bytes_bs,
+ p_obj_drc->str_bit_handler.num_bits_offset_bs,
+ &p_obj_drc->str_bit_handler.num_bits_read_bs);
+
+ if (err_code > PROC_COMPLETE) return -1;
+
+ p_obj_drc->str_bit_handler.num_bytes_read_bs =
+ (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3);
+ p_obj_drc->str_bit_handler.num_bits_offset_bs =
+ (p_obj_drc->str_bit_handler.num_bits_read_bs & 7);
+ p_obj_drc->str_bit_handler.byte_index_bs +=
+ p_obj_drc->str_bit_handler.num_bytes_read_bs;
+ if (p_obj_drc->str_bit_handler.gain_stream_flag ==
+ 0) // ITTIAM: Flag for applying gain frame by frame
+ {
+ p_obj_drc->str_bit_handler.num_bytes_bs -=
+ p_obj_drc->str_bit_handler.num_bytes_read_bs;
+ }
+
+ if (p_obj_drc->str_config.bitstream_file_format ==
+ BITSTREAM_FILE_FORMAT_SPLIT) {
+ if (p_obj_drc->str_bit_handler.num_bits_offset_bs != 0) {
+ p_obj_drc->str_bit_handler.num_bits_read_bs =
+ p_obj_drc->str_bit_handler.num_bits_read_bs + 8 -
+ p_obj_drc->str_bit_handler.num_bits_offset_bs;
+ p_obj_drc->str_bit_handler.num_bytes_read_bs =
+ p_obj_drc->str_bit_handler.num_bytes_read_bs + 1;
+ p_obj_drc->str_bit_handler.num_bits_offset_bs = 0;
+ p_obj_drc->str_bit_handler.byte_index_bs =
+ p_obj_drc->str_bit_handler.byte_index_bs + 1;
+ if (p_obj_drc->str_bit_handler.gain_stream_flag == 0) {
+ p_obj_drc->str_bit_handler.num_bytes_bs =
+ p_obj_drc->str_bit_handler.num_bytes_bs - 1;
+ }
+ }
+ }
- p_obj_drc->str_config.frame_size = num_sample_to_process;
+ num_sample_to_process =
+ (p_obj_drc->p_state->ui_in_bytes / p_obj_drc->str_config.num_ch_in /
+ (p_obj_drc->str_config.pcm_size >> 3));
- if(num_sample_to_process<p_obj_drc->str_config.frame_size)
- last_frame=1;
+ p_obj_drc->str_config.frame_size = num_sample_to_process;
- if(p_obj_drc->str_config.pcm_size==16)
- {
- for(i=0;i<p_obj_drc->str_config.num_ch_in;i++)
- {
- audio_buff[i]=scratch_buffer+i*(p_obj_drc->str_config.frame_size+32);
+ if (num_sample_to_process < p_obj_drc->str_config.frame_size) last_frame = 1;
- for(j=0;j<num_sample_to_process;j++)
- {
+ if (p_obj_drc->str_config.pcm_size == 16) {
+ for (i = 0; i < p_obj_drc->str_config.num_ch_in; i++) {
+ audio_buff[i] =
+ scratch_buffer + i * (p_obj_drc->str_config.frame_size + 32);
- audio_buff[i][j]=((FLOAT32)input_buffer16[j*p_obj_drc->str_config.num_ch_in + i])/32767.0f;
- }
- }
+ for (j = 0; j < num_sample_to_process; j++) {
+ audio_buff[i][j] =
+ ((FLOAT32)input_buffer16[j * p_obj_drc->str_config.num_ch_in + i]) /
+ 32767.0f;
+ }
}
- else
- {
- for(i=0;i<p_obj_drc->str_config.num_ch_in;i++)
- {
- audio_buff[i]=scratch_buffer+i*(p_obj_drc->str_config.frame_size+32);
-
- for(j=0;j<num_sample_to_process;j++)
- {
- audio_buff[i][j]=input_buffer[j*p_obj_drc->str_config.num_ch_in + i];
- }
- }
+ } else {
+ for (i = 0; i < p_obj_drc->str_config.num_ch_in; i++) {
+ audio_buff[i] =
+ scratch_buffer + i * (p_obj_drc->str_config.frame_size + 32);
+
+ for (j = 0; j < num_sample_to_process; j++) {
+ audio_buff[i][j] =
+ input_buffer[j * p_obj_drc->str_config.num_ch_in + i];
+ }
}
-
- err_code = impd_drc_process_time_domain(p_obj_drc->str_payload.pstr_gain_dec[0],
- p_obj_drc->str_payload.pstr_drc_config,
- p_obj_drc->str_payload.pstr_drc_gain,
- audio_buff,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->loudness_normalization_gain_db,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->boost,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->compress,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->drc_characteristic_target);
-
- if (err_code!=IA_NO_ERROR)
- return err_code;
-
- if(p_obj_drc->str_payload.pstr_drc_sel_proc_output->downmix_matrix_present!=0)
- err_code = impd_down_mix(p_obj_drc->str_payload.pstr_drc_sel_proc_output,
- audio_buff,
- p_obj_drc->str_config.frame_size);
-
- if (err_code!=IA_NO_ERROR)
- return err_code;
-
- err_code = impd_drc_process_time_domain(p_obj_drc->str_payload.pstr_gain_dec[1],
- p_obj_drc->str_payload.pstr_drc_config,
- p_obj_drc->str_payload.pstr_drc_gain,
- audio_buff,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->loudness_normalization_gain_db,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->boost,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->compress,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->drc_characteristic_target);
-
- if (err_code!=IA_NO_ERROR)
- return err_code;
-
- if (p_obj_drc->str_payload.pstr_drc_sel_proc_output->loudness_normalization_gain_db != 0.0f)
- {
- FLOAT32 gain_value = (FLOAT32)pow(10.0,p_obj_drc->str_payload.pstr_drc_sel_proc_output->loudness_normalization_gain_db/20.0);
- for (i=0; i < p_obj_drc->str_config.num_ch_out; i++) {
- for (j=0; j < p_obj_drc->str_config.frame_size; j++) {
- audio_buff[i][j] *= gain_value;
- }
- }
+ }
+
+ err_code = impd_drc_process_time_domain(
+ p_obj_drc->str_payload.pstr_gain_dec[0],
+ p_obj_drc->str_payload.pstr_drc_config,
+ p_obj_drc->str_payload.pstr_drc_gain, audio_buff,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->loudness_normalization_gain_db,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output->boost,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output->compress,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->drc_characteristic_target);
+
+ if (err_code != IA_NO_ERROR) return err_code;
+
+ if (p_obj_drc->str_payload.pstr_drc_sel_proc_output->downmix_matrix_present !=
+ 0)
+ err_code = impd_down_mix(p_obj_drc->str_payload.pstr_drc_sel_proc_output,
+ audio_buff, p_obj_drc->str_config.frame_size);
+
+ if (err_code != IA_NO_ERROR) return err_code;
+
+ err_code = impd_drc_process_time_domain(
+ p_obj_drc->str_payload.pstr_gain_dec[1],
+ p_obj_drc->str_payload.pstr_drc_config,
+ p_obj_drc->str_payload.pstr_drc_gain, audio_buff,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->loudness_normalization_gain_db,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output->boost,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output->compress,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->drc_characteristic_target);
+
+ if (err_code != IA_NO_ERROR) return err_code;
+
+ if (p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->loudness_normalization_gain_db != 0.0f) {
+ FLOAT32 gain_value =
+ (FLOAT32)pow(10.0, p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->loudness_normalization_gain_db /
+ 20.0);
+ for (i = 0; i < p_obj_drc->str_config.num_ch_out; i++) {
+ for (j = 0; j < p_obj_drc->str_config.frame_size; j++) {
+ audio_buff[i][j] *= gain_value;
+ }
+ }
+ }
+
+ if (p_obj_drc->str_config.peak_limiter) {
+ for (i = 0; i < p_obj_drc->str_config.num_ch_out; i++) {
+ for (j = 0; j < p_obj_drc->str_config.frame_size; j++) {
+ output_buffer[j * p_obj_drc->str_config.num_ch_out + i] =
+ audio_buff[i][j];
+ }
}
- if (p_obj_drc->str_config.peak_limiter)
- {
- for (i=0; i < p_obj_drc->str_config.num_ch_out; i++) {
- for (j=0; j < p_obj_drc->str_config.frame_size; j++) {
- output_buffer[j*p_obj_drc->str_config.num_ch_out + i] = audio_buff[i][j];
- }
- }
-
- err_code=impd_limiter_process(p_obj_drc->str_payload.pstr_peak_limiter,
- output_buffer,
- p_obj_drc->str_config.frame_size);
-
+ err_code =
+ impd_limiter_process(p_obj_drc->str_payload.pstr_peak_limiter,
+ output_buffer, p_obj_drc->str_config.frame_size);
- if (err_code!=IA_NO_ERROR)
- return err_code;
+ if (err_code != IA_NO_ERROR) return err_code;
- for (i=0; i < p_obj_drc->str_config.num_ch_out; i++) {
- for (j=0; j < p_obj_drc->str_config.frame_size; j++) {
- audio_buff[i][j] = output_buffer[j*p_obj_drc->str_config.num_ch_out + i];
- }
- }
+ for (i = 0; i < p_obj_drc->str_config.num_ch_out; i++) {
+ for (j = 0; j < p_obj_drc->str_config.frame_size; j++) {
+ audio_buff[i][j] =
+ output_buffer[j * p_obj_drc->str_config.num_ch_out + i];
+ }
}
+ }
- if(p_obj_drc->str_config.pcm_size==16)
- {
- for (i=0; i < p_obj_drc->str_config.num_ch_out; i++)
- {
- for (j=0; j < p_obj_drc->str_config.frame_size; j++)
- {
- if(audio_buff[i][j]<-1.0f)
- output_buffer16[j*p_obj_drc->str_config.num_ch_out + i] = -32767;
-
- else if (audio_buff[i][j]>1.0f)
- output_buffer16[j*p_obj_drc->str_config.num_ch_out + i] = 32767;
-
- else
- output_buffer16[j*p_obj_drc->str_config.num_ch_out + i] = (WORD16)(audio_buff[i][j]*32767.0f);
- }
- }
- }
- else
- {
- for (i=0; i < p_obj_drc->str_config.num_ch_out; i++)
- {
- for (j=0; j < p_obj_drc->str_config.frame_size; j++)
- {
- output_buffer[j*p_obj_drc->str_config.num_ch_out + i] = audio_buff[i][j];
- }
- }
- }
+ if (p_obj_drc->str_config.pcm_size == 16) {
+ for (i = 0; i < p_obj_drc->str_config.num_ch_out; i++) {
+ for (j = 0; j < p_obj_drc->str_config.frame_size; j++) {
+ if (audio_buff[i][j] < -1.0f)
+ output_buffer16[j * p_obj_drc->str_config.num_ch_out + i] = -32767;
- p_obj_drc->p_state->ui_out_bytes=p_obj_drc->str_config.num_ch_out*(p_obj_drc->p_state->ui_in_bytes/p_obj_drc->str_config.num_ch_in);
+ else if (audio_buff[i][j] > 1.0f)
+ output_buffer16[j * p_obj_drc->str_config.num_ch_out + i] = 32767;
- if(p_obj_drc->p_state->delay_in_output!=0){
- p_obj_drc->p_state->ui_out_bytes=p_obj_drc->str_config.num_ch_out*(p_obj_drc->str_config.frame_size-p_obj_drc->p_state->delay_in_output)*(p_obj_drc->str_config.pcm_size>>3);
- if(p_obj_drc->str_config.pcm_size==16)
- memcpy(output_buffer16,(output_buffer16+(p_obj_drc->p_state->delay_in_output*p_obj_drc->str_config.num_ch_out)),p_obj_drc->p_state->ui_out_bytes);
else
- memcpy(output_buffer,(output_buffer+(p_obj_drc->p_state->delay_in_output*p_obj_drc->str_config.num_ch_out)),p_obj_drc->p_state->ui_out_bytes);
-
- p_obj_drc->p_state->delay_adjust_samples = p_obj_drc->p_state->delay_in_output;
- p_obj_drc->p_state->delay_in_output=0;
-
+ output_buffer16[j * p_obj_drc->str_config.num_ch_out + i] =
+ (WORD16)(audio_buff[i][j] * 32767.0f);
+ }
}
- if(last_frame==1)
- {
- if((num_sample_to_process+p_obj_drc->p_state->delay_adjust_samples)<=p_obj_drc->str_config.frame_size)
- p_obj_drc->p_state->ui_out_bytes = (num_sample_to_process+p_obj_drc->p_state->delay_adjust_samples)*p_obj_drc->str_config.num_ch_out*(p_obj_drc->str_config.pcm_size>>3);
- else
- p_obj_drc->p_state->ui_out_bytes = (p_obj_drc->str_config.frame_size)*p_obj_drc->str_config.num_ch_out*(p_obj_drc->str_config.pcm_size>>3);
-
+ } else {
+ for (i = 0; i < p_obj_drc->str_config.num_ch_out; i++) {
+ for (j = 0; j < p_obj_drc->str_config.frame_size; j++) {
+ output_buffer[j * p_obj_drc->str_config.num_ch_out + i] =
+ audio_buff[i][j];
+ }
}
-
- if(last_frame==0){
-
-
-
- if (p_obj_drc->str_config.bitstream_file_format != BITSTREAM_FILE_FORMAT_SPLIT) {
- err_code = impd_process_drc_bitstream_dec(p_obj_drc->str_payload.pstr_bitstream_dec,
- p_obj_drc->pstr_bit_buf,
- p_obj_drc->str_payload.pstr_drc_config,
- p_obj_drc->str_payload.pstr_loudness_info,
- &p_obj_drc->str_bit_handler.it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs],
- p_obj_drc->str_bit_handler.num_bytes_bs,
- p_obj_drc->str_bit_handler.num_bits_offset_bs,
- &p_obj_drc->str_bit_handler.num_bits_read_bs);
-
- if (err_code > PROC_COMPLETE)
- return -1;
-
- p_obj_drc->str_bit_handler.num_bytes_read_bs = (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3);
- p_obj_drc->str_bit_handler.num_bits_offset_bs = (p_obj_drc->str_bit_handler.num_bits_read_bs & 7);
- p_obj_drc->str_bit_handler.byte_index_bs += p_obj_drc->str_bit_handler.num_bytes_read_bs;
- p_obj_drc->str_bit_handler.num_bytes_bs -= p_obj_drc->str_bit_handler.num_bytes_read_bs;
-
- }
+ }
+
+ p_obj_drc->p_state->ui_out_bytes =
+ p_obj_drc->str_config.num_ch_out *
+ (p_obj_drc->p_state->ui_in_bytes / p_obj_drc->str_config.num_ch_in);
+
+ if (p_obj_drc->p_state->delay_in_output != 0) {
+ p_obj_drc->p_state->ui_out_bytes = p_obj_drc->str_config.num_ch_out *
+ (p_obj_drc->str_config.frame_size -
+ p_obj_drc->p_state->delay_in_output) *
+ (p_obj_drc->str_config.pcm_size >> 3);
+ if (p_obj_drc->str_config.pcm_size == 16)
+ memcpy(output_buffer16,
+ (output_buffer16 + (p_obj_drc->p_state->delay_in_output *
+ p_obj_drc->str_config.num_ch_out)),
+ p_obj_drc->p_state->ui_out_bytes);
+ else
+ memcpy(output_buffer,
+ (output_buffer + (p_obj_drc->p_state->delay_in_output *
+ p_obj_drc->str_config.num_ch_out)),
+ p_obj_drc->p_state->ui_out_bytes);
+
+ p_obj_drc->p_state->delay_adjust_samples =
+ p_obj_drc->p_state->delay_in_output;
+ p_obj_drc->p_state->delay_in_output = 0;
+ }
+ if (last_frame == 1) {
+ if ((num_sample_to_process + p_obj_drc->p_state->delay_adjust_samples) <=
+ p_obj_drc->str_config.frame_size)
+ p_obj_drc->p_state->ui_out_bytes =
+ (num_sample_to_process + p_obj_drc->p_state->delay_adjust_samples) *
+ p_obj_drc->str_config.num_ch_out *
+ (p_obj_drc->str_config.pcm_size >> 3);
+ else
+ p_obj_drc->p_state->ui_out_bytes = (p_obj_drc->str_config.frame_size) *
+ p_obj_drc->str_config.num_ch_out *
+ (p_obj_drc->str_config.pcm_size >> 3);
+ }
+
+ if (last_frame == 0) {
+ if (p_obj_drc->str_config.bitstream_file_format !=
+ BITSTREAM_FILE_FORMAT_SPLIT) {
+ err_code = impd_process_drc_bitstream_dec(
+ p_obj_drc->str_payload.pstr_bitstream_dec, p_obj_drc->pstr_bit_buf,
+ p_obj_drc->str_payload.pstr_drc_config,
+ p_obj_drc->str_payload.pstr_loudness_info,
+ &p_obj_drc->str_bit_handler
+ .it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs],
+ p_obj_drc->str_bit_handler.num_bytes_bs,
+ p_obj_drc->str_bit_handler.num_bits_offset_bs,
+ &p_obj_drc->str_bit_handler.num_bits_read_bs);
+
+ if (err_code > PROC_COMPLETE) return -1;
+
+ p_obj_drc->str_bit_handler.num_bytes_read_bs =
+ (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3);
+ p_obj_drc->str_bit_handler.num_bits_offset_bs =
+ (p_obj_drc->str_bit_handler.num_bits_read_bs & 7);
+ p_obj_drc->str_bit_handler.byte_index_bs +=
+ p_obj_drc->str_bit_handler.num_bytes_read_bs;
+ p_obj_drc->str_bit_handler.num_bytes_bs -=
+ p_obj_drc->str_bit_handler.num_bytes_read_bs;
}
+ }
- return err_code;
+ return err_code;
}
-
diff --git a/decoder/drc_src/impd_drc_main_td_qmf_process.c b/decoder/drc_src/impd_drc_main_td_qmf_process.c
index 91a3690..2697c54 100644
--- a/decoder/drc_src/impd_drc_main_td_qmf_process.c
+++ b/decoder/drc_src/impd_drc_main_td_qmf_process.c
@@ -39,333 +39,326 @@
#include "impd_drc_hashdefines.h"
#include "impd_drc_rom.h"
+VOID process_qmf_syn_filt_bank(ia_drc_qmf_filt_struct *qmf_filt, FLOAT64 *buff,
+ FLOAT32 *input_real, FLOAT32 *input_imag,
+ FLOAT32 *output) {
+ WORD32 i, j;
+ FLOAT64 U[10 * QMF_NUM_FILT_BANDS];
+ FLOAT64 W[10 * QMF_NUM_FILT_BANDS];
-VOID process_qmf_syn_filt_bank(ia_drc_qmf_filt_struct *qmf_filt,
- FLOAT64 *buff,
- FLOAT32 *input_real,
- FLOAT32 *input_imag,
- FLOAT32 *output)
-{
- WORD32 i,j;
- FLOAT64 U[10 * QMF_NUM_FILT_BANDS];
- FLOAT64 W[10 * QMF_NUM_FILT_BANDS];
-
- FLOAT64 tmp;
+ FLOAT64 tmp;
- for ( i=20*QMF_FILT_RESOLUTION-1; i>=2*QMF_FILT_RESOLUTION; i-- ) {
- buff[i] = buff[i-2*QMF_FILT_RESOLUTION];
+ for (i = 20 * QMF_FILT_RESOLUTION - 1; i >= 2 * QMF_FILT_RESOLUTION; i--) {
+ buff[i] = buff[i - 2 * QMF_FILT_RESOLUTION];
}
-
- for ( i=0; i<2*QMF_FILT_RESOLUTION; i++ ) {
+ for (i = 0; i < 2 * QMF_FILT_RESOLUTION; i++) {
tmp = 0.0;
- for ( j=0; j<QMF_FILT_RESOLUTION; j++ ) {
- tmp = tmp
- + input_real[j] * qmf_filt->syn_tab_real[i][j]
- - input_imag[j] * qmf_filt->syn_tab_imag[i][j];
-
+ for (j = 0; j < QMF_FILT_RESOLUTION; j++) {
+ tmp = tmp + input_real[j] * qmf_filt->syn_tab_real[i][j] -
+ input_imag[j] * qmf_filt->syn_tab_imag[i][j];
}
buff[i] = tmp;
}
-
- for ( i=0; i<5; i++ ) {
- for ( j=0; j<QMF_FILT_RESOLUTION; j++ ) {
- U[2*QMF_FILT_RESOLUTION*i+j] = buff[4*QMF_FILT_RESOLUTION*i+j];
- U[2*QMF_FILT_RESOLUTION*i+QMF_FILT_RESOLUTION+j] = buff[4*QMF_FILT_RESOLUTION*i+3*QMF_FILT_RESOLUTION+j];
+ for (i = 0; i < 5; i++) {
+ for (j = 0; j < QMF_FILT_RESOLUTION; j++) {
+ U[2 * QMF_FILT_RESOLUTION * i + j] =
+ buff[4 * QMF_FILT_RESOLUTION * i + j];
+ U[2 * QMF_FILT_RESOLUTION * i + QMF_FILT_RESOLUTION + j] =
+ buff[4 * QMF_FILT_RESOLUTION * i + 3 * QMF_FILT_RESOLUTION + j];
}
}
-
- for ( i=0; i<10*QMF_FILT_RESOLUTION; i++ ) {
-
- W[i] = U[i] * qmf_filter_coeff[i];
+ for (i = 0; i < 10 * QMF_FILT_RESOLUTION; i++) {
+ W[i] = U[i] * qmf_filter_coeff[i];
}
-
- for ( i=0; i<QMF_FILT_RESOLUTION; i++ ) {
+ for (i = 0; i < QMF_FILT_RESOLUTION; i++) {
tmp = 0.0;
- for ( j=0; j<10; j++ ) {
- tmp = tmp + W[QMF_FILT_RESOLUTION*j+i];
+ for (j = 0; j < 10; j++) {
+ tmp = tmp + W[QMF_FILT_RESOLUTION * j + i];
}
- output[i] = (FLOAT32) tmp;
+ output[i] = (FLOAT32)tmp;
}
}
+VOID process_qmf_ana_filt_bank(ia_drc_qmf_filt_struct *qmf_filt, FLOAT64 *buff,
+ FLOAT32 *input, FLOAT32 *output_real,
+ FLOAT32 *output_imag) {
+ WORD32 i, j;
+ FLOAT32 Z[10 * QMF_NUM_FILT_BANDS];
+ FLOAT32 Y[2 * QMF_NUM_FILT_BANDS];
-VOID process_qmf_ana_filt_bank(ia_drc_qmf_filt_struct *qmf_filt,
- FLOAT64 *buff,
- FLOAT32 *input,
- FLOAT32 *output_real,
- FLOAT32 *output_imag)
-{
- WORD32 i,j;
- FLOAT32 Z[10 * QMF_NUM_FILT_BANDS];
- FLOAT32 Y[2 * QMF_NUM_FILT_BANDS];
-
- for ( i=10*QMF_FILT_RESOLUTION-1; i>=QMF_FILT_RESOLUTION; i-- ) {
- buff[i] = buff[i-QMF_FILT_RESOLUTION];
+ for (i = 10 * QMF_FILT_RESOLUTION - 1; i >= QMF_FILT_RESOLUTION; i--) {
+ buff[i] = buff[i - QMF_FILT_RESOLUTION];
}
-
- for ( i=QMF_FILT_RESOLUTION-1; i>=0; i-- ) {
- buff[i] = input[QMF_FILT_RESOLUTION-1-i];
+ for (i = QMF_FILT_RESOLUTION - 1; i >= 0; i--) {
+ buff[i] = input[QMF_FILT_RESOLUTION - 1 - i];
}
-
- for ( i=0; i<10*QMF_FILT_RESOLUTION; i++ ) {
-
- Z[i] = (FLOAT32) (buff[i] * qmf_filter_coeff[i]);
-
+ for (i = 0; i < 10 * QMF_FILT_RESOLUTION; i++) {
+ Z[i] = (FLOAT32)(buff[i] * qmf_filter_coeff[i]);
}
- for ( i=0; i<2*QMF_FILT_RESOLUTION; i++ ) {
+ for (i = 0; i < 2 * QMF_FILT_RESOLUTION; i++) {
Y[i] = 0.0f;
- for ( j=0; j<5; j++ ) {
+ for (j = 0; j < 5; j++) {
Y[i] += Z[i + j * 2 * QMF_FILT_RESOLUTION];
}
}
- for ( i=0; i<QMF_FILT_RESOLUTION; i++ ) {
+ for (i = 0; i < QMF_FILT_RESOLUTION; i++) {
output_real[i] = 0.0f;
output_imag[i] = 0.0f;
- for ( j=0; j<2*QMF_FILT_RESOLUTION; j++ ) {
- output_real[i] += (FLOAT32) (Y[j] * qmf_filt->ana_tab_real[i][j]);
- output_imag[i] += (FLOAT32) (Y[j] * qmf_filt->ana_tab_imag[i][j]);
+ for (j = 0; j < 2 * QMF_FILT_RESOLUTION; j++) {
+ output_real[i] += (FLOAT32)(Y[j] * qmf_filt->ana_tab_real[i][j]);
+ output_imag[i] += (FLOAT32)(Y[j] * qmf_filt->ana_tab_imag[i][j]);
}
}
-
}
+static WORD32 impd_down_mix(
+ ia_drc_sel_proc_output_struct *uni_drc_sel_proc_output,
+ FLOAT32 **input_audio, WORD32 frame_len) {
+ WORD32 num_base_ch = uni_drc_sel_proc_output->base_channel_count;
+ WORD32 num_target_ch = uni_drc_sel_proc_output->target_channel_count;
+ WORD32 i, i_ch, o_ch;
+ FLOAT32 tmp_out[MAX_CHANNEL_COUNT];
-static WORD32 impd_down_mix ( ia_drc_sel_proc_output_struct *uni_drc_sel_proc_output, FLOAT32** input_audio, WORD32 frame_len)
-{
- WORD32 num_base_ch = uni_drc_sel_proc_output->base_channel_count;
- WORD32 num_target_ch = uni_drc_sel_proc_output->target_channel_count;
- WORD32 i, i_ch, o_ch;
- FLOAT32 tmp_out[MAX_CHANNEL_COUNT];
-
-
- if (num_target_ch > MAX_CHANNEL_COUNT)
- return -1;
-
- if (num_target_ch > num_base_ch)
- return -1;
-
- for (i=0; i<frame_len; i++) {
- for (o_ch=0; o_ch<num_target_ch; o_ch++) {
- tmp_out[o_ch] = 0.0f;
- for (i_ch=0; i_ch<num_base_ch; i_ch++) {
- tmp_out[o_ch] += input_audio[i_ch][i] * uni_drc_sel_proc_output->downmix_matrix[i_ch][o_ch];
- }
- }
- for (o_ch=0; o_ch<num_target_ch; o_ch++) {
- input_audio[o_ch][i] = tmp_out[o_ch];
- }
- for ( ; o_ch<num_base_ch; o_ch++) {
- input_audio[o_ch][i] = 0.0f;
- }
- }
-
-
- return 0;
-}
-
+ if (num_target_ch > MAX_CHANNEL_COUNT) return -1;
+ if (num_target_ch > num_base_ch) return -1;
+ for (i = 0; i < frame_len; i++) {
+ for (o_ch = 0; o_ch < num_target_ch; o_ch++) {
+ tmp_out[o_ch] = 0.0f;
+ for (i_ch = 0; i_ch < num_base_ch; i_ch++) {
+ tmp_out[o_ch] += input_audio[i_ch][i] *
+ uni_drc_sel_proc_output->downmix_matrix[i_ch][o_ch];
+ }
+ }
+ for (o_ch = 0; o_ch < num_target_ch; o_ch++) {
+ input_audio[o_ch][i] = tmp_out[o_ch];
+ }
+ for (; o_ch < num_base_ch; o_ch++) {
+ input_audio[o_ch][i] = 0.0f;
+ }
+ }
+ return 0;
+}
-WORD32 impd_init_process_audio_main_td_qmf (ia_drc_api_struct *p_obj_drc)
+WORD32 impd_init_process_audio_main_td_qmf(ia_drc_api_struct *p_obj_drc)
{
- WORD32 error, i, j, num_samples_per_channel;
- FLOAT32 *input_buffer;
- WORD16 *input_buffer16, *output_buffer16;
- FLOAT32 *output_buffer;
- FLOAT32 *audio_io_buf_real[10];
- FLOAT32 *audio_io_buf_imag[10];
- FLOAT32 *audio_in_out_buf[10];
- FLOAT32 *scratch_buffer;
- WORD32 last_frame=0;
- error=0;
- scratch_buffer= (FLOAT32*)p_obj_drc->pp_mem[1];
- input_buffer = (FLOAT32*)p_obj_drc->pp_mem[2];
- output_buffer = (FLOAT32*)p_obj_drc->pp_mem[3];
-
- input_buffer16 = (WORD16*)p_obj_drc->pp_mem[2];
- output_buffer16 = (WORD16*)p_obj_drc->pp_mem[3];
-
-
- if(p_obj_drc->p_state->ui_in_bytes<=0){
- p_obj_drc->p_state->ui_out_bytes=0;
- return 0;
- }
-
- if((p_obj_drc->p_state->ui_in_bytes/p_obj_drc->str_config.num_ch_in/(p_obj_drc->str_config.pcm_size>>3)) < (UWORD32)p_obj_drc->str_config.frame_size)
- last_frame=1;
-
+ WORD32 error, i, j, num_samples_per_channel;
+ FLOAT32 *input_buffer;
+ WORD16 *input_buffer16, *output_buffer16;
+ FLOAT32 *output_buffer;
+ FLOAT32 *audio_io_buf_real[10];
+ FLOAT32 *audio_io_buf_imag[10];
+ FLOAT32 *audio_in_out_buf[10];
+ FLOAT32 *scratch_buffer;
+ WORD32 last_frame = 0;
+ error = 0;
+ scratch_buffer = (FLOAT32 *)p_obj_drc->pp_mem[1];
+ input_buffer = (FLOAT32 *)p_obj_drc->pp_mem[2];
+ output_buffer = (FLOAT32 *)p_obj_drc->pp_mem[3];
+
+ input_buffer16 = (WORD16 *)p_obj_drc->pp_mem[2];
+ output_buffer16 = (WORD16 *)p_obj_drc->pp_mem[3];
+
+ if (p_obj_drc->p_state->ui_in_bytes <= 0) {
+ p_obj_drc->p_state->ui_out_bytes = 0;
+ return 0;
+ }
- for(i=0;i<p_obj_drc->str_config.num_ch_in;i++){
- audio_in_out_buf[i]=scratch_buffer;
- scratch_buffer=scratch_buffer+(p_obj_drc->str_config.frame_size+32);
- audio_io_buf_real[i]=scratch_buffer+(p_obj_drc->str_config.frame_size*p_obj_drc->str_config.num_ch_in+512);
- audio_io_buf_imag[i]=scratch_buffer+2*(p_obj_drc->str_config.frame_size*p_obj_drc->str_config.num_ch_in+512);;
- for(j=0;j<p_obj_drc->str_config.frame_size;j++){
- if(p_obj_drc->str_config.pcm_size==16){
- audio_in_out_buf[i][j]=((FLOAT32)input_buffer16[j*p_obj_drc->str_config.num_ch_in + i])/32767.0f;
+ if ((p_obj_drc->p_state->ui_in_bytes / p_obj_drc->str_config.num_ch_in /
+ (p_obj_drc->str_config.pcm_size >> 3)) <
+ (UWORD32)p_obj_drc->str_config.frame_size)
+ last_frame = 1;
+
+ for (i = 0; i < p_obj_drc->str_config.num_ch_in; i++) {
+ audio_in_out_buf[i] = scratch_buffer;
+ scratch_buffer = scratch_buffer + (p_obj_drc->str_config.frame_size + 32);
+ audio_io_buf_real[i] =
+ scratch_buffer +
+ (p_obj_drc->str_config.frame_size * p_obj_drc->str_config.num_ch_in +
+ 512);
+ audio_io_buf_imag[i] = scratch_buffer +
+ 2 * (p_obj_drc->str_config.frame_size *
+ p_obj_drc->str_config.num_ch_in +
+ 512);
+ ;
+ for (j = 0; j < p_obj_drc->str_config.frame_size; j++) {
+ if (p_obj_drc->str_config.pcm_size == 16) {
+ audio_in_out_buf[i][j] =
+ ((FLOAT32)input_buffer16[j * p_obj_drc->str_config.num_ch_in + i]) /
+ 32767.0f;
+ } else {
+ audio_in_out_buf[i][j] =
+ input_buffer[j * p_obj_drc->str_config.num_ch_in + i];
}
- else {
- audio_in_out_buf[i][j]=input_buffer[j*p_obj_drc->str_config.num_ch_in + i];
- }
- }
}
+ }
+ error = impd_process_drc_bitstream_dec_gain(
+ p_obj_drc->str_payload.pstr_bitstream_dec, p_obj_drc->pstr_bit_buf,
+ p_obj_drc->str_payload.pstr_drc_config,
+ p_obj_drc->str_payload.pstr_drc_gain,
+ &p_obj_drc->str_bit_handler
+ .it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs],
+ p_obj_drc->str_bit_handler.num_bytes_bs,
+ p_obj_drc->str_bit_handler.num_bits_offset_bs,
+ &p_obj_drc->str_bit_handler.num_bits_read_bs);
+
+ if (error > PROC_COMPLETE) return -1;
+
+ p_obj_drc->str_bit_handler.num_bytes_read_bs =
+ (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3);
+ p_obj_drc->str_bit_handler.num_bits_offset_bs =
+ (p_obj_drc->str_bit_handler.num_bits_read_bs & 7);
+ p_obj_drc->str_bit_handler.byte_index_bs +=
+ p_obj_drc->str_bit_handler.num_bytes_read_bs;
+ if (p_obj_drc->str_bit_handler.gain_stream_flag ==
+ 0) // ITTIAM: Flag for applying gain frame by frame
+ {
+ p_obj_drc->str_bit_handler.num_bytes_bs -=
+ p_obj_drc->str_bit_handler.num_bytes_read_bs;
+ }
+ if (p_obj_drc->str_config.bitstream_file_format ==
+ BITSTREAM_FILE_FORMAT_SPLIT) {
+ /* shift over fill-bits for frame byte alignment */
+ if (p_obj_drc->str_bit_handler.num_bits_offset_bs != 0) {
+ p_obj_drc->str_bit_handler.num_bits_read_bs =
+ p_obj_drc->str_bit_handler.num_bits_read_bs + 8 -
+ p_obj_drc->str_bit_handler.num_bits_offset_bs;
+ p_obj_drc->str_bit_handler.num_bytes_read_bs =
+ p_obj_drc->str_bit_handler.num_bytes_read_bs + 1;
+ p_obj_drc->str_bit_handler.num_bits_offset_bs = 0;
+ p_obj_drc->str_bit_handler.byte_index_bs =
+ p_obj_drc->str_bit_handler.byte_index_bs + 1;
+ if (p_obj_drc->str_bit_handler.gain_stream_flag ==
+ 0) // ITTIAM: Flag for applying gain frame by frame
+ {
+ p_obj_drc->str_bit_handler.num_bytes_bs =
+ p_obj_drc->str_bit_handler.num_bytes_bs - 1;
+ }
+ }
+ }
- error = impd_process_drc_bitstream_dec_gain(p_obj_drc->str_payload.pstr_bitstream_dec,
- p_obj_drc->pstr_bit_buf,
- p_obj_drc->str_payload.pstr_drc_config,
- p_obj_drc->str_payload.pstr_drc_gain,
- &p_obj_drc->str_bit_handler.it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs],
- p_obj_drc->str_bit_handler.num_bytes_bs,
- p_obj_drc->str_bit_handler.num_bits_offset_bs,
- &p_obj_drc->str_bit_handler.num_bits_read_bs);
+ for (i = 0; i < p_obj_drc->str_config.num_ch_in; i++) {
+ for (j = 0; j < p_obj_drc->str_config.frame_size; j += 64) {
+ process_qmf_ana_filt_bank(
+ p_obj_drc->str_payload.pstr_qmf_filter,
+ p_obj_drc->str_payload.pstr_qmf_filter->ana_buff +
+ i * 4 * p_obj_drc->str_config.frame_size,
+ &(audio_in_out_buf[i][j]), &(audio_io_buf_real[i][j]),
+ &(audio_io_buf_imag[i][j]));
+ }
+ }
+ error = impd_drc_process_freq_domain(
+ p_obj_drc->str_payload.pstr_gain_dec[0],
+ p_obj_drc->str_payload.pstr_drc_config,
+ p_obj_drc->str_payload.pstr_drc_gain, audio_io_buf_real,
+ audio_io_buf_imag, p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->loudness_normalization_gain_db,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output->boost,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output->compress,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->drc_characteristic_target);
+
+ if (error) return error;
+
+ if (p_obj_drc->str_payload.pstr_drc_sel_proc_output->target_channel_count <
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output->base_channel_count) {
+ error = impd_down_mix(p_obj_drc->str_payload.pstr_drc_sel_proc_output,
+ audio_io_buf_real, p_obj_drc->str_config.frame_size);
+ if (error) return error;
+
+ error = impd_down_mix(p_obj_drc->str_payload.pstr_drc_sel_proc_output,
+ audio_io_buf_imag, p_obj_drc->str_config.frame_size);
+ if (error) return error;
+ }
+ error = impd_drc_process_freq_domain(
+ p_obj_drc->str_payload.pstr_gain_dec[1],
+ p_obj_drc->str_payload.pstr_drc_config,
+ p_obj_drc->str_payload.pstr_drc_gain, audio_io_buf_real,
+ audio_io_buf_imag, p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->loudness_normalization_gain_db,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output->boost,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output->compress,
+ p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->drc_characteristic_target);
+ if (error) return -1;
+ for (i = 0; i < p_obj_drc->str_config.num_ch_out; i++) {
+ for (j = 0; j < p_obj_drc->str_config.frame_size; j += 64) {
+ process_qmf_syn_filt_bank(
+ p_obj_drc->str_payload.pstr_qmf_filter,
+ p_obj_drc->str_payload.pstr_qmf_filter->syn_buff +
+ i * 4 * p_obj_drc->str_config.frame_size,
+ &(audio_io_buf_real[i][j]), &(audio_io_buf_imag[i][j]),
+ &(audio_in_out_buf[i][j]));
+ }
+ }
+ if (p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->loudness_normalization_gain_db != 0.0f) {
+ FLOAT32 loudness_normalization_gain =
+ (FLOAT32)pow(10.0, p_obj_drc->str_payload.pstr_drc_sel_proc_output
+ ->loudness_normalization_gain_db /
+ 20.0);
+ for (i = 0; i < p_obj_drc->str_config.num_ch_out; i++) {
+ for (j = 0; j < p_obj_drc->str_config.frame_size; j++) {
+ audio_io_buf_real[i][j] *= loudness_normalization_gain;
+ audio_io_buf_imag[i][j] *= loudness_normalization_gain;
+ }
+ }
+ }
- if (error > PROC_COMPLETE) return -1;
+ num_samples_per_channel = p_obj_drc->str_config.frame_size;
- p_obj_drc->str_bit_handler.num_bytes_read_bs = (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3);
- p_obj_drc->str_bit_handler.num_bits_offset_bs = (p_obj_drc->str_bit_handler.num_bits_read_bs & 7);
- p_obj_drc->str_bit_handler.byte_index_bs += p_obj_drc->str_bit_handler.num_bytes_read_bs;
- if(p_obj_drc->str_bit_handler.gain_stream_flag==0) //ITTIAM: Flag for applying gain frame by frame
- {
- p_obj_drc->str_bit_handler.num_bytes_bs -= p_obj_drc->str_bit_handler.num_bytes_read_bs;
- }
- if (p_obj_drc->str_config.bitstream_file_format == BITSTREAM_FILE_FORMAT_SPLIT) {
- /* shift over fill-bits for frame byte alignment */
- if (p_obj_drc->str_bit_handler.num_bits_offset_bs != 0)
- {
- p_obj_drc->str_bit_handler.num_bits_read_bs = p_obj_drc->str_bit_handler.num_bits_read_bs + 8 - p_obj_drc->str_bit_handler.num_bits_offset_bs;
- p_obj_drc->str_bit_handler.num_bytes_read_bs = p_obj_drc->str_bit_handler.num_bytes_read_bs + 1;
- p_obj_drc->str_bit_handler.num_bits_offset_bs = 0;
- p_obj_drc->str_bit_handler.byte_index_bs = p_obj_drc->str_bit_handler.byte_index_bs + 1;
- if(p_obj_drc->str_bit_handler.gain_stream_flag==0) //ITTIAM: Flag for applying gain frame by frame
- {
- p_obj_drc->str_bit_handler.num_bytes_bs = p_obj_drc->str_bit_handler.num_bytes_bs - 1;
- }
- }
+ for (i = 0; i < p_obj_drc->str_config.num_ch_out; i++) {
+ for (j = 0; j < p_obj_drc->str_config.frame_size; j++) {
+ if (p_obj_drc->str_config.pcm_size == 16) {
+ output_buffer16[j * p_obj_drc->str_config.num_ch_out + i] =
+ (WORD16)(audio_in_out_buf[i][j] * 32767.0f);
+ } else {
+ output_buffer[j * p_obj_drc->str_config.num_ch_out + i] =
+ audio_in_out_buf[i][j];
+ }
}
+ }
+ p_obj_drc->p_state->ui_out_bytes =
+ p_obj_drc->str_config.num_ch_out *
+ (p_obj_drc->p_state->ui_in_bytes / p_obj_drc->str_config.num_ch_in);
+
+ if (p_obj_drc->str_config.bitstream_file_format !=
+ BITSTREAM_FILE_FORMAT_SPLIT) {
+ error = impd_process_drc_bitstream_dec(
+ p_obj_drc->str_payload.pstr_bitstream_dec, p_obj_drc->pstr_bit_buf,
+ p_obj_drc->str_payload.pstr_drc_config,
+ p_obj_drc->str_payload.pstr_loudness_info,
+ &p_obj_drc->str_bit_handler
+ .it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs],
+ p_obj_drc->str_bit_handler.num_bytes_bs,
+ p_obj_drc->str_bit_handler.num_bits_offset_bs,
+ &p_obj_drc->str_bit_handler.num_bits_read_bs);
- for (i=0; i < p_obj_drc->str_config.num_ch_in; i++) {
- for (j=0; j < p_obj_drc->str_config.frame_size; j += 64) {
-
- process_qmf_ana_filt_bank(p_obj_drc->str_payload.pstr_qmf_filter,
- p_obj_drc->str_payload.pstr_qmf_filter->ana_buff+i*4*p_obj_drc->str_config.frame_size,
- &(audio_in_out_buf[i][j]),
- &(audio_io_buf_real[i][j]),
- &(audio_io_buf_imag[i][j]));
-
-
- }
- }
- error = impd_drc_process_freq_domain(p_obj_drc->str_payload.pstr_gain_dec[0],
- p_obj_drc->str_payload.pstr_drc_config,
- p_obj_drc->str_payload.pstr_drc_gain,
- audio_io_buf_real,
- audio_io_buf_imag,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->loudness_normalization_gain_db,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->boost,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->compress,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->drc_characteristic_target);
-
-
- if (error) return error;
-
- if(p_obj_drc->str_payload.pstr_drc_sel_proc_output->target_channel_count<p_obj_drc->str_payload.pstr_drc_sel_proc_output->base_channel_count){
- error = impd_down_mix(p_obj_drc->str_payload.pstr_drc_sel_proc_output,
- audio_io_buf_real,
- p_obj_drc->str_config.frame_size);
- if (error) return error;
-
- error = impd_down_mix(p_obj_drc->str_payload.pstr_drc_sel_proc_output,
- audio_io_buf_imag,
- p_obj_drc->str_config.frame_size);
- if (error) return error;
- }
-
- error = impd_drc_process_freq_domain(p_obj_drc->str_payload.pstr_gain_dec[1],
- p_obj_drc->str_payload.pstr_drc_config,
- p_obj_drc->str_payload.pstr_drc_gain,
- audio_io_buf_real,
- audio_io_buf_imag,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->loudness_normalization_gain_db,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->boost,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->compress,
- p_obj_drc->str_payload.pstr_drc_sel_proc_output->drc_characteristic_target);
- if (error) return -1;
- for (i=0; i < p_obj_drc->str_config.num_ch_out; i++) {
- for (j=0; j < p_obj_drc->str_config.frame_size; j += 64) {
-
- process_qmf_syn_filt_bank(p_obj_drc->str_payload.pstr_qmf_filter,
- p_obj_drc->str_payload.pstr_qmf_filter->syn_buff+i*4*p_obj_drc->str_config.frame_size,
- &(audio_io_buf_real[i][j]),
- &(audio_io_buf_imag[i][j]),
- &(audio_in_out_buf[i][j]));
-
-
- }
- }
-
- if (p_obj_drc->str_payload.pstr_drc_sel_proc_output->loudness_normalization_gain_db != 0.0f)
- {
- FLOAT32 loudness_normalization_gain = (FLOAT32)pow(10.0,p_obj_drc->str_payload.pstr_drc_sel_proc_output->loudness_normalization_gain_db/20.0);
- for (i=0; i < p_obj_drc->str_config.num_ch_out; i++) {
- for (j=0; j <p_obj_drc->str_config. frame_size; j++) {
- audio_io_buf_real[i][j] *= loudness_normalization_gain;
- audio_io_buf_imag[i][j] *= loudness_normalization_gain;
-
- }
- }
- }
-
-
-
- num_samples_per_channel = p_obj_drc->str_config.frame_size;
-
- for (i=0; i < p_obj_drc->str_config.num_ch_out; i++) {
- for (j=0; j < p_obj_drc->str_config.frame_size; j++) {
- if(p_obj_drc->str_config.pcm_size==16){
- output_buffer16[j*p_obj_drc->str_config.num_ch_out + i] = (WORD16)(audio_in_out_buf[i][j]*32767.0f);
- }
- else {
- output_buffer[j*p_obj_drc->str_config.num_ch_out + i] = audio_in_out_buf[i][j];
-
- }
- }
- }
- p_obj_drc->p_state->ui_out_bytes=p_obj_drc->str_config.num_ch_out*(p_obj_drc->p_state->ui_in_bytes/p_obj_drc->str_config.num_ch_in);
-
- if (p_obj_drc->str_config.bitstream_file_format != BITSTREAM_FILE_FORMAT_SPLIT) {
- error = impd_process_drc_bitstream_dec(p_obj_drc->str_payload.pstr_bitstream_dec,
- p_obj_drc->pstr_bit_buf,
- p_obj_drc->str_payload.pstr_drc_config,
- p_obj_drc->str_payload.pstr_loudness_info,
- &p_obj_drc->str_bit_handler.it_bit_buf[p_obj_drc->str_bit_handler.byte_index_bs],
- p_obj_drc->str_bit_handler.num_bytes_bs,
- p_obj_drc->str_bit_handler.num_bits_offset_bs,
- &p_obj_drc->str_bit_handler.num_bits_read_bs);
-
- if (error > PROC_COMPLETE)
- return -1;
-
- p_obj_drc->str_bit_handler.num_bytes_read_bs = (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3);
- p_obj_drc->str_bit_handler.num_bits_offset_bs = (p_obj_drc->str_bit_handler.num_bits_read_bs & 7);
- p_obj_drc->str_bit_handler.byte_index_bs += p_obj_drc->str_bit_handler.num_bytes_read_bs;
- p_obj_drc->str_bit_handler.num_bytes_bs -= p_obj_drc->str_bit_handler.num_bytes_read_bs;
-
-}
+ if (error > PROC_COMPLETE) return -1;
+ p_obj_drc->str_bit_handler.num_bytes_read_bs =
+ (p_obj_drc->str_bit_handler.num_bits_read_bs >> 3);
+ p_obj_drc->str_bit_handler.num_bits_offset_bs =
+ (p_obj_drc->str_bit_handler.num_bits_read_bs & 7);
+ p_obj_drc->str_bit_handler.byte_index_bs +=
+ p_obj_drc->str_bit_handler.num_bytes_read_bs;
+ p_obj_drc->str_bit_handler.num_bytes_bs -=
+ p_obj_drc->str_bit_handler.num_bytes_read_bs;
+ }
- return error;
+ return error;
}
-
diff --git a/decoder/drc_src/impd_drc_multi_band.h b/decoder/drc_src/impd_drc_multi_band.h
index 0352ca9..4d51d80 100644
--- a/decoder/drc_src/impd_drc_multi_band.h
+++ b/decoder/drc_src/impd_drc_multi_band.h
@@ -20,51 +20,45 @@
#ifndef IMPD_DRC_MULTI_BAND_H
#define IMPD_DRC_MULTI_BAND_H
-#define DRC_SUBBAND_COUNT_WITH_AUDIO_CODEC_FILTERBANK_MAX FILTER_BANK_PARAMETER_COUNT
+#define DRC_SUBBAND_COUNT_WITH_AUDIO_CODEC_FILTERBANK_MAX \
+ FILTER_BANK_PARAMETER_COUNT
#ifdef __cplusplus
-extern "C"
-{
+extern "C" {
#endif
typedef struct {
- FLOAT32 overlap_weight[AUDIO_CODEC_SUBBAND_COUNT_MAX];
+ FLOAT32 overlap_weight[AUDIO_CODEC_SUBBAND_COUNT_MAX];
} ia_band_overlap_params_struct;
typedef struct {
- ia_band_overlap_params_struct str_band_overlap_params[BAND_COUNT_MAX];
+ ia_band_overlap_params_struct str_band_overlap_params[BAND_COUNT_MAX];
} ia_group_overlap_params_struct;
typedef struct {
- ia_group_overlap_params_struct str_group_overlap_params[CHANNEL_GROUP_COUNT_MAX];
+ ia_group_overlap_params_struct
+ str_group_overlap_params[CHANNEL_GROUP_COUNT_MAX];
} ia_overlap_params_struct;
-
-
WORD32
-impd_fcenter_norm_sb_init(WORD32 num_subbands,
- FLOAT32* fcenter_norm_subband);
+impd_fcenter_norm_sb_init(WORD32 num_subbands, FLOAT32* fcenter_norm_subband);
WORD32
-impd_generate_slope (WORD32 num_subbands,
- FLOAT32* fcenter_norm_subband,
- FLOAT32 fcross_norm_lo,
- FLOAT32 fcross_norm_hi,
- FLOAT32* response);
+impd_generate_slope(WORD32 num_subbands, FLOAT32* fcenter_norm_subband,
+ FLOAT32 fcross_norm_lo, FLOAT32 fcross_norm_hi,
+ FLOAT32* response);
WORD32
-impd_generate_overlap_weights (WORD32 num_drc_bands,
- WORD32 drc_band_type,
- ia_gain_params_struct* gain_params,
- WORD32 dec_subband_count,
- ia_group_overlap_params_struct* pstr_group_overlap_params);
+impd_generate_overlap_weights(
+ WORD32 num_drc_bands, WORD32 drc_band_type,
+ ia_gain_params_struct* gain_params, WORD32 dec_subband_count,
+ ia_group_overlap_params_struct* pstr_group_overlap_params);
WORD32
-impd_init_overlap_weight ( ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc,
- ia_drc_instructions_struct* str_drc_instruction_str,
- WORD32 sub_band_domain_mode,
- ia_overlap_params_struct* pstr_overlap_params);
-
+impd_init_overlap_weight(
+ ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc,
+ ia_drc_instructions_struct* str_drc_instruction_str,
+ WORD32 sub_band_domain_mode, ia_overlap_params_struct* pstr_overlap_params);
#ifdef __cplusplus
}
diff --git a/decoder/drc_src/impd_drc_multiband.c b/decoder/drc_src/impd_drc_multiband.c
index 9acb747..fc60745 100644
--- a/decoder/drc_src/impd_drc_multiband.c
+++ b/decoder/drc_src/impd_drc_multiband.c
@@ -30,157 +30,139 @@
#include "impd_drc_rom.h"
IA_ERRORCODE impd_fcenter_norm_sb_init(WORD32 num_subbands,
- FLOAT32* fcenter_norm_subband)
-{
- WORD32 s;
- for (s=0; s<num_subbands; s++) {
- fcenter_norm_subband[s] = (s + 0.5f) / (2.0f * num_subbands);
- }
- return (0);
+ FLOAT32* fcenter_norm_subband) {
+ WORD32 s;
+ for (s = 0; s < num_subbands; s++) {
+ fcenter_norm_subband[s] = (s + 0.5f) / (2.0f * num_subbands);
+ }
+ return (0);
}
-IA_ERRORCODE impd_generate_slope (WORD32 num_sub_bands,
- FLOAT32* fcenter_norm_subband,
- FLOAT32 fcross_norm_lo,
- FLOAT32 fcross_norm_hi,
- FLOAT32* response)
-{
- WORD32 i;
- FLOAT32 filter_slope =-24.0f;
- FLOAT32 inv_log10_2 =3.32192809f;
- FLOAT32 norm = 0.05f * filter_slope * inv_log10_2;
+IA_ERRORCODE impd_generate_slope(WORD32 num_sub_bands,
+ FLOAT32* fcenter_norm_subband,
+ FLOAT32 fcross_norm_lo, FLOAT32 fcross_norm_hi,
+ FLOAT32* response) {
+ WORD32 i;
+ FLOAT32 filter_slope = -24.0f;
+ FLOAT32 inv_log10_2 = 3.32192809f;
+ FLOAT32 norm = 0.05f * filter_slope * inv_log10_2;
- for (i=0; i<num_sub_bands; i++)
- {
- if (fcenter_norm_subband[i] < fcross_norm_lo)
- {
- response[i] = (FLOAT32)pow (10.0, norm * log10(fcross_norm_lo / fcenter_norm_subband[i]));
- }
- else if (fcenter_norm_subband[i] < fcross_norm_hi)
- {
- response[i] = 1.0f;
- }
- else
- {
- response[i] = (FLOAT32)pow (10.0, norm * log10(fcenter_norm_subband[i] / fcross_norm_hi));
- }
+ for (i = 0; i < num_sub_bands; i++) {
+ if (fcenter_norm_subband[i] < fcross_norm_lo) {
+ response[i] = (FLOAT32)pow(
+ 10.0, norm * log10(fcross_norm_lo / fcenter_norm_subband[i]));
+ } else if (fcenter_norm_subband[i] < fcross_norm_hi) {
+ response[i] = 1.0f;
+ } else {
+ response[i] = (FLOAT32)pow(
+ 10.0, norm * log10(fcenter_norm_subband[i] / fcross_norm_hi));
}
- return (0);
+ }
+ return (0);
}
+IA_ERRORCODE impd_generate_overlap_weights(
+ WORD32 num_drc_bands, WORD32 drc_band_type,
+ ia_gain_params_struct* gain_params, WORD32 dec_subband_count,
+ ia_group_overlap_params_struct* pstr_group_overlap_params) {
+ FLOAT32 fcenter_norm_subband[AUDIO_CODEC_SUBBAND_COUNT_MAX];
+ FLOAT32 w_norm[AUDIO_CODEC_SUBBAND_COUNT_MAX];
+ FLOAT32 fcross_norm_lo, fcross_norm_hi;
+ WORD32 err, b, s, start_subband_index = 0, stop_sub_band_index = 0;
+ err = impd_fcenter_norm_sb_init(dec_subband_count, fcenter_norm_subband);
-IA_ERRORCODE impd_generate_overlap_weights (WORD32 num_drc_bands,
- WORD32 drc_band_type,
- ia_gain_params_struct* gain_params,
- WORD32 dec_subband_count,
- ia_group_overlap_params_struct* pstr_group_overlap_params)
-{
- FLOAT32 fcenter_norm_subband[AUDIO_CODEC_SUBBAND_COUNT_MAX];
- FLOAT32 w_norm[AUDIO_CODEC_SUBBAND_COUNT_MAX];
- FLOAT32 fcross_norm_lo, fcross_norm_hi;
- WORD32 err, b, s, start_subband_index = 0, stop_sub_band_index = 0;
- err = impd_fcenter_norm_sb_init(dec_subband_count, fcenter_norm_subband);
-
- if (drc_band_type == 1) {
- fcross_norm_lo = 0.0f;
- for (b=0; b<num_drc_bands; b++)
- {
- if (b<num_drc_bands - 1)
- {
- fcross_norm_hi = normal_cross_freq[gain_params[b+1].crossover_freq_idx].f_cross_norm;
- }
- else
- {
- fcross_norm_hi = 0.5f;
- }
- impd_generate_slope (dec_subband_count,
- fcenter_norm_subband,
- fcross_norm_lo,
- fcross_norm_hi,
- pstr_group_overlap_params->str_band_overlap_params[b].overlap_weight);
-
- fcross_norm_lo = fcross_norm_hi;
- }
- for (s=0; s<dec_subband_count; s++)
- {
- w_norm[s] = pstr_group_overlap_params->str_band_overlap_params[0].overlap_weight[s];
- for (b=1; b<num_drc_bands; b++)
- {
- w_norm[s] += pstr_group_overlap_params->str_band_overlap_params[b].overlap_weight[s];
- }
- }
+ if (drc_band_type == 1) {
+ fcross_norm_lo = 0.0f;
+ for (b = 0; b < num_drc_bands; b++) {
+ if (b < num_drc_bands - 1) {
+ fcross_norm_hi =
+ normal_cross_freq[gain_params[b + 1].crossover_freq_idx]
+ .f_cross_norm;
+ } else {
+ fcross_norm_hi = 0.5f;
+ }
+ impd_generate_slope(
+ dec_subband_count, fcenter_norm_subband, fcross_norm_lo,
+ fcross_norm_hi,
+ pstr_group_overlap_params->str_band_overlap_params[b].overlap_weight);
- for (s=0; s<dec_subband_count; s++)
- {
- for (b=0; b<num_drc_bands; b++)
- {
- pstr_group_overlap_params->str_band_overlap_params[b].overlap_weight[s] /= w_norm[s];
- }
- }
- } else {
- start_subband_index = 0;
- for (b=0; b<num_drc_bands; b++)
- {
- if (b < num_drc_bands-1)
- {
- stop_sub_band_index = gain_params[b+1].start_subband_index-1;
- }
- else
- {
- stop_sub_band_index = dec_subband_count-1;
- }
- for (s=0; s<dec_subband_count; s++)
- {
- if (s >= start_subband_index && s <= stop_sub_band_index)
- {
- pstr_group_overlap_params->str_band_overlap_params[b].overlap_weight[s] = 1.0;
- }
- else
- {
- pstr_group_overlap_params->str_band_overlap_params[b].overlap_weight[s] = 0.0;
- }
- }
- start_subband_index = stop_sub_band_index+1;
- }
+ fcross_norm_lo = fcross_norm_hi;
}
-
- return (0);
-}
-
-IA_ERRORCODE impd_init_overlap_weight ( ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc,
- ia_drc_instructions_struct* str_drc_instruction_str,
- WORD32 sub_band_domain_mode,
- ia_overlap_params_struct* pstr_overlap_params)
-{
- WORD32 err = 0, g;
- WORD32 dec_subband_count = 0;
- switch (sub_band_domain_mode) {
- case SUBBAND_DOMAIN_MODE_QMF64:
- dec_subband_count = AUDIO_CODEC_SUBBAND_COUNT_QMF64;
- break;
- case SUBBAND_DOMAIN_MODE_QMF71:
- dec_subband_count = AUDIO_CODEC_SUBBAND_COUNT_QMF71;
- break;
- case SUBBAND_DOMAIN_MODE_STFT256:
- dec_subband_count = AUDIO_CODEC_SUBBAND_COUNT_STFT256;
- break;
+ for (s = 0; s < dec_subband_count; s++) {
+ w_norm[s] = pstr_group_overlap_params->str_band_overlap_params[0]
+ .overlap_weight[s];
+ for (b = 1; b < num_drc_bands; b++) {
+ w_norm[s] += pstr_group_overlap_params->str_band_overlap_params[b]
+ .overlap_weight[s];
+ }
}
- for (g=0; g<str_drc_instruction_str->num_drc_ch_groups; g++)
- {
- if (str_drc_instruction_str->band_count_of_ch_group[g] > 1)
- {
- err = impd_generate_overlap_weights(str_drc_instruction_str->band_count_of_ch_group[g],
- str_p_loc_drc_coefficients_uni_drc->gain_set_params[str_drc_instruction_str->gain_set_index_for_channel_group[g]].drc_band_type,
- str_p_loc_drc_coefficients_uni_drc->gain_set_params[str_drc_instruction_str->gain_set_index_for_channel_group[g]].gain_params,
- dec_subband_count,
- &(pstr_overlap_params->str_group_overlap_params[g]));
- if (err) return (err);
+ for (s = 0; s < dec_subband_count; s++) {
+ for (b = 0; b < num_drc_bands; b++) {
+ pstr_group_overlap_params->str_band_overlap_params[b]
+ .overlap_weight[s] /= w_norm[s];
+ }
+ }
+ } else {
+ start_subband_index = 0;
+ for (b = 0; b < num_drc_bands; b++) {
+ if (b < num_drc_bands - 1) {
+ stop_sub_band_index = gain_params[b + 1].start_subband_index - 1;
+ } else {
+ stop_sub_band_index = dec_subband_count - 1;
+ }
+ for (s = 0; s < dec_subband_count; s++) {
+ if (s >= start_subband_index && s <= stop_sub_band_index) {
+ pstr_group_overlap_params->str_band_overlap_params[b]
+ .overlap_weight[s] = 1.0;
+ } else {
+ pstr_group_overlap_params->str_band_overlap_params[b]
+ .overlap_weight[s] = 0.0;
}
+ }
+ start_subband_index = stop_sub_band_index + 1;
}
+ }
- return (0);
+ return (0);
}
+IA_ERRORCODE impd_init_overlap_weight(
+ ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc,
+ ia_drc_instructions_struct* str_drc_instruction_str,
+ WORD32 sub_band_domain_mode,
+ ia_overlap_params_struct* pstr_overlap_params) {
+ WORD32 err = 0, g;
+ WORD32 dec_subband_count = 0;
+ switch (sub_band_domain_mode) {
+ case SUBBAND_DOMAIN_MODE_QMF64:
+ dec_subband_count = AUDIO_CODEC_SUBBAND_COUNT_QMF64;
+ break;
+ case SUBBAND_DOMAIN_MODE_QMF71:
+ dec_subband_count = AUDIO_CODEC_SUBBAND_COUNT_QMF71;
+ break;
+ case SUBBAND_DOMAIN_MODE_STFT256:
+ dec_subband_count = AUDIO_CODEC_SUBBAND_COUNT_STFT256;
+ break;
+ }
+ for (g = 0; g < str_drc_instruction_str->num_drc_ch_groups; g++) {
+ if (str_drc_instruction_str->band_count_of_ch_group[g] > 1) {
+ err = impd_generate_overlap_weights(
+ str_drc_instruction_str->band_count_of_ch_group[g],
+ str_p_loc_drc_coefficients_uni_drc
+ ->gain_set_params[str_drc_instruction_str
+ ->gain_set_index_for_channel_group[g]]
+ .drc_band_type,
+ str_p_loc_drc_coefficients_uni_drc
+ ->gain_set_params[str_drc_instruction_str
+ ->gain_set_index_for_channel_group[g]]
+ .gain_params,
+ dec_subband_count,
+ &(pstr_overlap_params->str_group_overlap_params[g]));
+ if (err) return (err);
+ }
+ }
+ return (0);
+}
diff --git a/decoder/drc_src/impd_drc_parametric_dec.c b/decoder/drc_src/impd_drc_parametric_dec.c
index 4e37d94..5b3cb4e 100644
--- a/decoder/drc_src/impd_drc_parametric_dec.c
+++ b/decoder/drc_src/impd_drc_parametric_dec.c
@@ -29,1003 +29,1084 @@
#include "impd_drc_filter_bank.h"
#include "impd_drc_rom.h"
-
#define PI 3.14159265f
#ifndef max
-#define max(a, b) (((a) > (b)) ? (a) : (b))
+#define max(a, b) (((a) > (b)) ? (a) : (b))
#endif
#ifndef min
-#define min(a, b) (((a) < (b)) ? (a) : (b))
+#define min(a, b) (((a) < (b)) ? (a) : (b))
#endif
+WORD32 impd_init_parametric_drc(
+ WORD32 drc_frame_size, WORD32 sampling_rate, WORD32 sub_band_domain_mode,
+ ia_parametric_drc_params_struct* p_parametricdrc_params) {
+ WORD32 sub_band_count_tbl[4] = {0, 64, 71, 256};
+ p_parametricdrc_params->drc_frame_size = drc_frame_size;
+ p_parametricdrc_params->sampling_rate = sampling_rate;
+ p_parametricdrc_params->sub_band_domain_mode = sub_band_domain_mode;
-WORD32 impd_init_parametric_drc( WORD32 drc_frame_size,
- WORD32 sampling_rate,
- WORD32 sub_band_domain_mode,
- ia_parametric_drc_params_struct *p_parametricdrc_params)
-{
-
- WORD32 sub_band_count_tbl[4]={0,64,71,256};
- p_parametricdrc_params->drc_frame_size = drc_frame_size;
- p_parametricdrc_params->sampling_rate = sampling_rate;
- p_parametricdrc_params->sub_band_domain_mode = sub_band_domain_mode;
+ p_parametricdrc_params->sub_band_count =
+ sub_band_count_tbl[sub_band_domain_mode];
- p_parametricdrc_params->sub_band_count=sub_band_count_tbl[sub_band_domain_mode];
-
- return 0;
+ return 0;
}
-WORD32 impd_init_parametric_drc_feed_fwd(ia_drc_config* pstr_drc_config,
- WORD32 instance_idx,
- WORD32 ch_count_from_dwnmix_id,
- ia_parametric_drc_params_struct* p_parametricdrc_params)
-{
- WORD32 err = 0, i = 0;
-
- WORD32 parametric_drc_idx = p_parametricdrc_params->parametric_drc_idx[instance_idx];
- WORD32 gain_set_index = p_parametricdrc_params->gain_set_index[instance_idx];
- WORD32* channel_map = p_parametricdrc_params->channel_map[instance_idx];
-
- ia_drc_coeff_parametric_drc_struct* hDrcCoefficientsParametricDrcBs = &(pstr_drc_config->str_drc_config_ext.str_drc_coeff_param_drc);
- ia_parametric_drc_type_feed_forward_struct* hParametricDrcTypeFeedForwardBs = &(pstr_drc_config->str_drc_config_ext.str_parametric_drc_instructions[parametric_drc_idx].str_parametric_drc_type_feed_forward);
- ia_parametric_drc_type_ff_params_struct* pstr_parametric_ffwd_type_drc_params = &(p_parametricdrc_params->str_parametric_drc_instance_params[instance_idx].str_parametric_drc_type_ff_params);
-
- /* level estimation */
- pstr_parametric_ffwd_type_drc_params->frame_size = p_parametricdrc_params->parametric_drc_frame_size;
- pstr_parametric_ffwd_type_drc_params->sub_band_domain_mode = p_parametricdrc_params->sub_band_domain_mode;
- pstr_parametric_ffwd_type_drc_params->sub_band_count = p_parametricdrc_params->sub_band_count;
- pstr_parametric_ffwd_type_drc_params->sub_band_compensation_type = 0;
-
- if (pstr_parametric_ffwd_type_drc_params->sub_band_domain_mode == SUBBAND_DOMAIN_MODE_QMF64)
- {
- if (p_parametricdrc_params->sampling_rate == 48000)
- {
- pstr_parametric_ffwd_type_drc_params->sub_band_compensation_type = 1;
- }
- else
- {
- /* support of other sampling rates than 48000 might be missing */
- return UNEXPECTED_ERROR;
- }
- }
-
- pstr_parametric_ffwd_type_drc_params->audio_num_chan = p_parametricdrc_params->audio_num_chan;
- pstr_parametric_ffwd_type_drc_params->level_estim_k_weighting_type = hParametricDrcTypeFeedForwardBs->level_estim_k_weighting_type;
- pstr_parametric_ffwd_type_drc_params->level_estim_integration_time = hParametricDrcTypeFeedForwardBs->level_estim_integration_time;
- pstr_parametric_ffwd_type_drc_params->level_estim_frame_index = 0;
- pstr_parametric_ffwd_type_drc_params->level_estim_frame_count = hParametricDrcTypeFeedForwardBs->level_estim_integration_time/pstr_parametric_ffwd_type_drc_params->frame_size;
-
-
- memset(pstr_parametric_ffwd_type_drc_params->level,0,PARAM_DRC_TYPE_FF_LEVEL_ESTIM_FRAME_COUNT_MAX*sizeof(FLOAT32));
-
- if (ch_count_from_dwnmix_id != 0)
- {
-
- memcpy(pstr_parametric_ffwd_type_drc_params->level_estim_ch_weight,
- hDrcCoefficientsParametricDrcBs->str_parametric_drc_gain_set_params[gain_set_index].level_estim_ch_weight,ch_count_from_dwnmix_id*sizeof(FLOAT32));
- }
- else
- {
-
- for (i=0; i<pstr_parametric_ffwd_type_drc_params->audio_num_chan; i++)
- {
- pstr_parametric_ffwd_type_drc_params->level_estim_ch_weight[i] = (FLOAT32)channel_map[i];
- }
-
- }
-
- if (pstr_parametric_ffwd_type_drc_params->sub_band_domain_mode==SUBBAND_DOMAIN_MODE_OFF)
- {
- err = impd_init_lvl_est_filt_time(pstr_parametric_ffwd_type_drc_params->level_estim_k_weighting_type,
- p_parametricdrc_params->sampling_rate,
- &pstr_parametric_ffwd_type_drc_params->pre_filt_coeff,
- &pstr_parametric_ffwd_type_drc_params->rlb_filt_coeff);
-
- if (err)
- return (err);
+WORD32 impd_init_parametric_drc_feed_fwd(
+ ia_drc_config* pstr_drc_config, WORD32 instance_idx,
+ WORD32 ch_count_from_dwnmix_id,
+ ia_parametric_drc_params_struct* p_parametricdrc_params) {
+ WORD32 err = 0, i = 0;
+
+ WORD32 parametric_drc_idx =
+ p_parametricdrc_params->parametric_drc_idx[instance_idx];
+ WORD32 gain_set_index = p_parametricdrc_params->gain_set_index[instance_idx];
+ WORD32* channel_map = p_parametricdrc_params->channel_map[instance_idx];
+
+ ia_drc_coeff_parametric_drc_struct* hDrcCoefficientsParametricDrcBs =
+ &(pstr_drc_config->str_drc_config_ext.str_drc_coeff_param_drc);
+ ia_parametric_drc_type_feed_forward_struct* hParametricDrcTypeFeedForwardBs =
+ &(pstr_drc_config->str_drc_config_ext
+ .str_parametric_drc_instructions[parametric_drc_idx]
+ .str_parametric_drc_type_feed_forward);
+ ia_parametric_drc_type_ff_params_struct*
+ pstr_parametric_ffwd_type_drc_params =
+ &(p_parametricdrc_params
+ ->str_parametric_drc_instance_params[instance_idx]
+ .str_parametric_drc_type_ff_params);
+
+ /* level estimation */
+ pstr_parametric_ffwd_type_drc_params->frame_size =
+ p_parametricdrc_params->parametric_drc_frame_size;
+ pstr_parametric_ffwd_type_drc_params->sub_band_domain_mode =
+ p_parametricdrc_params->sub_band_domain_mode;
+ pstr_parametric_ffwd_type_drc_params->sub_band_count =
+ p_parametricdrc_params->sub_band_count;
+ pstr_parametric_ffwd_type_drc_params->sub_band_compensation_type = 0;
+
+ if (pstr_parametric_ffwd_type_drc_params->sub_band_domain_mode ==
+ SUBBAND_DOMAIN_MODE_QMF64) {
+ if (p_parametricdrc_params->sampling_rate == 48000) {
+ pstr_parametric_ffwd_type_drc_params->sub_band_compensation_type = 1;
+ } else {
+ /* support of other sampling rates than 48000 might be missing */
+ return UNEXPECTED_ERROR;
}
- else
- {
- err = impd_init_lvl_est_filt_subband(pstr_parametric_ffwd_type_drc_params->level_estim_k_weighting_type,
- p_parametricdrc_params->sampling_rate,
- p_parametricdrc_params->sub_band_domain_mode,
- p_parametricdrc_params->sub_band_count,
- pstr_parametric_ffwd_type_drc_params->sub_band_compensation_type,
- pstr_parametric_ffwd_type_drc_params->weighting_filt,
- &pstr_parametric_ffwd_type_drc_params->filt_coeff_subband);
-
- if (err)
- return (err);
+ }
+
+ pstr_parametric_ffwd_type_drc_params->audio_num_chan =
+ p_parametricdrc_params->audio_num_chan;
+ pstr_parametric_ffwd_type_drc_params->level_estim_k_weighting_type =
+ hParametricDrcTypeFeedForwardBs->level_estim_k_weighting_type;
+ pstr_parametric_ffwd_type_drc_params->level_estim_integration_time =
+ hParametricDrcTypeFeedForwardBs->level_estim_integration_time;
+ pstr_parametric_ffwd_type_drc_params->level_estim_frame_index = 0;
+ pstr_parametric_ffwd_type_drc_params->level_estim_frame_count =
+ hParametricDrcTypeFeedForwardBs->level_estim_integration_time /
+ pstr_parametric_ffwd_type_drc_params->frame_size;
+
+ memset(pstr_parametric_ffwd_type_drc_params->level, 0,
+ PARAM_DRC_TYPE_FF_LEVEL_ESTIM_FRAME_COUNT_MAX * sizeof(FLOAT32));
+
+ if (ch_count_from_dwnmix_id != 0) {
+ memcpy(pstr_parametric_ffwd_type_drc_params->level_estim_ch_weight,
+ hDrcCoefficientsParametricDrcBs
+ ->str_parametric_drc_gain_set_params[gain_set_index]
+ .level_estim_ch_weight,
+ ch_count_from_dwnmix_id * sizeof(FLOAT32));
+ } else {
+ for (i = 0; i < pstr_parametric_ffwd_type_drc_params->audio_num_chan; i++) {
+ pstr_parametric_ffwd_type_drc_params->level_estim_ch_weight[i] =
+ (FLOAT32)channel_map[i];
}
+ }
- pstr_parametric_ffwd_type_drc_params->node_count = hParametricDrcTypeFeedForwardBs->node_count;
-
-
- memcpy(pstr_parametric_ffwd_type_drc_params->node_level,hParametricDrcTypeFeedForwardBs->node_level,pstr_parametric_ffwd_type_drc_params->node_count*sizeof(WORD32));
- memcpy(pstr_parametric_ffwd_type_drc_params->node_gain,hParametricDrcTypeFeedForwardBs->node_gain,pstr_parametric_ffwd_type_drc_params->node_count*sizeof(WORD32));
-
- pstr_parametric_ffwd_type_drc_params->ref_level_parametric_drc = hDrcCoefficientsParametricDrcBs->str_parametric_drc_gain_set_params[gain_set_index].drc_input_loudness;
-
- {
- WORD32 gain_smooth_attack_time_fast = hParametricDrcTypeFeedForwardBs->gain_smooth_attack_time_fast;
- WORD32 gain_smooth_release_time_fast = hParametricDrcTypeFeedForwardBs->gain_smooth_release_time_fast;
- WORD32 gain_smooth_attack_time_slow = hParametricDrcTypeFeedForwardBs->gain_smooth_attack_time_slow;
- WORD32 gain_smooth_release_time_slow = hParametricDrcTypeFeedForwardBs->gain_smooth_release_time_slow;
- WORD32 gain_smooth_hold_off = hParametricDrcTypeFeedForwardBs->gain_smooth_hold_off;
- WORD32 sampling_rate = p_parametricdrc_params->sampling_rate;
- WORD32 parametric_drc_frame_size = p_parametricdrc_params->parametric_drc_frame_size;
+ if (pstr_parametric_ffwd_type_drc_params->sub_band_domain_mode ==
+ SUBBAND_DOMAIN_MODE_OFF) {
+ err = impd_init_lvl_est_filt_time(
+ pstr_parametric_ffwd_type_drc_params->level_estim_k_weighting_type,
+ p_parametricdrc_params->sampling_rate,
+ &pstr_parametric_ffwd_type_drc_params->pre_filt_coeff,
+ &pstr_parametric_ffwd_type_drc_params->rlb_filt_coeff);
- pstr_parametric_ffwd_type_drc_params->gain_smooth_attack_alpha_fast = 1 - (FLOAT32)exp(-1.0 * parametric_drc_frame_size / (gain_smooth_attack_time_fast * sampling_rate * 0.001));
- pstr_parametric_ffwd_type_drc_params->gain_smooth_rel_alpha_fast = 1 - (FLOAT32)exp(-1.0 * parametric_drc_frame_size / (gain_smooth_release_time_fast * sampling_rate * 0.001));
- pstr_parametric_ffwd_type_drc_params->gain_smooth_attack_alpha_slow = 1 - (FLOAT32)exp(-1.0 * parametric_drc_frame_size / (gain_smooth_attack_time_slow * sampling_rate * 0.001));
- pstr_parametric_ffwd_type_drc_params->gain_smooth_rel_alpha_slow = 1 - (FLOAT32)exp(-1.0 * parametric_drc_frame_size / (gain_smooth_release_time_slow * sampling_rate * 0.001));
- pstr_parametric_ffwd_type_drc_params->gain_smooth_hold_off_count = gain_smooth_hold_off * 256 * sampling_rate / (parametric_drc_frame_size * 48000);
- pstr_parametric_ffwd_type_drc_params->gain_smooth_attack_threshold = hParametricDrcTypeFeedForwardBs->gain_smooth_attack_threshold;
- pstr_parametric_ffwd_type_drc_params->gain_smooth_rel_threshold = hParametricDrcTypeFeedForwardBs->gain_smooth_rel_threshold;
- }
-
- err = impd_parametric_ffwd_type_drc_reset(pstr_parametric_ffwd_type_drc_params);
+ if (err) return (err);
+ } else {
+ err = impd_init_lvl_est_filt_subband(
+ pstr_parametric_ffwd_type_drc_params->level_estim_k_weighting_type,
+ p_parametricdrc_params->sampling_rate,
+ p_parametricdrc_params->sub_band_domain_mode,
+ p_parametricdrc_params->sub_band_count,
+ pstr_parametric_ffwd_type_drc_params->sub_band_compensation_type,
+ pstr_parametric_ffwd_type_drc_params->weighting_filt,
+ &pstr_parametric_ffwd_type_drc_params->filt_coeff_subband);
- if (err)
- return (err);
+ if (err) return (err);
+ }
+
+ pstr_parametric_ffwd_type_drc_params->node_count =
+ hParametricDrcTypeFeedForwardBs->node_count;
+
+ memcpy(pstr_parametric_ffwd_type_drc_params->node_level,
+ hParametricDrcTypeFeedForwardBs->node_level,
+ pstr_parametric_ffwd_type_drc_params->node_count * sizeof(WORD32));
+ memcpy(pstr_parametric_ffwd_type_drc_params->node_gain,
+ hParametricDrcTypeFeedForwardBs->node_gain,
+ pstr_parametric_ffwd_type_drc_params->node_count * sizeof(WORD32));
+
+ pstr_parametric_ffwd_type_drc_params->ref_level_parametric_drc =
+ hDrcCoefficientsParametricDrcBs
+ ->str_parametric_drc_gain_set_params[gain_set_index]
+ .drc_input_loudness;
+
+ {
+ WORD32 gain_smooth_attack_time_fast =
+ hParametricDrcTypeFeedForwardBs->gain_smooth_attack_time_fast;
+ WORD32 gain_smooth_release_time_fast =
+ hParametricDrcTypeFeedForwardBs->gain_smooth_release_time_fast;
+ WORD32 gain_smooth_attack_time_slow =
+ hParametricDrcTypeFeedForwardBs->gain_smooth_attack_time_slow;
+ WORD32 gain_smooth_release_time_slow =
+ hParametricDrcTypeFeedForwardBs->gain_smooth_release_time_slow;
+ WORD32 gain_smooth_hold_off =
+ hParametricDrcTypeFeedForwardBs->gain_smooth_hold_off;
+ WORD32 sampling_rate = p_parametricdrc_params->sampling_rate;
+ WORD32 parametric_drc_frame_size =
+ p_parametricdrc_params->parametric_drc_frame_size;
+
+ pstr_parametric_ffwd_type_drc_params->gain_smooth_attack_alpha_fast =
+ 1 -
+ (FLOAT32)exp(-1.0 * parametric_drc_frame_size /
+ (gain_smooth_attack_time_fast * sampling_rate * 0.001));
+ pstr_parametric_ffwd_type_drc_params->gain_smooth_rel_alpha_fast =
+ 1 -
+ (FLOAT32)exp(-1.0 * parametric_drc_frame_size /
+ (gain_smooth_release_time_fast * sampling_rate * 0.001));
+ pstr_parametric_ffwd_type_drc_params->gain_smooth_attack_alpha_slow =
+ 1 -
+ (FLOAT32)exp(-1.0 * parametric_drc_frame_size /
+ (gain_smooth_attack_time_slow * sampling_rate * 0.001));
+ pstr_parametric_ffwd_type_drc_params->gain_smooth_rel_alpha_slow =
+ 1 -
+ (FLOAT32)exp(-1.0 * parametric_drc_frame_size /
+ (gain_smooth_release_time_slow * sampling_rate * 0.001));
+ pstr_parametric_ffwd_type_drc_params->gain_smooth_hold_off_count =
+ gain_smooth_hold_off * 256 * sampling_rate /
+ (parametric_drc_frame_size * 48000);
+ pstr_parametric_ffwd_type_drc_params->gain_smooth_attack_threshold =
+ hParametricDrcTypeFeedForwardBs->gain_smooth_attack_threshold;
+ pstr_parametric_ffwd_type_drc_params->gain_smooth_rel_threshold =
+ hParametricDrcTypeFeedForwardBs->gain_smooth_rel_threshold;
+ }
+
+ err =
+ impd_parametric_ffwd_type_drc_reset(pstr_parametric_ffwd_type_drc_params);
+
+ if (err) return (err);
- return 0;
+ return 0;
}
-WORD32 impd_init_parametric_drc_lim(ia_drc_config* pstr_drc_config,
- WORD32 instance_idx,
- WORD32 ch_count_from_dwnmix_id,
- ia_parametric_drc_params_struct* p_parametricdrc_params,
- pVOID *mem_ptr)
-{
- WORD32 err = 0, i = 0;
- UWORD32 j;
- UWORD32 attack, sec_len;
-
- WORD32 parametric_drc_idx = p_parametricdrc_params->parametric_drc_idx[instance_idx];
- WORD32 gain_set_index = p_parametricdrc_params->gain_set_index[instance_idx];
- WORD32* channel_map = p_parametricdrc_params->channel_map[instance_idx];
-
- ia_drc_coeff_parametric_drc_struct* hDrcCoefficientsParametricDrcBs = &(pstr_drc_config->str_drc_config_ext.str_drc_coeff_param_drc);
- ia_parametric_drc_lim_struct* hParametricDrcTypeLimBs = &(pstr_drc_config->str_drc_config_ext.str_parametric_drc_instructions[parametric_drc_idx].parametric_drc_lim);
- ia_parametric_drc_type_lim_params_struct* pstr_parametric_lim_type_drc_params = &(p_parametricdrc_params->str_parametric_drc_instance_params[instance_idx].str_parametric_drc_type_lim_params);
-
- pstr_parametric_lim_type_drc_params->frame_size = p_parametricdrc_params->drc_frame_size;
- pstr_parametric_lim_type_drc_params->audio_num_chan = p_parametricdrc_params->audio_num_chan;
-
- if (ch_count_from_dwnmix_id != 0)
- {
- memcpy(pstr_parametric_lim_type_drc_params->level_estim_ch_weight,
- hDrcCoefficientsParametricDrcBs->str_parametric_drc_gain_set_params[gain_set_index].level_estim_ch_weight,ch_count_from_dwnmix_id*sizeof(FLOAT32));
+WORD32 impd_init_parametric_drc_lim(
+ ia_drc_config* pstr_drc_config, WORD32 instance_idx,
+ WORD32 ch_count_from_dwnmix_id,
+ ia_parametric_drc_params_struct* p_parametricdrc_params, pVOID* mem_ptr) {
+ WORD32 err = 0, i = 0;
+ UWORD32 j;
+ UWORD32 attack, sec_len;
+
+ WORD32 parametric_drc_idx =
+ p_parametricdrc_params->parametric_drc_idx[instance_idx];
+ WORD32 gain_set_index = p_parametricdrc_params->gain_set_index[instance_idx];
+ WORD32* channel_map = p_parametricdrc_params->channel_map[instance_idx];
+
+ ia_drc_coeff_parametric_drc_struct* hDrcCoefficientsParametricDrcBs =
+ &(pstr_drc_config->str_drc_config_ext.str_drc_coeff_param_drc);
+ ia_parametric_drc_lim_struct* hParametricDrcTypeLimBs =
+ &(pstr_drc_config->str_drc_config_ext
+ .str_parametric_drc_instructions[parametric_drc_idx]
+ .parametric_drc_lim);
+ ia_parametric_drc_type_lim_params_struct*
+ pstr_parametric_lim_type_drc_params =
+ &(p_parametricdrc_params
+ ->str_parametric_drc_instance_params[instance_idx]
+ .str_parametric_drc_type_lim_params);
+
+ pstr_parametric_lim_type_drc_params->frame_size =
+ p_parametricdrc_params->drc_frame_size;
+ pstr_parametric_lim_type_drc_params->audio_num_chan =
+ p_parametricdrc_params->audio_num_chan;
+
+ if (ch_count_from_dwnmix_id != 0) {
+ memcpy(pstr_parametric_lim_type_drc_params->level_estim_ch_weight,
+ hDrcCoefficientsParametricDrcBs
+ ->str_parametric_drc_gain_set_params[gain_set_index]
+ .level_estim_ch_weight,
+ ch_count_from_dwnmix_id * sizeof(FLOAT32));
+ } else {
+ for (i = 0; i < pstr_parametric_lim_type_drc_params->audio_num_chan; i++) {
+ pstr_parametric_lim_type_drc_params->level_estim_ch_weight[i] =
+ (FLOAT32)channel_map[i];
}
- else
- {
- for (i=0; i<pstr_parametric_lim_type_drc_params->audio_num_chan; i++)
- {
- pstr_parametric_lim_type_drc_params->level_estim_ch_weight[i] = (FLOAT32)channel_map[i];
- }
+ }
+
+ attack = (UWORD32)(hParametricDrcTypeLimBs->parametric_lim_attack *
+ p_parametricdrc_params->sampling_rate / 1000);
+
+ sec_len = (UWORD32)sqrt(attack + 1);
+
+ pstr_parametric_lim_type_drc_params->sec_len = sec_len;
+ pstr_parametric_lim_type_drc_params->num_max_buf_sec = (attack + 1) / sec_len;
+ if (pstr_parametric_lim_type_drc_params->num_max_buf_sec * sec_len <
+ (attack + 1))
+ pstr_parametric_lim_type_drc_params->num_max_buf_sec++;
+
+ pstr_parametric_lim_type_drc_params->max_buf = (FLOAT32*)(*mem_ptr);
+ *mem_ptr = (pVOID)((SIZE_T)(*mem_ptr) +
+ pstr_parametric_lim_type_drc_params->num_max_buf_sec *
+ sec_len * sizeof(FLOAT32));
+
+ pstr_parametric_lim_type_drc_params->attack_ms =
+ (FLOAT32)hParametricDrcTypeLimBs->parametric_lim_attack;
+ pstr_parametric_lim_type_drc_params->release_ms =
+ (FLOAT32)hParametricDrcTypeLimBs->parametric_lim_release;
+ pstr_parametric_lim_type_drc_params->attack = attack;
+ pstr_parametric_lim_type_drc_params->attack_constant =
+ (FLOAT32)pow(0.1, 1.0 / (attack + 1));
+ pstr_parametric_lim_type_drc_params->release_constant = (FLOAT32)pow(
+ 0.1, 1.0 / (hParametricDrcTypeLimBs->parametric_lim_release *
+ p_parametricdrc_params->sampling_rate / 1000 +
+ 1));
+ pstr_parametric_lim_type_drc_params->threshold = (FLOAT32)pow(
+ 10.0f, 0.05f * hParametricDrcTypeLimBs->parametric_lim_threshold);
+ pstr_parametric_lim_type_drc_params->channels =
+ pstr_parametric_lim_type_drc_params->audio_num_chan;
+ pstr_parametric_lim_type_drc_params->sampling_rate =
+ p_parametricdrc_params->sampling_rate;
+ pstr_parametric_lim_type_drc_params->cor = 1.0f;
+ pstr_parametric_lim_type_drc_params->smooth_state_0 = 1.0;
+
+ for (j = 0; j < pstr_parametric_lim_type_drc_params->num_max_buf_sec *
+ pstr_parametric_lim_type_drc_params->sec_len;
+ j++) {
+ pstr_parametric_lim_type_drc_params->max_buf[j] = 0.f;
+ }
+
+ if (err) return (err);
- }
-
- attack = (UWORD32)(hParametricDrcTypeLimBs->parametric_lim_attack * p_parametricdrc_params->sampling_rate / 1000);
-
- sec_len = (UWORD32)sqrt(attack+1);
-
- pstr_parametric_lim_type_drc_params->sec_len = sec_len;
- pstr_parametric_lim_type_drc_params->num_max_buf_sec = (attack+1)/sec_len;
- if (pstr_parametric_lim_type_drc_params->num_max_buf_sec*sec_len < (attack+1))
- pstr_parametric_lim_type_drc_params->num_max_buf_sec++;
-
- pstr_parametric_lim_type_drc_params->max_buf =(FLOAT32*)(*mem_ptr);
- *mem_ptr =(pVOID)((SIZE_T)(*mem_ptr)+pstr_parametric_lim_type_drc_params->num_max_buf_sec * sec_len*sizeof(FLOAT32));
-
- pstr_parametric_lim_type_drc_params->attack_ms = (FLOAT32)hParametricDrcTypeLimBs->parametric_lim_attack;
- pstr_parametric_lim_type_drc_params->release_ms = (FLOAT32)hParametricDrcTypeLimBs->parametric_lim_release;
- pstr_parametric_lim_type_drc_params->attack = attack;
- pstr_parametric_lim_type_drc_params->attack_constant = (FLOAT32)pow(0.1, 1.0 / (attack + 1));
- pstr_parametric_lim_type_drc_params->release_constant = (FLOAT32)pow(0.1, 1.0 / (hParametricDrcTypeLimBs->parametric_lim_release * p_parametricdrc_params->sampling_rate / 1000 + 1));
- pstr_parametric_lim_type_drc_params->threshold = (FLOAT32)pow(10.0f, 0.05f * hParametricDrcTypeLimBs->parametric_lim_threshold);
- pstr_parametric_lim_type_drc_params->channels = pstr_parametric_lim_type_drc_params->audio_num_chan;
- pstr_parametric_lim_type_drc_params->sampling_rate = p_parametricdrc_params->sampling_rate;
- pstr_parametric_lim_type_drc_params->cor = 1.0f;
- pstr_parametric_lim_type_drc_params->smooth_state_0 = 1.0;
-
-
-
- for (j=0; j<pstr_parametric_lim_type_drc_params->num_max_buf_sec * pstr_parametric_lim_type_drc_params->sec_len; j++) {
- pstr_parametric_lim_type_drc_params->max_buf[j] = 0.f;
- }
-
-
-
- if (err) return (err);
-
- return 0;
+ return 0;
}
-WORD32 impd_init_parametric_drcInstance(ia_drc_config* pstr_drc_config,
- WORD32 instance_idx,
- WORD32 ch_count_from_dwnmix_id,
- ia_parametric_drc_params_struct* p_parametricdrc_params,
- pVOID *mem_ptr)
-{
- WORD32 err = 0;
+WORD32 impd_init_parametric_drcInstance(
+ ia_drc_config* pstr_drc_config, WORD32 instance_idx,
+ WORD32 ch_count_from_dwnmix_id,
+ ia_parametric_drc_params_struct* p_parametricdrc_params, pVOID* mem_ptr) {
+ WORD32 err = 0;
+
+ WORD32 parametric_drc_idx =
+ p_parametricdrc_params->parametric_drc_idx[instance_idx];
+ ia_parametric_drc_instructions_struct* hParametricDrcInstructions =
+ &(pstr_drc_config->str_drc_config_ext
+ .str_parametric_drc_instructions[parametric_drc_idx]);
+
+ p_parametricdrc_params->str_parametric_drc_instance_params[instance_idx]
+ .disable_paramteric_drc =
+ hParametricDrcInstructions->disable_paramteric_drc;
+ p_parametricdrc_params->str_parametric_drc_instance_params[instance_idx]
+ .parametric_drc_type = hParametricDrcInstructions->parametric_drc_type;
+ p_parametricdrc_params->str_parametric_drc_instance_params[instance_idx]
+ .str_spline_nodes.num_nodes = p_parametricdrc_params->num_nodes;
+
+ if (p_parametricdrc_params->str_parametric_drc_instance_params[instance_idx]
+ .disable_paramteric_drc == 0) {
+ if (p_parametricdrc_params->str_parametric_drc_instance_params[instance_idx]
+ .parametric_drc_type == PARAM_DRC_TYPE_FF) {
+ err = impd_init_parametric_drc_feed_fwd(pstr_drc_config, instance_idx,
+ ch_count_from_dwnmix_id,
+ p_parametricdrc_params);
+
+ if (err) return (err);
+
+ } else if (p_parametricdrc_params
+ ->str_parametric_drc_instance_params[instance_idx]
+ .parametric_drc_type == PARAM_DRC_TYPE_LIM) {
+ p_parametricdrc_params->str_parametric_drc_instance_params[instance_idx]
+ .str_spline_nodes.num_nodes = p_parametricdrc_params->drc_frame_size;
+
+ err = impd_init_parametric_drc_lim(pstr_drc_config, instance_idx,
+ ch_count_from_dwnmix_id,
+ p_parametricdrc_params, mem_ptr);
+
+ if (err) return (err);
- WORD32 parametric_drc_idx = p_parametricdrc_params->parametric_drc_idx[instance_idx];
- ia_parametric_drc_instructions_struct *hParametricDrcInstructions = &(pstr_drc_config->str_drc_config_ext.str_parametric_drc_instructions[parametric_drc_idx]);
-
- p_parametricdrc_params->str_parametric_drc_instance_params[instance_idx].disable_paramteric_drc = hParametricDrcInstructions->disable_paramteric_drc;
- p_parametricdrc_params->str_parametric_drc_instance_params[instance_idx].parametric_drc_type = hParametricDrcInstructions->parametric_drc_type;
- p_parametricdrc_params->str_parametric_drc_instance_params[instance_idx].str_spline_nodes.num_nodes = p_parametricdrc_params->num_nodes;
-
- if (p_parametricdrc_params->str_parametric_drc_instance_params[instance_idx].disable_paramteric_drc == 0)
- {
-
- if (p_parametricdrc_params->str_parametric_drc_instance_params[instance_idx].parametric_drc_type == PARAM_DRC_TYPE_FF)
- {
-
- err = impd_init_parametric_drc_feed_fwd(pstr_drc_config,
- instance_idx,
- ch_count_from_dwnmix_id,
- p_parametricdrc_params);
-
- if (err)
- return (err);
-
- }
- else if (p_parametricdrc_params->str_parametric_drc_instance_params[instance_idx].parametric_drc_type == PARAM_DRC_TYPE_LIM)
- {
-
- p_parametricdrc_params->str_parametric_drc_instance_params[instance_idx].str_spline_nodes.num_nodes = p_parametricdrc_params->drc_frame_size;
-
- err = impd_init_parametric_drc_lim(pstr_drc_config,
- instance_idx,
- ch_count_from_dwnmix_id,
- p_parametricdrc_params,
- mem_ptr);
-
- if (err)
- return (err);
-
- } else {
-
- return (UNEXPECTED_ERROR);
-
- }
+ } else {
+ return (UNEXPECTED_ERROR);
}
+ }
- return 0;
+ return 0;
}
-
-
-WORD32 impd_init_parametric_drc_after_config(ia_drc_config* pstr_drc_config,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- ia_parametric_drc_params_struct *p_parametricdrc_params,
- pVOID *mem_ptr)
-{
-
- WORD32 err = 0, instance_idx = 0, gain_set_index = 0, side_chain_config_type = 0, downmix_id = 0, ch_count_from_dwnmix_id = 0, L = 0;
-
- p_parametricdrc_params->parametric_drc_frame_size = pstr_drc_config->str_drc_config_ext.str_drc_coeff_param_drc.parametric_drc_frame_size;
- p_parametricdrc_params->reset_parametric_drc = pstr_drc_config->str_drc_config_ext.str_drc_coeff_param_drc.reset_parametric_drc;
- p_parametricdrc_params->num_nodes = p_parametricdrc_params->drc_frame_size/p_parametricdrc_params->parametric_drc_frame_size;
-
- switch (p_parametricdrc_params->sub_band_domain_mode) {
+WORD32 impd_init_parametric_drc_after_config(
+ ia_drc_config* pstr_drc_config,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ ia_parametric_drc_params_struct* p_parametricdrc_params, pVOID* mem_ptr) {
+ WORD32 err = 0, instance_idx = 0, gain_set_index = 0,
+ side_chain_config_type = 0, downmix_id = 0,
+ ch_count_from_dwnmix_id = 0, L = 0;
+
+ p_parametricdrc_params->parametric_drc_frame_size =
+ pstr_drc_config->str_drc_config_ext.str_drc_coeff_param_drc
+ .parametric_drc_frame_size;
+ p_parametricdrc_params->reset_parametric_drc =
+ pstr_drc_config->str_drc_config_ext.str_drc_coeff_param_drc
+ .reset_parametric_drc;
+ p_parametricdrc_params->num_nodes =
+ p_parametricdrc_params->drc_frame_size /
+ p_parametricdrc_params->parametric_drc_frame_size;
+
+ switch (p_parametricdrc_params->sub_band_domain_mode) {
case SUBBAND_DOMAIN_MODE_QMF64:
- L = AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64;
- break;
+ L = AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64;
+ break;
case SUBBAND_DOMAIN_MODE_QMF71:
- L = AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF71;
- break;
+ L = AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF71;
+ break;
case SUBBAND_DOMAIN_MODE_STFT256:
- L = AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_STFT256;
- break;
+ L = AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_STFT256;
+ break;
case SUBBAND_DOMAIN_MODE_OFF:
default:
- L = 0;
- break;
- }
-
- if (p_parametricdrc_params->sub_band_domain_mode != SUBBAND_DOMAIN_MODE_OFF && p_parametricdrc_params->parametric_drc_frame_size != L)
- {
- return (EXTERNAL_ERROR);
+ L = 0;
+ break;
+ }
+
+ if (p_parametricdrc_params->sub_band_domain_mode != SUBBAND_DOMAIN_MODE_OFF &&
+ p_parametricdrc_params->parametric_drc_frame_size != L) {
+ return (EXTERNAL_ERROR);
+ }
+
+ for (instance_idx = 0;
+ instance_idx < p_parametricdrc_params->parametric_drc_instance_count;
+ instance_idx++) {
+ gain_set_index = p_parametricdrc_params->gain_set_index[instance_idx];
+ side_chain_config_type =
+ pstr_drc_config->str_drc_config_ext.str_drc_coeff_param_drc
+ .str_parametric_drc_gain_set_params[gain_set_index]
+ .side_chain_config_type;
+ downmix_id = pstr_drc_config->str_drc_config_ext.str_drc_coeff_param_drc
+ .str_parametric_drc_gain_set_params[gain_set_index]
+ .downmix_id;
+
+ if (side_chain_config_type == 1 &&
+ downmix_id ==
+ p_parametricdrc_params
+ ->dwnmix_id_from_drc_instructions[instance_idx]) {
+ ch_count_from_dwnmix_id =
+ pstr_drc_config->str_drc_config_ext.str_drc_coeff_param_drc
+ .str_parametric_drc_gain_set_params[gain_set_index]
+ .ch_count_from_dwnmix_id;
+ } else {
+ ch_count_from_dwnmix_id = 0;
}
- for (instance_idx=0; instance_idx<p_parametricdrc_params->parametric_drc_instance_count; instance_idx++) {
-
- gain_set_index = p_parametricdrc_params->gain_set_index[instance_idx];
- side_chain_config_type = pstr_drc_config->str_drc_config_ext.str_drc_coeff_param_drc.str_parametric_drc_gain_set_params[gain_set_index].side_chain_config_type;
- downmix_id = pstr_drc_config->str_drc_config_ext.str_drc_coeff_param_drc.str_parametric_drc_gain_set_params[gain_set_index].downmix_id;
-
- if (side_chain_config_type==1 && downmix_id == p_parametricdrc_params->dwnmix_id_from_drc_instructions[instance_idx]) {
- ch_count_from_dwnmix_id = pstr_drc_config->str_drc_config_ext.str_drc_coeff_param_drc.str_parametric_drc_gain_set_params[gain_set_index].ch_count_from_dwnmix_id;
- } else {
- ch_count_from_dwnmix_id = 0;
- }
-
- if (pstr_drc_config->str_drc_config_ext.str_drc_coeff_param_drc.str_parametric_drc_gain_set_params[gain_set_index].drc_input_loudness_present == 0) {
- WORD32 n = 0, m = 0, drcInputLoudnessFound = 0;
- FLOAT32 drc_input_loudness = 0.f;
-
-
- for (n=0; n<pstr_loudness_info->loudness_info_count; n++)
- {
- ia_loudness_info_struct* loudness_info = &pstr_loudness_info->loudness_info[n];
- if (p_parametricdrc_params->dwnmix_id_from_drc_instructions[instance_idx] == loudness_info->downmix_id)
- {
- if (0 == loudness_info->drc_set_id)
- {
- for (m=0; m<loudness_info->measurement_count; m++)
- {
- if (loudness_info->loudness_measure[m].method_def == METHOD_DEFINITION_PROGRAM_LOUDNESS)
- {
- drc_input_loudness = loudness_info->loudness_measure[m].method_val;
- drcInputLoudnessFound = 1;
- break;
- }
- }
- if (drcInputLoudnessFound == 0)
- {
- for (m=0; m<loudness_info->measurement_count; m++)
- {
- if (loudness_info->loudness_measure[m].method_def == METHOD_DEFINITION_ANCHOR_LOUDNESS)
- {
- drc_input_loudness = loudness_info->loudness_measure[m].method_val;
- drcInputLoudnessFound = 1;
- break;
- }
- }
- }
- }
- }
+ if (pstr_drc_config->str_drc_config_ext.str_drc_coeff_param_drc
+ .str_parametric_drc_gain_set_params[gain_set_index]
+ .drc_input_loudness_present == 0) {
+ WORD32 n = 0, m = 0, drcInputLoudnessFound = 0;
+ FLOAT32 drc_input_loudness = 0.f;
+
+ for (n = 0; n < pstr_loudness_info->loudness_info_count; n++) {
+ ia_loudness_info_struct* loudness_info =
+ &pstr_loudness_info->loudness_info[n];
+ if (p_parametricdrc_params
+ ->dwnmix_id_from_drc_instructions[instance_idx] ==
+ loudness_info->downmix_id) {
+ if (0 == loudness_info->drc_set_id) {
+ for (m = 0; m < loudness_info->measurement_count; m++) {
+ if (loudness_info->loudness_measure[m].method_def ==
+ METHOD_DEFINITION_PROGRAM_LOUDNESS) {
+ drc_input_loudness =
+ loudness_info->loudness_measure[m].method_val;
+ drcInputLoudnessFound = 1;
+ break;
+ }
}
- if (drcInputLoudnessFound == 0)
- {
- for (n=0; n<pstr_loudness_info->loudness_info_count; n++)
- {
- ia_loudness_info_struct* loudness_info = &pstr_loudness_info->loudness_info[n];
- if (0 == loudness_info->downmix_id)
- {
- if (0 == loudness_info->drc_set_id)
- {
- for (m=0; m<loudness_info->measurement_count; m++)
- {
- if (loudness_info->loudness_measure[m].method_def == METHOD_DEFINITION_PROGRAM_LOUDNESS)
- {
- drc_input_loudness = loudness_info->loudness_measure[m].method_val;
- drcInputLoudnessFound = 1;
- break;
- }
- }
- if (drcInputLoudnessFound == 0) {
- for (m=0; m<loudness_info->measurement_count; m++)
- {
- if (loudness_info->loudness_measure[m].method_def == METHOD_DEFINITION_ANCHOR_LOUDNESS)
- {
- drc_input_loudness = loudness_info->loudness_measure[m].method_val;
- drcInputLoudnessFound = 1;
- break;
- }
- }
- }
- }
- }
+ if (drcInputLoudnessFound == 0) {
+ for (m = 0; m < loudness_info->measurement_count; m++) {
+ if (loudness_info->loudness_measure[m].method_def ==
+ METHOD_DEFINITION_ANCHOR_LOUDNESS) {
+ drc_input_loudness =
+ loudness_info->loudness_measure[m].method_val;
+ drcInputLoudnessFound = 1;
+ break;
}
+ }
}
- if (drcInputLoudnessFound == 0) {
- return (UNEXPECTED_ERROR);
- } else {
- pstr_drc_config->str_drc_config_ext.str_drc_coeff_param_drc.str_parametric_drc_gain_set_params[gain_set_index].drc_input_loudness = drc_input_loudness;
+ }
+ }
+ }
+ if (drcInputLoudnessFound == 0) {
+ for (n = 0; n < pstr_loudness_info->loudness_info_count; n++) {
+ ia_loudness_info_struct* loudness_info =
+ &pstr_loudness_info->loudness_info[n];
+ if (0 == loudness_info->downmix_id) {
+ if (0 == loudness_info->drc_set_id) {
+ for (m = 0; m < loudness_info->measurement_count; m++) {
+ if (loudness_info->loudness_measure[m].method_def ==
+ METHOD_DEFINITION_PROGRAM_LOUDNESS) {
+ drc_input_loudness =
+ loudness_info->loudness_measure[m].method_val;
+ drcInputLoudnessFound = 1;
+ break;
+ }
+ }
+ if (drcInputLoudnessFound == 0) {
+ for (m = 0; m < loudness_info->measurement_count; m++) {
+ if (loudness_info->loudness_measure[m].method_def ==
+ METHOD_DEFINITION_ANCHOR_LOUDNESS) {
+ drc_input_loudness =
+ loudness_info->loudness_measure[m].method_val;
+ drcInputLoudnessFound = 1;
+ break;
+ }
+ }
+ }
}
+ }
}
-
- impd_init_parametric_drcInstance(pstr_drc_config,
- instance_idx,
- ch_count_from_dwnmix_id,
- p_parametricdrc_params,
- mem_ptr);
- if (err) return (err);
- }
-
- return 0;
-}
-
-
-
-WORD32 impd_init_lvl_est_filt_time( WORD32 level_estim_k_weighting_type,
- WORD32 sampling_rate,
- ia_2nd_order_filt_coeff_struct* pre_filt_coeff,
- ia_2nd_order_filt_coeff_struct* rlb_filt_coeff)
-{
-
- WORD32 i;
- const FLOAT32* ptr_samp_tbl;
-
- switch(sampling_rate)
- {
- case 96000:i=0;
- break;
- case 88200:i=1;
- break;
- case 64000:i=2;
- break;
- case 48000:i=3;
- break;
- case 44100:i=4;
- break;
- case 32000:i=5;
- break;
- case 24000:i=6;
- break;
- case 22050:i=7;
- break;
- case 16000:i=8;
- break;
- case 12000:i=9;
- break;
- case 11025:i=10;
- break;
- case 8000:i=11;
- break;
- case 7350:i=12;
- break;
- default:i=3;
- break;
- }
-
- ptr_samp_tbl = samp_rate_tbl[i];
-
- if (level_estim_k_weighting_type==2) {
-
- pre_filt_coeff->b0 = ptr_samp_tbl[0];
- pre_filt_coeff->b1 = ptr_samp_tbl[1];
- pre_filt_coeff->b2 = ptr_samp_tbl[2];
- pre_filt_coeff->a1 = ptr_samp_tbl[3];
- pre_filt_coeff->a2 = ptr_samp_tbl[4];
-
-
+ }
+ if (drcInputLoudnessFound == 0) {
+ return (UNEXPECTED_ERROR);
+ } else {
+ pstr_drc_config->str_drc_config_ext.str_drc_coeff_param_drc
+ .str_parametric_drc_gain_set_params[gain_set_index]
+ .drc_input_loudness = drc_input_loudness;
+ }
}
- if (level_estim_k_weighting_type == 1 || level_estim_k_weighting_type == 2) {
+ impd_init_parametric_drcInstance(pstr_drc_config, instance_idx,
+ ch_count_from_dwnmix_id,
+ p_parametricdrc_params, mem_ptr);
+ if (err) return (err);
+ }
- rlb_filt_coeff->b0 = ptr_samp_tbl[5];
- rlb_filt_coeff->b1 = ptr_samp_tbl[6];
- rlb_filt_coeff->b2 = ptr_samp_tbl[7];
- rlb_filt_coeff->a1 = ptr_samp_tbl[8];
- rlb_filt_coeff->a2 = ptr_samp_tbl[9];
+ return 0;
+}
- }
+WORD32 impd_init_lvl_est_filt_time(
+ WORD32 level_estim_k_weighting_type, WORD32 sampling_rate,
+ ia_2nd_order_filt_coeff_struct* pre_filt_coeff,
+ ia_2nd_order_filt_coeff_struct* rlb_filt_coeff) {
+ WORD32 i;
+ const FLOAT32* ptr_samp_tbl;
+
+ switch (sampling_rate) {
+ case 96000:
+ i = 0;
+ break;
+ case 88200:
+ i = 1;
+ break;
+ case 64000:
+ i = 2;
+ break;
+ case 48000:
+ i = 3;
+ break;
+ case 44100:
+ i = 4;
+ break;
+ case 32000:
+ i = 5;
+ break;
+ case 24000:
+ i = 6;
+ break;
+ case 22050:
+ i = 7;
+ break;
+ case 16000:
+ i = 8;
+ break;
+ case 12000:
+ i = 9;
+ break;
+ case 11025:
+ i = 10;
+ break;
+ case 8000:
+ i = 11;
+ break;
+ case 7350:
+ i = 12;
+ break;
+ default:
+ i = 3;
+ break;
+ }
+
+ ptr_samp_tbl = samp_rate_tbl[i];
+
+ if (level_estim_k_weighting_type == 2) {
+ pre_filt_coeff->b0 = ptr_samp_tbl[0];
+ pre_filt_coeff->b1 = ptr_samp_tbl[1];
+ pre_filt_coeff->b2 = ptr_samp_tbl[2];
+ pre_filt_coeff->a1 = ptr_samp_tbl[3];
+ pre_filt_coeff->a2 = ptr_samp_tbl[4];
+ }
+
+ if (level_estim_k_weighting_type == 1 || level_estim_k_weighting_type == 2) {
+ rlb_filt_coeff->b0 = ptr_samp_tbl[5];
+ rlb_filt_coeff->b1 = ptr_samp_tbl[6];
+ rlb_filt_coeff->b2 = ptr_samp_tbl[7];
+ rlb_filt_coeff->a1 = ptr_samp_tbl[8];
+ rlb_filt_coeff->a2 = ptr_samp_tbl[9];
+ }
- return 0;
+ return 0;
}
-WORD32 impd_init_lvl_est_filt_subband( WORD32 level_estim_k_weighting_type,
- WORD32 sampling_rate,
- WORD32 sub_band_domain_mode,
- WORD32 sub_band_count,
- WORD32 sub_band_compensation_type,
- FLOAT32 *weighting_filt,
- ia_2nd_order_filt_coeff_struct* filt_coeff_subband)
-{
- FLOAT32 w0, alpha, sinw0, cosw0;
- FLOAT32 b0, b1, b2, a0, a1, a2;
- FLOAT32 num_real,num_imag,den_real,den_imag;
- FLOAT32 *f_bands_nrm;
- WORD32 b;
- WORD32 i;
- const FLOAT32* ptr_samp_tbl;
-
- switch(sampling_rate)
- {
- case 96000:i=0;
- break;
- case 88200:i=1;
- break;
- case 64000:i=2;
- break;
- case 48000:i=3;
- break;
- case 44100:i=4;
- break;
- case 32000:i=5;
- break;
- case 24000:i=6;
- break;
- case 22050:i=7;
- break;
- case 16000:i=8;
- break;
- case 12000:i=9;
- break;
- case 11025:i=10;
- break;
- case 8000:i=11;
- break;
- case 7350:i=12;
- break;
- default:i=3;
- break;
- }
+WORD32 impd_init_lvl_est_filt_subband(
+ WORD32 level_estim_k_weighting_type, WORD32 sampling_rate,
+ WORD32 sub_band_domain_mode, WORD32 sub_band_count,
+ WORD32 sub_band_compensation_type, FLOAT32* weighting_filt,
+ ia_2nd_order_filt_coeff_struct* filt_coeff_subband) {
+ FLOAT32 w0, alpha, sinw0, cosw0;
+ FLOAT32 b0, b1, b2, a0, a1, a2;
+ FLOAT32 num_real, num_imag, den_real, den_imag;
+ FLOAT32* f_bands_nrm;
+ WORD32 b;
+ WORD32 i;
+ const FLOAT32* ptr_samp_tbl;
+
+ switch (sampling_rate) {
+ case 96000:
+ i = 0;
+ break;
+ case 88200:
+ i = 1;
+ break;
+ case 64000:
+ i = 2;
+ break;
+ case 48000:
+ i = 3;
+ break;
+ case 44100:
+ i = 4;
+ break;
+ case 32000:
+ i = 5;
+ break;
+ case 24000:
+ i = 6;
+ break;
+ case 22050:
+ i = 7;
+ break;
+ case 16000:
+ i = 8;
+ break;
+ case 12000:
+ i = 9;
+ break;
+ case 11025:
+ i = 10;
+ break;
+ case 8000:
+ i = 11;
+ break;
+ case 7350:
+ i = 12;
+ break;
+ default:
+ i = 3;
+ break;
+ }
- ptr_samp_tbl = samp_rate_tbl[i];
+ ptr_samp_tbl = samp_rate_tbl[i];
- switch (sub_band_domain_mode)
- {
+ switch (sub_band_domain_mode) {
case SUBBAND_DOMAIN_MODE_QMF64:
- f_bands_nrm = f_bands_nrm_QMF64;
- break;
+ f_bands_nrm = f_bands_nrm_QMF64;
+ break;
case SUBBAND_DOMAIN_MODE_QMF71:
- f_bands_nrm = f_bands_nrm_QMF71;
- break;
+ f_bands_nrm = f_bands_nrm_QMF71;
+ break;
case SUBBAND_DOMAIN_MODE_STFT256:
- f_bands_nrm = f_bands_nrm_STFT256;
- break;
+ f_bands_nrm = f_bands_nrm_STFT256;
+ break;
default:
- return UNEXPECTED_ERROR;
- break;
- }
-
- for (b=0; b<sub_band_count; b++)
- {
- weighting_filt[b] = 1.f;
+ return UNEXPECTED_ERROR;
+ break;
+ }
+
+ for (b = 0; b < sub_band_count; b++) {
+ weighting_filt[b] = 1.f;
+ }
+
+ if (level_estim_k_weighting_type == 2) {
+ b0 = ptr_samp_tbl[0];
+ b1 = ptr_samp_tbl[1];
+ b2 = ptr_samp_tbl[2];
+ a1 = ptr_samp_tbl[3];
+ a2 = ptr_samp_tbl[4];
+ a0 = 1.f;
+
+ for (b = 0; b < sub_band_count; b++) {
+ num_real = b0 + b1 * (FLOAT32)cos(PI * f_bands_nrm[b]) +
+ b2 * (FLOAT32)cos(PI * 2 * f_bands_nrm[b]);
+ num_imag = -b1 * (FLOAT32)sin(PI * f_bands_nrm[b]) -
+ b2 * (FLOAT32)sin(PI * 2 * f_bands_nrm[b]);
+ den_real = a0 + a1 * (FLOAT32)cos(PI * f_bands_nrm[b]) +
+ a2 * (FLOAT32)cos(PI * 2 * f_bands_nrm[b]);
+ den_imag = -a1 * (FLOAT32)sin(PI * f_bands_nrm[b]) -
+ a2 * (FLOAT32)sin(PI * 2 * f_bands_nrm[b]);
+
+ weighting_filt[b] *=
+ (FLOAT32)(sqrt((num_real * num_real + num_imag * num_imag) /
+ (den_real * den_real + den_imag * den_imag)));
}
-
- if (level_estim_k_weighting_type == 2)
- {
-
- b0 = ptr_samp_tbl[0];
- b1 = ptr_samp_tbl[1];
- b2 = ptr_samp_tbl[2];
- a1 = ptr_samp_tbl[3];
- a2 = ptr_samp_tbl[4];
- a0 = 1.f;
-
- for (b=0; b<sub_band_count; b++)
- {
-
- num_real = b0 + b1 * (FLOAT32)cos(PI*f_bands_nrm[b]) + b2 * (FLOAT32)cos(PI*2*f_bands_nrm[b]);
- num_imag = - b1 * (FLOAT32)sin(PI*f_bands_nrm[b]) - b2 * (FLOAT32)sin(PI*2*f_bands_nrm[b]);
- den_real = a0 + a1 *(FLOAT32) cos(PI*f_bands_nrm[b]) + a2 * (FLOAT32)cos(PI*2*f_bands_nrm[b]);
- den_imag = - a1 * (FLOAT32)sin(PI*f_bands_nrm[b]) - a2 * (FLOAT32)sin(PI*2*f_bands_nrm[b]);
-
- weighting_filt[b] *= (FLOAT32)(sqrt((num_real*num_real+num_imag*num_imag)/(den_real*den_real+den_imag*den_imag)));
- }
+ }
+
+ if (level_estim_k_weighting_type == 1 || level_estim_k_weighting_type == 2) {
+ b0 = ptr_samp_tbl[5];
+ b1 = ptr_samp_tbl[6];
+ b2 = ptr_samp_tbl[7];
+ a1 = ptr_samp_tbl[8];
+ a2 = ptr_samp_tbl[9];
+ a0 = 1.f;
+
+ for (b = 0; b < sub_band_count; b++) {
+ if (!(sub_band_compensation_type == 1 && b == 0)) {
+ num_real = (FLOAT32)(b0 + b1 * cos(PI * f_bands_nrm[b]) +
+ b2 * cos(PI * 2 * f_bands_nrm[b]));
+ num_imag = (FLOAT32)(-b1 * sin(PI * f_bands_nrm[b]) -
+ b2 * sin(PI * 2 * f_bands_nrm[b]));
+ den_real = (FLOAT32)(a0 + a1 * cos(PI * f_bands_nrm[b]) +
+ a2 * cos(PI * 2 * f_bands_nrm[b]));
+ den_imag = (FLOAT32)(-a1 * sin(PI * f_bands_nrm[b]) -
+ a2 * sin(PI * 2 * f_bands_nrm[b]));
+
+ weighting_filt[b] *=
+ (FLOAT32)(sqrt((num_real * num_real + num_imag * num_imag) /
+ (den_real * den_real + den_imag * den_imag)));
+ }
}
- if (level_estim_k_weighting_type == 1 || level_estim_k_weighting_type == 2)
- {
- b0 = ptr_samp_tbl[5];
- b1 = ptr_samp_tbl[6];
- b2 = ptr_samp_tbl[7];
- a1 = ptr_samp_tbl[8];
- a2 = ptr_samp_tbl[9];
- a0 = 1.f;
-
-
- for (b=0; b<sub_band_count; b++)
- {
-
- if (!(sub_band_compensation_type==1 && b==0))
- {
- num_real =(FLOAT32)( b0 + b1 * cos(PI*f_bands_nrm[b]) + b2 * cos(PI*2*f_bands_nrm[b]));
- num_imag =(FLOAT32)( - b1 * sin(PI*f_bands_nrm[b]) - b2 * sin(PI*2*f_bands_nrm[b]));
- den_real = (FLOAT32)(a0 + a1 * cos(PI*f_bands_nrm[b]) + a2 * cos(PI*2*f_bands_nrm[b]));
- den_imag = (FLOAT32)(- a1 * sin(PI*f_bands_nrm[b]) - a2 * sin(PI*2*f_bands_nrm[b]));
-
- weighting_filt[b] *= (FLOAT32)(sqrt((num_real*num_real+num_imag*num_imag)/(den_real*den_real+den_imag*den_imag)));
- }
- }
-
- if (sub_band_compensation_type==1)
- {
-
- w0 = 2.0f*PI * 38.0f / (FLOAT32)sampling_rate * AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64;
- sinw0 = (FLOAT32)sin(w0);
- cosw0 = (FLOAT32)cos(w0);
- alpha = sinw0;
-
- b0 = (1 + cosw0)/2;
- b1 = -(1 + cosw0);
- b2 = (1 + cosw0)/2;
- a0 = 1 + alpha;
- a1 = -2*cosw0;
- a2 = 1 - alpha;
-
- filt_coeff_subband->b0 = b0/a0;
- filt_coeff_subband->b1 = b1/a0;
- filt_coeff_subband->b2 = b2/a0;
- filt_coeff_subband->a1 = a1/a0;
- filt_coeff_subband->a2 = a2/a0;
- }
+ if (sub_band_compensation_type == 1) {
+ w0 = 2.0f * PI * 38.0f / (FLOAT32)sampling_rate *
+ AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64;
+ sinw0 = (FLOAT32)sin(w0);
+ cosw0 = (FLOAT32)cos(w0);
+ alpha = sinw0;
+
+ b0 = (1 + cosw0) / 2;
+ b1 = -(1 + cosw0);
+ b2 = (1 + cosw0) / 2;
+ a0 = 1 + alpha;
+ a1 = -2 * cosw0;
+ a2 = 1 - alpha;
+
+ filt_coeff_subband->b0 = b0 / a0;
+ filt_coeff_subband->b1 = b1 / a0;
+ filt_coeff_subband->b2 = b2 / a0;
+ filt_coeff_subband->a1 = a1 / a0;
+ filt_coeff_subband->a2 = a2 / a0;
}
+ }
- return 0;
+ return 0;
}
-WORD32 impd_parametric_ffwd_type_drc_reset(ia_parametric_drc_type_ff_params_struct* pstr_parametric_ffwd_type_drc_params)
-{
- WORD32 i = 0;
-
- pstr_parametric_ffwd_type_drc_params->level_estim_frame_index = 0;
- pstr_parametric_ffwd_type_drc_params->start_up_phase = 1;
- for (i=0; i<PARAM_DRC_TYPE_FF_LEVEL_ESTIM_FRAME_COUNT_MAX; i++) {
- pstr_parametric_ffwd_type_drc_params->level[i] = 0.f;
- }
-
- for (i=0; i<MAX_CHANNEL_COUNT; i++) {
- pstr_parametric_ffwd_type_drc_params->pre_filt_state[i].z1 = 0.f;
- pstr_parametric_ffwd_type_drc_params->pre_filt_state[i].z2 = 0.f;
- pstr_parametric_ffwd_type_drc_params->rlb_filt_state[i].z1 = 0.f;
- pstr_parametric_ffwd_type_drc_params->rlb_filt_state[i].z2 = 0.f;
- pstr_parametric_ffwd_type_drc_params->filt_state_subband_real[i].z1 = 0.f;
- pstr_parametric_ffwd_type_drc_params->filt_state_subband_real[i].z2 = 0.f;
- pstr_parametric_ffwd_type_drc_params->filt_state_subband_imag[i].z1 = 0.f;
- pstr_parametric_ffwd_type_drc_params->filt_state_subband_imag[i].z2 = 0.f;
- }
-
- pstr_parametric_ffwd_type_drc_params->db_level_smooth = -135.f;
- pstr_parametric_ffwd_type_drc_params->db_gain_smooth = 0.f;
- pstr_parametric_ffwd_type_drc_params->hold_counter = 0;
+WORD32 impd_parametric_ffwd_type_drc_reset(
+ ia_parametric_drc_type_ff_params_struct*
+ pstr_parametric_ffwd_type_drc_params) {
+ WORD32 i = 0;
+
+ pstr_parametric_ffwd_type_drc_params->level_estim_frame_index = 0;
+ pstr_parametric_ffwd_type_drc_params->start_up_phase = 1;
+ for (i = 0; i < PARAM_DRC_TYPE_FF_LEVEL_ESTIM_FRAME_COUNT_MAX; i++) {
+ pstr_parametric_ffwd_type_drc_params->level[i] = 0.f;
+ }
+
+ for (i = 0; i < MAX_CHANNEL_COUNT; i++) {
+ pstr_parametric_ffwd_type_drc_params->pre_filt_state[i].z1 = 0.f;
+ pstr_parametric_ffwd_type_drc_params->pre_filt_state[i].z2 = 0.f;
+ pstr_parametric_ffwd_type_drc_params->rlb_filt_state[i].z1 = 0.f;
+ pstr_parametric_ffwd_type_drc_params->rlb_filt_state[i].z2 = 0.f;
+ pstr_parametric_ffwd_type_drc_params->filt_state_subband_real[i].z1 = 0.f;
+ pstr_parametric_ffwd_type_drc_params->filt_state_subband_real[i].z2 = 0.f;
+ pstr_parametric_ffwd_type_drc_params->filt_state_subband_imag[i].z1 = 0.f;
+ pstr_parametric_ffwd_type_drc_params->filt_state_subband_imag[i].z2 = 0.f;
+ }
+
+ pstr_parametric_ffwd_type_drc_params->db_level_smooth = -135.f;
+ pstr_parametric_ffwd_type_drc_params->db_gain_smooth = 0.f;
+ pstr_parametric_ffwd_type_drc_params->hold_counter = 0;
- return 0;
+ return 0;
}
-WORD32 impd_parametric_drc_instance_process (FLOAT32* audio_in_out_buf[],
- FLOAT32* audio_real_buff[],
- FLOAT32* audio_imag_buff[],
- ia_parametric_drc_params_struct* p_parametricdrc_params,
- ia_parametric_drc_instance_params_struct* pstr_parametric_drc_instance_params)
-{
- WORD32 err = 0, i = 0;
-
- if (pstr_parametric_drc_instance_params->disable_paramteric_drc) {
-
- for (i=0; i<p_parametricdrc_params->num_nodes; i++) {
+WORD32 impd_parametric_drc_instance_process(
+ FLOAT32* audio_in_out_buf[], FLOAT32* audio_real_buff[],
+ FLOAT32* audio_imag_buff[],
+ ia_parametric_drc_params_struct* p_parametricdrc_params,
+ ia_parametric_drc_instance_params_struct*
+ pstr_parametric_drc_instance_params) {
+ WORD32 err = 0, i = 0;
+
+ if (pstr_parametric_drc_instance_params->disable_paramteric_drc) {
+ for (i = 0; i < p_parametricdrc_params->num_nodes; i++) {
+ pstr_parametric_drc_instance_params->str_spline_nodes.str_node[i]
+ .loc_db_gain = 0.f;
+ pstr_parametric_drc_instance_params->str_spline_nodes.str_node[i].slope =
+ 0.f;
+ pstr_parametric_drc_instance_params->str_spline_nodes.str_node[i].time =
+ (i + 1) * p_parametricdrc_params->parametric_drc_frame_size - 1;
+ }
- pstr_parametric_drc_instance_params->str_spline_nodes.str_node[i].loc_db_gain = 0.f;
- pstr_parametric_drc_instance_params->str_spline_nodes.str_node[i].slope = 0.f;
- pstr_parametric_drc_instance_params->str_spline_nodes.str_node[i].time = (i+1) * p_parametricdrc_params->parametric_drc_frame_size - 1;
+ } else {
+ if (pstr_parametric_drc_instance_params->parametric_drc_type ==
+ PARAM_DRC_TYPE_FF) {
+ ia_parametric_drc_type_ff_params_struct*
+ pstr_parametric_ffwd_type_drc_params =
+ &(pstr_parametric_drc_instance_params
+ ->str_parametric_drc_type_ff_params);
+ for (i = 0; i < p_parametricdrc_params->num_nodes; i++) {
+ err = impd_parametric_ffwd_type_drc_process(
+ audio_in_out_buf, audio_real_buff, audio_imag_buff, i,
+ pstr_parametric_ffwd_type_drc_params,
+ &pstr_parametric_drc_instance_params->str_spline_nodes);
+ if (err) return (err);
+ }
- }
+ } else if (pstr_parametric_drc_instance_params->parametric_drc_type ==
+ PARAM_DRC_TYPE_LIM) {
+ return (UNEXPECTED_ERROR);
} else {
-
- if (pstr_parametric_drc_instance_params->parametric_drc_type == PARAM_DRC_TYPE_FF) {
-
- ia_parametric_drc_type_ff_params_struct* pstr_parametric_ffwd_type_drc_params = &(pstr_parametric_drc_instance_params->str_parametric_drc_type_ff_params);
- for (i=0; i<p_parametricdrc_params->num_nodes; i++) {
- err = impd_parametric_ffwd_type_drc_process(audio_in_out_buf,
- audio_real_buff,
- audio_imag_buff,
- i,
- pstr_parametric_ffwd_type_drc_params,
- &pstr_parametric_drc_instance_params->str_spline_nodes);
- if (err) return (err);
- }
-
- } else if (pstr_parametric_drc_instance_params->parametric_drc_type == PARAM_DRC_TYPE_LIM) {
-
- return (UNEXPECTED_ERROR);
-
- } else {
- return (UNEXPECTED_ERROR);
-
- }
-
+ return (UNEXPECTED_ERROR);
}
+ }
- return 0;
+ return 0;
}
-VOID iir_second_order_filter (ia_2nd_order_filt_coeff_struct* coeff,
- ia_2nd_order_filt_state_struct* state,
- WORD32 frame_len,
- FLOAT32* input,
- FLOAT32* output)
-{
- FLOAT32 z2=state->z2;
- FLOAT32 z1=state->z1;
- FLOAT32 z0;
- WORD32 i;
-
- for (i=0; i<frame_len; i++)
- {
- z0 = input[i] - coeff->a1 * z1 - coeff->a2 * z2;
- output[i] = coeff->b0 * z0 + coeff->b1 * z1 + coeff->b2 * z2;
- z2 = z1;
- z1 = z0;
-
- }
- state->z1=z1;
- state->z2=z2;
+VOID iir_second_order_filter(ia_2nd_order_filt_coeff_struct* coeff,
+ ia_2nd_order_filt_state_struct* state,
+ WORD32 frame_len, FLOAT32* input,
+ FLOAT32* output) {
+ FLOAT32 z2 = state->z2;
+ FLOAT32 z1 = state->z1;
+ FLOAT32 z0;
+ WORD32 i;
+
+ for (i = 0; i < frame_len; i++) {
+ z0 = input[i] - coeff->a1 * z1 - coeff->a2 * z2;
+ output[i] = coeff->b0 * z0 + coeff->b1 * z1 + coeff->b2 * z2;
+ z2 = z1;
+ z1 = z0;
+ }
+ state->z1 = z1;
+ state->z2 = z2;
}
-WORD32 impd_parametric_ffwd_type_drc_process(FLOAT32* audio_in_out_buf[],
- FLOAT32* audio_real_buff[],
- FLOAT32* audio_imag_buff[],
- WORD32 nodeIdx,
- ia_parametric_drc_type_ff_params_struct* pstr_parametric_ffwd_type_drc_params,
- ia_spline_nodes_struct* str_spline_nodes)
-{
- WORD32 c, t, b, n, i, offset;
- FLOAT32 x, y, channelLevel, level, levelDb, loc_db_gain, levelDelta, alpha;
-
- WORD32 frame_size = pstr_parametric_ffwd_type_drc_params->frame_size;
- WORD32 sub_band_count = pstr_parametric_ffwd_type_drc_params->sub_band_count;
- FLOAT32 *level_estim_ch_weight = pstr_parametric_ffwd_type_drc_params->level_estim_ch_weight;
- WORD32 level_estim_k_weighting_type = pstr_parametric_ffwd_type_drc_params->level_estim_k_weighting_type;
-
- ia_2nd_order_filt_coeff_struct preC = pstr_parametric_ffwd_type_drc_params->pre_filt_coeff;
- ia_2nd_order_filt_coeff_struct rlbC = pstr_parametric_ffwd_type_drc_params->rlb_filt_coeff;
- ia_2nd_order_filt_state_struct* preS = pstr_parametric_ffwd_type_drc_params->pre_filt_state;
- ia_2nd_order_filt_state_struct* rlbS = pstr_parametric_ffwd_type_drc_params->rlb_filt_state;
-
- ia_2nd_order_filt_coeff_struct rlbC_sb = pstr_parametric_ffwd_type_drc_params->filt_coeff_subband;
- ia_2nd_order_filt_state_struct* rlbS_sbReal = pstr_parametric_ffwd_type_drc_params->filt_state_subband_real;
- ia_2nd_order_filt_state_struct* rlbS_sbImag = pstr_parametric_ffwd_type_drc_params->filt_state_subband_imag;
- FLOAT32 *weighting_filt = pstr_parametric_ffwd_type_drc_params->weighting_filt;
- WORD32 sub_band_compensation_type = pstr_parametric_ffwd_type_drc_params->sub_band_compensation_type;
-
- if (audio_in_out_buf != NULL) {
-
- level = 0;
- offset = nodeIdx * pstr_parametric_ffwd_type_drc_params->frame_size;
- for(c=0; c<pstr_parametric_ffwd_type_drc_params->audio_num_chan; c++) {
- channelLevel = 0.f;
-
- if (!level_estim_ch_weight[c]) continue;
-
- if (level_estim_k_weighting_type == 0) {
-
- for(t=0; t<frame_size; t++) {
-
- x = audio_in_out_buf[c][offset+t];
-
- channelLevel += x * x;
-
- }
-
- } else if (level_estim_k_weighting_type == 1) {
-
- for(t=0; t<frame_size; t++) {
-
- x = audio_in_out_buf[c][offset+t];
-
- iir_second_order_filter(&rlbC,&rlbS[c],1,&x,&x);
-
- channelLevel += x * x;
-
- }
-
- } else if (level_estim_k_weighting_type == 2) {
-
- for(t=0; t<frame_size; t++) {
-
- x = audio_in_out_buf[c][offset+t];
-
- iir_second_order_filter(&preC,&preS[c],1,&x,&x);
-
- iir_second_order_filter(&rlbC,&rlbS[c],1,&x,&x);
-
- channelLevel += x * x;
-
- }
-
- } else {
-
- return (UNEXPECTED_ERROR);
-
- }
-
- level += level_estim_ch_weight[c] * channelLevel;
-
+WORD32 impd_parametric_ffwd_type_drc_process(
+ FLOAT32* audio_in_out_buf[], FLOAT32* audio_real_buff[],
+ FLOAT32* audio_imag_buff[], WORD32 nodeIdx,
+ ia_parametric_drc_type_ff_params_struct*
+ pstr_parametric_ffwd_type_drc_params,
+ ia_spline_nodes_struct* str_spline_nodes) {
+ WORD32 c, t, b, n, i, offset;
+ FLOAT32 x, y, channelLevel, level, levelDb, loc_db_gain, levelDelta, alpha;
+
+ WORD32 frame_size = pstr_parametric_ffwd_type_drc_params->frame_size;
+ WORD32 sub_band_count = pstr_parametric_ffwd_type_drc_params->sub_band_count;
+ FLOAT32* level_estim_ch_weight =
+ pstr_parametric_ffwd_type_drc_params->level_estim_ch_weight;
+ WORD32 level_estim_k_weighting_type =
+ pstr_parametric_ffwd_type_drc_params->level_estim_k_weighting_type;
+
+ ia_2nd_order_filt_coeff_struct preC =
+ pstr_parametric_ffwd_type_drc_params->pre_filt_coeff;
+ ia_2nd_order_filt_coeff_struct rlbC =
+ pstr_parametric_ffwd_type_drc_params->rlb_filt_coeff;
+ ia_2nd_order_filt_state_struct* preS =
+ pstr_parametric_ffwd_type_drc_params->pre_filt_state;
+ ia_2nd_order_filt_state_struct* rlbS =
+ pstr_parametric_ffwd_type_drc_params->rlb_filt_state;
+
+ ia_2nd_order_filt_coeff_struct rlbC_sb =
+ pstr_parametric_ffwd_type_drc_params->filt_coeff_subband;
+ ia_2nd_order_filt_state_struct* rlbS_sbReal =
+ pstr_parametric_ffwd_type_drc_params->filt_state_subband_real;
+ ia_2nd_order_filt_state_struct* rlbS_sbImag =
+ pstr_parametric_ffwd_type_drc_params->filt_state_subband_imag;
+ FLOAT32* weighting_filt =
+ pstr_parametric_ffwd_type_drc_params->weighting_filt;
+ WORD32 sub_band_compensation_type =
+ pstr_parametric_ffwd_type_drc_params->sub_band_compensation_type;
+
+ if (audio_in_out_buf != NULL) {
+ level = 0;
+ offset = nodeIdx * pstr_parametric_ffwd_type_drc_params->frame_size;
+ for (c = 0; c < pstr_parametric_ffwd_type_drc_params->audio_num_chan; c++) {
+ channelLevel = 0.f;
+
+ if (!level_estim_ch_weight[c]) continue;
+
+ if (level_estim_k_weighting_type == 0) {
+ for (t = 0; t < frame_size; t++) {
+ x = audio_in_out_buf[c][offset + t];
+
+ channelLevel += x * x;
}
- } else {
-
- level = 0;
- offset = nodeIdx * pstr_parametric_ffwd_type_drc_params->sub_band_count;
- for(c=0; c<pstr_parametric_ffwd_type_drc_params->audio_num_chan; c++) {
- channelLevel = 0.f;
-
- if (!level_estim_ch_weight[c]) continue;
-
- if (level_estim_k_weighting_type == 0) {
+ } else if (level_estim_k_weighting_type == 1) {
+ for (t = 0; t < frame_size; t++) {
+ x = audio_in_out_buf[c][offset + t];
- for(b=0; b<sub_band_count; b++) {
+ iir_second_order_filter(&rlbC, &rlbS[c], 1, &x, &x);
- x = audio_real_buff[c][offset+b];
- y = audio_imag_buff[c][offset+b];
-
- channelLevel += x * x + y * y;
-
- }
+ channelLevel += x * x;
+ }
- } else if (level_estim_k_weighting_type == 1||level_estim_k_weighting_type == 2) {
+ } else if (level_estim_k_weighting_type == 2) {
+ for (t = 0; t < frame_size; t++) {
+ x = audio_in_out_buf[c][offset + t];
- for(b=0; b<sub_band_count; b++) {
+ iir_second_order_filter(&preC, &preS[c], 1, &x, &x);
- x = audio_real_buff[c][offset+b] * weighting_filt[b];
- y = audio_imag_buff[c][offset+b] * weighting_filt[b];
+ iir_second_order_filter(&rlbC, &rlbS[c], 1, &x, &x);
- if (b==0 && sub_band_compensation_type==1) {
+ channelLevel += x * x;
+ }
- iir_second_order_filter(&rlbC_sb,&rlbS_sbReal[c],1,&x,&x);
+ } else {
+ return (UNEXPECTED_ERROR);
+ }
- iir_second_order_filter(&rlbC_sb,&rlbS_sbImag[c],1,&y,&y);
+ level += level_estim_ch_weight[c] * channelLevel;
+ }
- }
+ } else {
+ level = 0;
+ offset = nodeIdx * pstr_parametric_ffwd_type_drc_params->sub_band_count;
+ for (c = 0; c < pstr_parametric_ffwd_type_drc_params->audio_num_chan; c++) {
+ channelLevel = 0.f;
- channelLevel += x * x + y * y;
+ if (!level_estim_ch_weight[c]) continue;
- }
+ if (level_estim_k_weighting_type == 0) {
+ for (b = 0; b < sub_band_count; b++) {
+ x = audio_real_buff[c][offset + b];
+ y = audio_imag_buff[c][offset + b];
- } else {
+ channelLevel += x * x + y * y;
+ }
- return (UNEXPECTED_ERROR);
+ } else if (level_estim_k_weighting_type == 1 ||
+ level_estim_k_weighting_type == 2) {
+ for (b = 0; b < sub_band_count; b++) {
+ x = audio_real_buff[c][offset + b] * weighting_filt[b];
+ y = audio_imag_buff[c][offset + b] * weighting_filt[b];
- }
+ if (b == 0 && sub_band_compensation_type == 1) {
+ iir_second_order_filter(&rlbC_sb, &rlbS_sbReal[c], 1, &x, &x);
- level += level_estim_ch_weight[c] * channelLevel;
+ iir_second_order_filter(&rlbC_sb, &rlbS_sbImag[c], 1, &y, &y);
+ }
+ channelLevel += x * x + y * y;
}
- level /= sub_band_count;
- }
- pstr_parametric_ffwd_type_drc_params->level[pstr_parametric_ffwd_type_drc_params->level_estim_frame_index] = level;
- pstr_parametric_ffwd_type_drc_params->level_estim_frame_index++;
+ } else {
+ return (UNEXPECTED_ERROR);
+ }
- level = 0.f;
- if (pstr_parametric_ffwd_type_drc_params->start_up_phase) {
- for (i=0; i<pstr_parametric_ffwd_type_drc_params->level_estim_frame_index; i++) {
- level += pstr_parametric_ffwd_type_drc_params->level[i];
- }
- level /= pstr_parametric_ffwd_type_drc_params->level_estim_frame_index * pstr_parametric_ffwd_type_drc_params->frame_size;
- } else {
- for (i=0; i<pstr_parametric_ffwd_type_drc_params->level_estim_frame_count; i++) {
- level += pstr_parametric_ffwd_type_drc_params->level[i];
- }
- level /= pstr_parametric_ffwd_type_drc_params->level_estim_integration_time;
- }
- if (pstr_parametric_ffwd_type_drc_params->level_estim_frame_index == pstr_parametric_ffwd_type_drc_params->level_estim_frame_count) {
- pstr_parametric_ffwd_type_drc_params->level_estim_frame_index = 0;
- pstr_parametric_ffwd_type_drc_params->start_up_phase = 0;
+ level += level_estim_ch_weight[c] * channelLevel;
}
- if (level < 1e-10f) level = 1e-10f;
- if (level_estim_k_weighting_type == 2) {
- levelDb = -0.691f + 10 * (FLOAT32)log10(level) + 3;
- } else {
- levelDb = 10 * (FLOAT32)log10(level) + 3;
+ level /= sub_band_count;
+ }
+ pstr_parametric_ffwd_type_drc_params
+ ->level[pstr_parametric_ffwd_type_drc_params->level_estim_frame_index] =
+ level;
+ pstr_parametric_ffwd_type_drc_params->level_estim_frame_index++;
+
+ level = 0.f;
+ if (pstr_parametric_ffwd_type_drc_params->start_up_phase) {
+ for (i = 0;
+ i < pstr_parametric_ffwd_type_drc_params->level_estim_frame_index;
+ i++) {
+ level += pstr_parametric_ffwd_type_drc_params->level[i];
}
- levelDb -= pstr_parametric_ffwd_type_drc_params->ref_level_parametric_drc;
-
- for(n=0; n<pstr_parametric_ffwd_type_drc_params->node_count; n++) {
- if (levelDb <= (FLOAT32)pstr_parametric_ffwd_type_drc_params->node_level[n]) {
- break;
- }
+ level /= pstr_parametric_ffwd_type_drc_params->level_estim_frame_index *
+ pstr_parametric_ffwd_type_drc_params->frame_size;
+ } else {
+ for (i = 0;
+ i < pstr_parametric_ffwd_type_drc_params->level_estim_frame_count;
+ i++) {
+ level += pstr_parametric_ffwd_type_drc_params->level[i];
}
- if (n == 0) {
- loc_db_gain = (FLOAT32)pstr_parametric_ffwd_type_drc_params->node_gain[n];
- } else if (n == pstr_parametric_ffwd_type_drc_params->node_count) {
- loc_db_gain = (FLOAT32)pstr_parametric_ffwd_type_drc_params->node_gain[n-1] - levelDb + (FLOAT32)pstr_parametric_ffwd_type_drc_params->node_level[n-1];
- } else {
- loc_db_gain = (FLOAT32)pstr_parametric_ffwd_type_drc_params->node_gain[n] + (levelDb - (FLOAT32)pstr_parametric_ffwd_type_drc_params->node_level[n]) / (FLOAT32)(pstr_parametric_ffwd_type_drc_params->node_level[n-1] - pstr_parametric_ffwd_type_drc_params->node_level[n]) * (FLOAT32)(pstr_parametric_ffwd_type_drc_params->node_gain[n-1] - pstr_parametric_ffwd_type_drc_params->node_gain[n]);
+ level /= pstr_parametric_ffwd_type_drc_params->level_estim_integration_time;
+ }
+ if (pstr_parametric_ffwd_type_drc_params->level_estim_frame_index ==
+ pstr_parametric_ffwd_type_drc_params->level_estim_frame_count) {
+ pstr_parametric_ffwd_type_drc_params->level_estim_frame_index = 0;
+ pstr_parametric_ffwd_type_drc_params->start_up_phase = 0;
+ }
+
+ if (level < 1e-10f) level = 1e-10f;
+ if (level_estim_k_weighting_type == 2) {
+ levelDb = -0.691f + 10 * (FLOAT32)log10(level) + 3;
+ } else {
+ levelDb = 10 * (FLOAT32)log10(level) + 3;
+ }
+ levelDb -= pstr_parametric_ffwd_type_drc_params->ref_level_parametric_drc;
+
+ for (n = 0; n < pstr_parametric_ffwd_type_drc_params->node_count; n++) {
+ if (levelDb <=
+ (FLOAT32)pstr_parametric_ffwd_type_drc_params->node_level[n]) {
+ break;
}
-
- levelDelta = levelDb - pstr_parametric_ffwd_type_drc_params->db_level_smooth;
- if (loc_db_gain < pstr_parametric_ffwd_type_drc_params->db_gain_smooth) {
- if (levelDelta > pstr_parametric_ffwd_type_drc_params->gain_smooth_attack_threshold) {
- alpha = pstr_parametric_ffwd_type_drc_params->gain_smooth_attack_alpha_fast;
- } else {
- alpha = pstr_parametric_ffwd_type_drc_params->gain_smooth_attack_alpha_slow;
- }
+ }
+ if (n == 0) {
+ loc_db_gain = (FLOAT32)pstr_parametric_ffwd_type_drc_params->node_gain[n];
+ } else if (n == pstr_parametric_ffwd_type_drc_params->node_count) {
+ loc_db_gain =
+ (FLOAT32)pstr_parametric_ffwd_type_drc_params->node_gain[n - 1] -
+ levelDb +
+ (FLOAT32)pstr_parametric_ffwd_type_drc_params->node_level[n - 1];
+ } else {
+ loc_db_gain =
+ (FLOAT32)pstr_parametric_ffwd_type_drc_params->node_gain[n] +
+ (levelDb -
+ (FLOAT32)pstr_parametric_ffwd_type_drc_params->node_level[n]) /
+ (FLOAT32)(pstr_parametric_ffwd_type_drc_params->node_level[n - 1] -
+ pstr_parametric_ffwd_type_drc_params->node_level[n]) *
+ (FLOAT32)(pstr_parametric_ffwd_type_drc_params->node_gain[n - 1] -
+ pstr_parametric_ffwd_type_drc_params->node_gain[n]);
+ }
+
+ levelDelta = levelDb - pstr_parametric_ffwd_type_drc_params->db_level_smooth;
+ if (loc_db_gain < pstr_parametric_ffwd_type_drc_params->db_gain_smooth) {
+ if (levelDelta >
+ pstr_parametric_ffwd_type_drc_params->gain_smooth_attack_threshold) {
+ alpha =
+ pstr_parametric_ffwd_type_drc_params->gain_smooth_attack_alpha_fast;
} else {
- if (levelDelta < -pstr_parametric_ffwd_type_drc_params->gain_smooth_rel_threshold) {
- alpha = pstr_parametric_ffwd_type_drc_params->gain_smooth_rel_alpha_fast;
- } else {
- alpha = pstr_parametric_ffwd_type_drc_params->gain_smooth_rel_alpha_slow;
- }
- }
- if (loc_db_gain < pstr_parametric_ffwd_type_drc_params->db_gain_smooth || pstr_parametric_ffwd_type_drc_params->hold_counter == 0) {
- pstr_parametric_ffwd_type_drc_params->db_level_smooth = (1-alpha) * pstr_parametric_ffwd_type_drc_params->db_level_smooth + alpha * levelDb;
- pstr_parametric_ffwd_type_drc_params->db_gain_smooth = (1-alpha) * pstr_parametric_ffwd_type_drc_params->db_gain_smooth + alpha * loc_db_gain;
+ alpha =
+ pstr_parametric_ffwd_type_drc_params->gain_smooth_attack_alpha_slow;
}
- if (pstr_parametric_ffwd_type_drc_params->hold_counter) {
- pstr_parametric_ffwd_type_drc_params->hold_counter -= 1;
- }
- if (loc_db_gain < pstr_parametric_ffwd_type_drc_params->db_gain_smooth) {
- pstr_parametric_ffwd_type_drc_params->hold_counter = pstr_parametric_ffwd_type_drc_params->gain_smooth_hold_off_count;
+ } else {
+ if (levelDelta <
+ -pstr_parametric_ffwd_type_drc_params->gain_smooth_rel_threshold) {
+ alpha = pstr_parametric_ffwd_type_drc_params->gain_smooth_rel_alpha_fast;
+ } else {
+ alpha = pstr_parametric_ffwd_type_drc_params->gain_smooth_rel_alpha_slow;
}
+ }
+ if (loc_db_gain < pstr_parametric_ffwd_type_drc_params->db_gain_smooth ||
+ pstr_parametric_ffwd_type_drc_params->hold_counter == 0) {
+ pstr_parametric_ffwd_type_drc_params->db_level_smooth =
+ (1 - alpha) * pstr_parametric_ffwd_type_drc_params->db_level_smooth +
+ alpha * levelDb;
+ pstr_parametric_ffwd_type_drc_params->db_gain_smooth =
+ (1 - alpha) * pstr_parametric_ffwd_type_drc_params->db_gain_smooth +
+ alpha * loc_db_gain;
+ }
+ if (pstr_parametric_ffwd_type_drc_params->hold_counter) {
+ pstr_parametric_ffwd_type_drc_params->hold_counter -= 1;
+ }
+ if (loc_db_gain < pstr_parametric_ffwd_type_drc_params->db_gain_smooth) {
+ pstr_parametric_ffwd_type_drc_params->hold_counter =
+ pstr_parametric_ffwd_type_drc_params->gain_smooth_hold_off_count;
+ }
+
+ str_spline_nodes->str_node[nodeIdx].loc_db_gain =
+ pstr_parametric_ffwd_type_drc_params->db_gain_smooth;
+ str_spline_nodes->str_node[nodeIdx].slope = 0.f;
+ str_spline_nodes->str_node[nodeIdx].time =
+ pstr_parametric_ffwd_type_drc_params->frame_size + offset - 1;
-
- str_spline_nodes->str_node[nodeIdx].loc_db_gain = pstr_parametric_ffwd_type_drc_params->db_gain_smooth;
- str_spline_nodes->str_node[nodeIdx].slope = 0.f;
- str_spline_nodes->str_node[nodeIdx].time = pstr_parametric_ffwd_type_drc_params->frame_size + offset - 1;
-
-
- return 0;
+ return 0;
}
-
-WORD32 impd_parametric_lim_type_drc_process(FLOAT32* samples[],
- FLOAT32 loudness_normalization_gain_db,
- ia_parametric_drc_type_lim_params_struct* pstr_parametric_lim_type_drc_params,
- FLOAT32* lpcm_gains)
-{
+WORD32 impd_parametric_lim_type_drc_process(
+ FLOAT32* samples[], FLOAT32 loudness_normalization_gain_db,
+ ia_parametric_drc_type_lim_params_struct*
+ pstr_parametric_lim_type_drc_params,
+ FLOAT32* lpcm_gains) {
WORD32 i, j;
FLOAT32 tmp, gain;
-// FLOAT32 min_gain = 1;
+ // FLOAT32 min_gain = 1;
FLOAT32 maximum, sectionMaximum;
- FLOAT32 loudness_normalization_gain = (FLOAT32)pow(10.0f, 0.05f * loudness_normalization_gain_db);
- FLOAT32* level_estim_ch_weight = pstr_parametric_lim_type_drc_params->level_estim_ch_weight;
- WORD32 num_channels = pstr_parametric_lim_type_drc_params->channels;
- WORD32 attack_time_samples = pstr_parametric_lim_type_drc_params->attack;
- FLOAT32 attack_constant = pstr_parametric_lim_type_drc_params->attack_constant;
- FLOAT32 release_constant = pstr_parametric_lim_type_drc_params->release_constant;
- FLOAT32 limit_threshold = pstr_parametric_lim_type_drc_params->threshold;
- FLOAT32* max_buf = pstr_parametric_lim_type_drc_params->max_buf;
- FLOAT32 gain_modified = pstr_parametric_lim_type_drc_params->cor;
- FLOAT64 pre_smoothed_gain = pstr_parametric_lim_type_drc_params->smooth_state_0;
-
-
-
-
-
- for (i = 0; i < pstr_parametric_lim_type_drc_params->frame_size; i++) {
- tmp =0.0f;
- for (j = 0; j < num_channels; j++){
- if (!level_estim_ch_weight[j])
- continue;
- tmp = max(tmp, (FLOAT32)fabs(loudness_normalization_gain*(level_estim_ch_weight[j])*(samples[j][i])));
- }
-
- for (j = attack_time_samples; j >0; j--) {
- max_buf[j]=max_buf[j-1];
- }
- max_buf[0] = tmp;
- sectionMaximum=tmp;
- for (j = 1; j < (attack_time_samples+1); j++) {
- if (max_buf[j] > sectionMaximum)
- sectionMaximum = max_buf[j];
- }
- maximum=sectionMaximum;
-
- if (maximum > limit_threshold) {
- gain = limit_threshold / maximum;
- }
- else {
- gain = 1;
- }
+ FLOAT32 loudness_normalization_gain =
+ (FLOAT32)pow(10.0f, 0.05f * loudness_normalization_gain_db);
+ FLOAT32* level_estim_ch_weight =
+ pstr_parametric_lim_type_drc_params->level_estim_ch_weight;
+ WORD32 num_channels = pstr_parametric_lim_type_drc_params->channels;
+ WORD32 attack_time_samples = pstr_parametric_lim_type_drc_params->attack;
+ FLOAT32 attack_constant =
+ pstr_parametric_lim_type_drc_params->attack_constant;
+ FLOAT32 release_constant =
+ pstr_parametric_lim_type_drc_params->release_constant;
+ FLOAT32 limit_threshold = pstr_parametric_lim_type_drc_params->threshold;
+ FLOAT32* max_buf = pstr_parametric_lim_type_drc_params->max_buf;
+ FLOAT32 gain_modified = pstr_parametric_lim_type_drc_params->cor;
+ FLOAT64 pre_smoothed_gain =
+ pstr_parametric_lim_type_drc_params->smooth_state_0;
+
+ for (i = 0; i < pstr_parametric_lim_type_drc_params->frame_size; i++) {
+ tmp = 0.0f;
+ for (j = 0; j < num_channels; j++) {
+ if (!level_estim_ch_weight[j]) continue;
+ tmp =
+ max(tmp, (FLOAT32)fabs(loudness_normalization_gain *
+ (level_estim_ch_weight[j]) * (samples[j][i])));
+ }
- if (gain < pre_smoothed_gain) {
- gain_modified = min(gain_modified, (gain - 0.1f * (FLOAT32)pre_smoothed_gain) * 1.11111111f);
- }
- else {
- gain_modified = gain;
- }
+ for (j = attack_time_samples; j > 0; j--) {
+ max_buf[j] = max_buf[j - 1];
+ }
+ max_buf[0] = tmp;
+ sectionMaximum = tmp;
+ for (j = 1; j < (attack_time_samples + 1); j++) {
+ if (max_buf[j] > sectionMaximum) sectionMaximum = max_buf[j];
+ }
+ maximum = sectionMaximum;
- if (gain_modified < pre_smoothed_gain) {
- pre_smoothed_gain = attack_constant * (pre_smoothed_gain - gain_modified) + gain_modified;
- pre_smoothed_gain = max(pre_smoothed_gain, gain);
- }
- else {
- pre_smoothed_gain = release_constant * (pre_smoothed_gain - gain_modified) + gain_modified;
- }
+ if (maximum > limit_threshold) {
+ gain = limit_threshold / maximum;
+ } else {
+ gain = 1;
+ }
- gain = (FLOAT32)pre_smoothed_gain;
+ if (gain < pre_smoothed_gain) {
+ gain_modified =
+ min(gain_modified,
+ (gain - 0.1f * (FLOAT32)pre_smoothed_gain) * 1.11111111f);
+ } else {
+ gain_modified = gain;
+ }
- lpcm_gains[i] = gain;
+ if (gain_modified < pre_smoothed_gain) {
+ pre_smoothed_gain =
+ attack_constant * (pre_smoothed_gain - gain_modified) + gain_modified;
+ pre_smoothed_gain = max(pre_smoothed_gain, gain);
+ } else {
+ pre_smoothed_gain =
+ release_constant * (pre_smoothed_gain - gain_modified) +
+ gain_modified;
}
+ gain = (FLOAT32)pre_smoothed_gain;
+
+ lpcm_gains[i] = gain;
+ }
- pstr_parametric_lim_type_drc_params->cor = gain_modified;
- pstr_parametric_lim_type_drc_params->smooth_state_0 = pre_smoothed_gain;
+ pstr_parametric_lim_type_drc_params->cor = gain_modified;
+ pstr_parametric_lim_type_drc_params->smooth_state_0 = pre_smoothed_gain;
return 0;
}
-
-
-
-
-
diff --git a/decoder/drc_src/impd_drc_parser.h b/decoder/drc_src/impd_drc_parser.h
index 57948ae..75c548b 100644
--- a/decoder/drc_src/impd_drc_parser.h
+++ b/decoder/drc_src/impd_drc_parser.h
@@ -22,88 +22,80 @@
WORD32
impd_dec_ducking_scaling(ia_bit_buf_struct* it_bit_buff,
- WORD32* ducking_scaling_flag,
- FLOAT32* ducking_scaling);
+ WORD32* ducking_scaling_flag,
+ FLOAT32* ducking_scaling);
WORD32
-impd_parse_loudness_info(ia_bit_buf_struct* it_bit_buff,
- WORD32 version,
- ia_loudness_info_struct* loudness_info);
-
+impd_parse_loudness_info(ia_bit_buf_struct* it_bit_buff, WORD32 version,
+ ia_loudness_info_struct* loudness_info);
WORD32
-impd_parse_loudness_info_set_ext(ia_bit_buf_struct* it_bit_buff,
- ia_drc_loudness_info_set_struct* loudness_info_set);
+impd_parse_loudness_info_set_ext(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_drc_loudness_info_set_struct* loudness_info_set);
WORD32
-impd_sel_drc_coeff(ia_drc_config* drc_config,
- WORD32 location,
- ia_uni_drc_coeffs_struct** str_p_loc_drc_coefficients_uni_drc);
+impd_sel_drc_coeff(
+ ia_drc_config* drc_config, WORD32 location,
+ ia_uni_drc_coeffs_struct** str_p_loc_drc_coefficients_uni_drc);
WORD32
-impd_drc_parse_instructions_basic(ia_bit_buf_struct* it_bit_buff,
- ia_drc_instructions_basic_struct* str_drc_instructions_basic);
+impd_drc_parse_instructions_basic(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_drc_instructions_basic_struct* str_drc_instructions_basic);
WORD32
-impd_parse_drc_instructions_uni_drc(ia_bit_buf_struct* it_bit_buff,
- WORD32 version,
- ia_drc_config* drc_config,
- ia_drc_instructions_struct* str_drc_instruction_str);
-
+impd_parse_drc_instructions_uni_drc(
+ ia_bit_buf_struct* it_bit_buff, WORD32 version, ia_drc_config* drc_config,
+ ia_drc_instructions_struct* str_drc_instruction_str);
WORD32
-impd_parse_gain_set_params(ia_bit_buf_struct* it_bit_buff,
- WORD32 version,
- WORD32* gain_seq_idx,
- ia_gain_set_params_struct* gain_set_params);
+impd_parse_gain_set_params(ia_bit_buf_struct* it_bit_buff, WORD32 version,
+ WORD32* gain_seq_idx,
+ ia_gain_set_params_struct* gain_set_params);
WORD32
-impd_drc_parse_coeff(ia_bit_buf_struct* it_bit_buff,
- WORD32 version,
- ia_drc_params_bs_dec_struct* ia_drc_params_struct,
- ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc);
+impd_drc_parse_coeff(
+ ia_bit_buf_struct* it_bit_buff, WORD32 version,
+ ia_drc_params_bs_dec_struct* ia_drc_params_struct,
+ ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc);
WORD32
-impd_parse_dwnmix_instructions(ia_bit_buf_struct* it_bit_buff,
- WORD32 version,
- ia_drc_params_bs_dec_struct* ia_drc_params_struct,
- ia_channel_layout_struct* channel_layout,
- ia_downmix_instructions_struct* dwnmix_instructions);
+impd_parse_dwnmix_instructions(
+ ia_bit_buf_struct* it_bit_buff, WORD32 version,
+ ia_drc_params_bs_dec_struct* ia_drc_params_struct,
+ ia_channel_layout_struct* channel_layout,
+ ia_downmix_instructions_struct* dwnmix_instructions);
WORD32
-impd_parse_drc_ext_v1(
- ia_bit_buf_struct* it_bit_buff,
- ia_drc_params_bs_dec_struct* ia_drc_params_struct,
- ia_drc_config* drc_config,
- ia_drc_config_ext* str_drc_config_ext);
+impd_parse_drc_ext_v1(ia_bit_buf_struct* it_bit_buff,
+ ia_drc_params_bs_dec_struct* ia_drc_params_struct,
+ ia_drc_config* drc_config,
+ ia_drc_config_ext* str_drc_config_ext);
WORD32
-impd_parse_drc_config(
- ia_bit_buf_struct* it_bit_buff,
- ia_drc_params_bs_dec_struct* ia_drc_params_struct,
- ia_drc_config* drc_config
- );
+impd_parse_drc_config(ia_bit_buf_struct* it_bit_buff,
+ ia_drc_params_bs_dec_struct* ia_drc_params_struct,
+ ia_drc_config* drc_config);
WORD32
-impd_parse_loudness_info_set(ia_bit_buf_struct* it_bit_buff,
- ia_drc_loudness_info_set_struct* loudness_info_set);
+impd_parse_loudness_info_set(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_drc_loudness_info_set_struct* loudness_info_set);
WORD32
-impd_parse_drc_gain_sequence(
- ia_bit_buf_struct* it_bit_buff,
- ia_drc_bits_dec_struct *pstr_drc_uni_bs_dec,
- ia_gain_set_params_struct* gain_set_params,
- ia_drc_gain_sequence_struct* drc_gain_sequence);
+impd_parse_drc_gain_sequence(ia_bit_buf_struct* it_bit_buff,
+ ia_drc_bits_dec_struct* pstr_drc_uni_bs_dec,
+ ia_gain_set_params_struct* gain_set_params,
+ ia_drc_gain_sequence_struct* drc_gain_sequence);
WORD32
impd_parse_uni_drc_gain_ext(ia_bit_buf_struct* it_bit_buff,
- ia_uni_drc_gain_ext_struct* uni_drc_gain_ext);
-
-WORD32 impd_drc_uni_gain_read(
- ia_bit_buf_struct* it_bit_buff,
- ia_drc_bits_dec_struct *pstr_drc_uni_bs_dec,
- ia_drc_config* drc_config,
- ia_drc_gain_struct* pstr_uni_drc_gain);
+ ia_uni_drc_gain_ext_struct* uni_drc_gain_ext);
+WORD32 impd_drc_uni_gain_read(ia_bit_buf_struct* it_bit_buff,
+ ia_drc_bits_dec_struct* pstr_drc_uni_bs_dec,
+ ia_drc_config* drc_config,
+ ia_drc_gain_struct* pstr_uni_drc_gain);
#endif
diff --git a/decoder/drc_src/impd_drc_parser_interface.h b/decoder/drc_src/impd_drc_parser_interface.h
index d1be9c2..07ef9f9 100644
--- a/decoder/drc_src/impd_drc_parser_interface.h
+++ b/decoder/drc_src/impd_drc_parser_interface.h
@@ -21,36 +21,41 @@
#define IMPD_DRC_PARSER_INTERFACE_H
WORD32
-impd_unidrc_interface_signature_read(ia_bit_buf_struct* it_bit_buff,
- ia_drc_uni_interface_signat_struct* drc_uni_interface_signature);
+impd_unidrc_interface_signature_read(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_drc_uni_interface_signat_struct* drc_uni_interface_signature);
WORD32
impd_sys_interface_read(ia_bit_buf_struct* it_bit_buff,
- ia_system_interface_struct* system_interface);
+ ia_system_interface_struct* system_interface);
WORD32
-impd_loudness_norm_control_interface_read(ia_bit_buf_struct* it_bit_buff,
- ia_loudness_norm_ctrl_interface_struct* loudness_norm_ctrl_interface);
+impd_loudness_norm_control_interface_read(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_loudness_norm_ctrl_interface_struct* loudness_norm_ctrl_interface);
WORD32
-impd_loudness_norm_param_interface_read(ia_bit_buf_struct* it_bit_buff,
- ia_loudness_norm_parameter_interface_struct* loudness_norm_param_interface);
+impd_loudness_norm_param_interface_read(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_loudness_norm_parameter_interface_struct* loudness_norm_param_interface);
WORD32
impd_drc_interface_read(ia_bit_buf_struct* it_bit_buff,
- ia_dyn_rng_ctrl_interface_struct* drc_ctrl_interface);
+ ia_dyn_rng_ctrl_interface_struct* drc_ctrl_interface);
WORD32
-impd_drc_param_interface_read(ia_bit_buf_struct* it_bit_buff,
- ia_drc_parameter_interface_struct* drc_parameter_interface);
+impd_drc_param_interface_read(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_drc_parameter_interface_struct* drc_parameter_interface);
WORD32
-impd_unidrc_interface_extension_read(ia_bit_buf_struct* it_bit_buff,
- ia_drc_interface_struct* impd_drc_uni_interface,
- ia_drc_uni_interface_ext_struct* drc_uni_interface_ext);
+impd_unidrc_interface_extension_read(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_drc_interface_struct* impd_drc_uni_interface,
+ ia_drc_uni_interface_ext_struct* drc_uni_interface_ext);
WORD32
impd_unidrc_interface_read(ia_bit_buf_struct* it_bit_buff,
- ia_drc_interface_struct* impd_drc_uni_interface);
+ ia_drc_interface_struct* impd_drc_uni_interface);
#endif
diff --git a/decoder/drc_src/impd_drc_peak_limiter.c b/decoder/drc_src/impd_drc_peak_limiter.c
index aa813cc..2b013f7 100644
--- a/decoder/drc_src/impd_drc_peak_limiter.c
+++ b/decoder/drc_src/impd_drc_peak_limiter.c
@@ -26,168 +26,156 @@
#include "impd_drc_peak_limiter.h"
#ifndef max
-#define max(a, b) (((a) > (b)) ? (a) : (b))
+#define max(a, b) (((a) > (b)) ? (a) : (b))
#endif
#ifndef min
-#define min(a, b) (((a) < (b)) ? (a) : (b))
+#define min(a, b) (((a) < (b)) ? (a) : (b))
#endif
+WORD32 impd_peak_limiter_init(ia_drc_peak_limiter_struct *peak_limiter,
+ FLOAT32 attack_time, FLOAT32 release_time,
+ FLOAT32 limit_threshold, UWORD32 num_channels,
+ UWORD32 sample_rate, FLOAT32 *buffer) {
+ UWORD32 attack;
+ attack = (UWORD32)(attack_time * sample_rate / 1000);
+
+ if (attack < 1) return 0;
+
+ peak_limiter->max_buf = buffer;
+ peak_limiter->delayed_input = buffer + attack * 4 + 32;
+
+ peak_limiter->delayed_input_index = 0;
+ peak_limiter->attack_time = attack_time;
+ peak_limiter->release_time = release_time;
+ peak_limiter->attack_time_samples = attack;
+ peak_limiter->attack_constant = (FLOAT32)pow(0.1, 1.0 / (attack + 1));
+ peak_limiter->release_constant =
+ (FLOAT32)pow(0.1, 1.0 / (release_time * sample_rate / 1000 + 1));
+ peak_limiter->limit_threshold = limit_threshold;
+ peak_limiter->num_channels = num_channels;
+ peak_limiter->sample_rate = sample_rate;
+ peak_limiter->min_gain = 1.0f;
+ peak_limiter->limiter_on = 1;
+ peak_limiter->pre_smoothed_gain = 1.0f;
+ peak_limiter->gain_modified = 1.0f;
-
-WORD32 impd_peak_limiter_init( ia_drc_peak_limiter_struct *peak_limiter,
- FLOAT32 attack_time,
- FLOAT32 release_time,
- FLOAT32 limit_threshold,
- UWORD32 num_channels,
- UWORD32 sample_rate,
- FLOAT32 *buffer
- )
-{
-
- UWORD32 attack;
- attack = (UWORD32)(attack_time * sample_rate / 1000);
-
- if (attack < 1)
- return 0;
-
- peak_limiter->max_buf=buffer;
- peak_limiter->delayed_input=buffer+attack*4+32;
-
- peak_limiter->delayed_input_index = 0;
- peak_limiter->attack_time = attack_time;
- peak_limiter->release_time = release_time;
- peak_limiter->attack_time_samples = attack;
- peak_limiter->attack_constant = (FLOAT32)pow(0.1, 1.0 / (attack + 1));
- peak_limiter->release_constant = (FLOAT32)pow(0.1, 1.0 / (release_time * sample_rate / 1000 + 1));
- peak_limiter->limit_threshold = limit_threshold;
- peak_limiter->num_channels = num_channels;
- peak_limiter->sample_rate = sample_rate;
- peak_limiter->min_gain = 1.0f;
- peak_limiter->limiter_on=1;
- peak_limiter->pre_smoothed_gain=1.0f;
- peak_limiter->gain_modified=1.0f;
-
- return 0;
+ return 0;
}
-WORD32 impd_peak_limiter_reinit(ia_drc_peak_limiter_struct *peak_limiter)
-{
- if (peak_limiter)
- {
- peak_limiter->delayed_input_index = 0;
- peak_limiter->pre_smoothed_gain=1.0f;
- peak_limiter->gain_modified=1.0f;
- peak_limiter->min_gain = 1.0f;
- memset(peak_limiter->max_buf, 0, (peak_limiter->attack_time_samples + 1) * sizeof(FLOAT32) );
- memset(peak_limiter->delayed_input, 0, peak_limiter->attack_time_samples * peak_limiter->num_channels * sizeof(FLOAT32) );
- }
+WORD32 impd_peak_limiter_reinit(ia_drc_peak_limiter_struct *peak_limiter) {
+ if (peak_limiter) {
+ peak_limiter->delayed_input_index = 0;
+ peak_limiter->pre_smoothed_gain = 1.0f;
+ peak_limiter->gain_modified = 1.0f;
+ peak_limiter->min_gain = 1.0f;
+ memset(peak_limiter->max_buf, 0,
+ (peak_limiter->attack_time_samples + 1) * sizeof(FLOAT32));
+ memset(peak_limiter->delayed_input, 0, peak_limiter->attack_time_samples *
+ peak_limiter->num_channels *
+ sizeof(FLOAT32));
+ }
- return 0;
+ return 0;
}
-WORD32 impd_limiter_process(ia_drc_peak_limiter_struct *peak_limiter, FLOAT32 *samples, UWORD32 frame_len)
-{
+WORD32 impd_limiter_process(ia_drc_peak_limiter_struct *peak_limiter,
+ FLOAT32 *samples, UWORD32 frame_len) {
UWORD32 i, j;
FLOAT32 tmp, gain;
FLOAT32 min_gain = 1;
FLOAT32 maximum, sectionMaximum;
- UWORD32 num_channels = peak_limiter->num_channels;
- UWORD32 attack_time_samples = peak_limiter->attack_time_samples;
- FLOAT32 attack_constant = peak_limiter->attack_constant;
- FLOAT32 release_constant = peak_limiter->release_constant;
- FLOAT32 limit_threshold = peak_limiter->limit_threshold;
- FLOAT32* max_buf = peak_limiter->max_buf;
- FLOAT32 gain_modified = peak_limiter->gain_modified;
- FLOAT32* delayed_input = peak_limiter->delayed_input;
- UWORD32 delayed_input_index = peak_limiter->delayed_input_index;
- FLOAT64 pre_smoothed_gain = peak_limiter->pre_smoothed_gain;
-
-
-
+ UWORD32 num_channels = peak_limiter->num_channels;
+ UWORD32 attack_time_samples = peak_limiter->attack_time_samples;
+ FLOAT32 attack_constant = peak_limiter->attack_constant;
+ FLOAT32 release_constant = peak_limiter->release_constant;
+ FLOAT32 limit_threshold = peak_limiter->limit_threshold;
+ FLOAT32 *max_buf = peak_limiter->max_buf;
+ FLOAT32 gain_modified = peak_limiter->gain_modified;
+ FLOAT32 *delayed_input = peak_limiter->delayed_input;
+ UWORD32 delayed_input_index = peak_limiter->delayed_input_index;
+ FLOAT64 pre_smoothed_gain = peak_limiter->pre_smoothed_gain;
if (peak_limiter->limiter_on || (FLOAT32)pre_smoothed_gain < 1.0f) {
for (i = 0; i < frame_len; i++) {
- tmp =0.0f;
+ tmp = 0.0f;
for (j = 0; j < num_channels; j++) {
tmp = max(tmp, (FLOAT32)fabs(samples[i * num_channels + j]));
}
- for (j = attack_time_samples; j >0; j--) {
- max_buf[j]=max_buf[j-1];
+ for (j = attack_time_samples; j > 0; j--) {
+ max_buf[j] = max_buf[j - 1];
}
max_buf[0] = tmp;
- sectionMaximum=tmp;
- for (j = 1; j < (attack_time_samples+1); j++) {
- if (max_buf[j] > sectionMaximum)
- sectionMaximum = max_buf[j];
+ sectionMaximum = tmp;
+ for (j = 1; j < (attack_time_samples + 1); j++) {
+ if (max_buf[j] > sectionMaximum) sectionMaximum = max_buf[j];
}
- maximum=sectionMaximum;
+ maximum = sectionMaximum;
if (maximum > limit_threshold) {
gain = limit_threshold / maximum;
- }
- else {
+ } else {
gain = 1;
}
if (gain < pre_smoothed_gain) {
- gain_modified = min(gain_modified, (gain - 0.1f * (FLOAT32)pre_smoothed_gain) * 1.11111111f);
- }
- else {
+ gain_modified =
+ min(gain_modified,
+ (gain - 0.1f * (FLOAT32)pre_smoothed_gain) * 1.11111111f);
+ } else {
gain_modified = gain;
}
if (gain_modified < pre_smoothed_gain) {
- pre_smoothed_gain = attack_constant * (pre_smoothed_gain - gain_modified) + gain_modified;
+ pre_smoothed_gain =
+ attack_constant * (pre_smoothed_gain - gain_modified) +
+ gain_modified;
pre_smoothed_gain = max(pre_smoothed_gain, gain);
- }
- else {
- pre_smoothed_gain = release_constant * (pre_smoothed_gain - gain_modified) + gain_modified;
+ } else {
+ pre_smoothed_gain =
+ release_constant * (pre_smoothed_gain - gain_modified) +
+ gain_modified;
}
gain = (FLOAT32)pre_smoothed_gain;
for (j = 0; j < num_channels; j++) {
tmp = delayed_input[delayed_input_index * num_channels + j];
- delayed_input[delayed_input_index * num_channels + j] = samples[i * num_channels + j];
+ delayed_input[delayed_input_index * num_channels + j] =
+ samples[i * num_channels + j];
tmp *= gain;
if (tmp > limit_threshold)
- tmp = limit_threshold;
+ tmp = limit_threshold;
else if (tmp < -limit_threshold)
- tmp = -limit_threshold;
+ tmp = -limit_threshold;
samples[i * num_channels + j] = tmp;
}
delayed_input_index++;
- if (delayed_input_index >= attack_time_samples)
- delayed_input_index = 0;
+ if (delayed_input_index >= attack_time_samples) delayed_input_index = 0;
- if (gain < min_gain)
- min_gain = gain;
+ if (gain < min_gain) min_gain = gain;
}
- }
- else {
+ } else {
for (i = 0; i < frame_len; i++) {
for (j = 0; j < num_channels; j++) {
tmp = delayed_input[delayed_input_index * num_channels + j];
- delayed_input[delayed_input_index * num_channels + j] = samples[i * num_channels + j];
+ delayed_input[delayed_input_index * num_channels + j] =
+ samples[i * num_channels + j];
samples[i * num_channels + j] = tmp;
}
delayed_input_index++;
- if (delayed_input_index >= attack_time_samples)
- delayed_input_index = 0;
+ if (delayed_input_index >= attack_time_samples) delayed_input_index = 0;
}
}
- peak_limiter->gain_modified = gain_modified;
+ peak_limiter->gain_modified = gain_modified;
peak_limiter->delayed_input_index = delayed_input_index;
- peak_limiter->pre_smoothed_gain = pre_smoothed_gain;
- peak_limiter->min_gain = min_gain;
+ peak_limiter->pre_smoothed_gain = pre_smoothed_gain;
+ peak_limiter->min_gain = min_gain;
return 0;
}
-
-
diff --git a/decoder/drc_src/impd_drc_peak_limiter.h b/decoder/drc_src/impd_drc_peak_limiter.h
index 90f5478..d4ba07f 100644
--- a/decoder/drc_src/impd_drc_peak_limiter.h
+++ b/decoder/drc_src/impd_drc_peak_limiter.h
@@ -20,38 +20,34 @@
#ifndef IMPD_DRC_PEAK_LIMITER_H
#define IMPD_DRC_PEAK_LIMITER_H
-
-#define DEFAULT_ATTACK_TIME_MS (5.0f) /* default attack time in ms */
-#define DEFAULT_RELEASE_TIME_MS (50.0f) /* default release time in ms */
-
+#define DEFAULT_ATTACK_TIME_MS (5.0f) /* default attack time in ms */
+#define DEFAULT_RELEASE_TIME_MS (50.0f) /* default release time in ms */
typedef struct ia_drc_peak_limiter_struct {
- FLOAT32 attack_time;
- FLOAT32 release_time;
- FLOAT32 attack_constant;
- FLOAT32 release_constant;
- FLOAT32 limit_threshold;
- UWORD32 num_channels;
- UWORD32 sample_rate;
- UWORD32 attack_time_samples;
- UWORD32 limiter_on;
- FLOAT32 gain_modified;
- FLOAT64 pre_smoothed_gain;
- FLOAT32* delayed_input;
- UWORD32 delayed_input_index;
- FLOAT32* max_buf;
- FLOAT32 min_gain;
- FLOAT32* buffer;
-}ia_drc_peak_limiter_struct;
+ FLOAT32 attack_time;
+ FLOAT32 release_time;
+ FLOAT32 attack_constant;
+ FLOAT32 release_constant;
+ FLOAT32 limit_threshold;
+ UWORD32 num_channels;
+ UWORD32 sample_rate;
+ UWORD32 attack_time_samples;
+ UWORD32 limiter_on;
+ FLOAT32 gain_modified;
+ FLOAT64 pre_smoothed_gain;
+ FLOAT32 *delayed_input;
+ UWORD32 delayed_input_index;
+ FLOAT32 *max_buf;
+ FLOAT32 min_gain;
+ FLOAT32 *buffer;
+} ia_drc_peak_limiter_struct;
WORD32 impd_peak_limiter_init(ia_drc_peak_limiter_struct *peak_limiter,
- FLOAT32 attack_time,
- FLOAT32 release_time,
- FLOAT32 limit_threshold,
- UWORD32 num_channels,
- UWORD32 sample_rate,
- FLOAT32 *buffer);
+ FLOAT32 attack_time, FLOAT32 release_time,
+ FLOAT32 limit_threshold, UWORD32 num_channels,
+ UWORD32 sample_rate, FLOAT32 *buffer);
-WORD32 impd_limiter_process(ia_drc_peak_limiter_struct *peak_limiter, FLOAT32 *samples, UWORD32 frame_len);
+WORD32 impd_limiter_process(ia_drc_peak_limiter_struct *peak_limiter,
+ FLOAT32 *samples, UWORD32 frame_len);
#endif
diff --git a/decoder/drc_src/impd_drc_peak_limiter_struct.h b/decoder/drc_src/impd_drc_peak_limiter_struct.h
index d025ce5..9ac6189 100644
--- a/decoder/drc_src/impd_drc_peak_limiter_struct.h
+++ b/decoder/drc_src/impd_drc_peak_limiter_struct.h
@@ -20,31 +20,26 @@
#ifndef IMPD_DRC_PEAK_LIMITER_STRUCT_H
#define IMPD_DRC_PEAK_LIMITER_STRUCT_H
-
-
-#define DEFAULT_ATTACK_TIME_MS (5.0f) /* default attack time in ms */
-#define DEFAULT_RELEASE_TIME_MS (50.0f) /* default release time in ms */
-
+#define DEFAULT_ATTACK_TIME_MS (5.0f) /* default attack time in ms */
+#define DEFAULT_RELEASE_TIME_MS (50.0f) /* default release time in ms */
typedef struct ia_drc_peak_limiter_struct {
- FLOAT32 attack_time;
- FLOAT32 release_time;
- FLOAT32 attack_constant;
- FLOAT32 release_constant;
- FLOAT32 limit_threshold;
- UWORD32 num_channels;
- UWORD32 sample_rate;
- UWORD32 attack_time_samples;
- UWORD32 limiter_on;
- FLOAT32 gain_modified;
- FLOAT64 pre_smoothed_gain;
- FLOAT32* delayed_input;
- UWORD32 delayed_input_index;
- FLOAT32* max_buf;
- FLOAT32 min_gain;
- FLOAT32* buffer;
-}ia_drc_peak_limiter_struct;
+ FLOAT32 attack_time;
+ FLOAT32 release_time;
+ FLOAT32 attack_constant;
+ FLOAT32 release_constant;
+ FLOAT32 limit_threshold;
+ UWORD32 num_channels;
+ UWORD32 sample_rate;
+ UWORD32 attack_time_samples;
+ UWORD32 limiter_on;
+ FLOAT32 gain_modified;
+ FLOAT64 pre_smoothed_gain;
+ FLOAT32* delayed_input;
+ UWORD32 delayed_input_index;
+ FLOAT32* max_buf;
+ FLOAT32 min_gain;
+ FLOAT32* buffer;
+} ia_drc_peak_limiter_struct;
#endif
-
-
diff --git a/decoder/drc_src/impd_drc_process.c b/decoder/drc_src/impd_drc_process.c
index 8370907..15115a2 100644
--- a/decoder/drc_src/impd_drc_process.c
+++ b/decoder/drc_src/impd_drc_process.c
@@ -31,527 +31,556 @@
#include "impd_drc_gain_dec.h"
#include "impd_drc_process_audio.h"
-
-WORD32 impd_apply_gains_and_add(ia_drc_instructions_struct* pstr_drc_instruction_arr,
- const WORD32 drc_instructions_index,
- ia_drc_params_struct* ia_drc_params_struct,
- ia_gain_buffer_struct* pstr_gain_buf,
- shape_filter_block shape_filter_block[],
- FLOAT32* deinterleaved_audio[],
-
- FLOAT32* channel_audio[],
- WORD32 impd_apply_gains)
-{
- WORD32 c, b, g, i;
- WORD32 offset = 0, signalIndex = 0;
- WORD32 gainIndexForGroup[CHANNEL_GROUP_COUNT_MAX];
- WORD32 signalIndexForChannel[MAX_CHANNEL_COUNT];
- FLOAT32* lpcm_gains;
- FLOAT32 sum;
- FLOAT32 drc_gain_last, gainThr;
- WORD32 iEnd, iStart;
- ia_drc_instructions_struct* str_drc_instruction_str = &(pstr_drc_instruction_arr[drc_instructions_index]);
-
- if (drc_instructions_index >= 0)
+WORD32 impd_apply_gains_and_add(
+ ia_drc_instructions_struct* pstr_drc_instruction_arr,
+ const WORD32 drc_instructions_index,
+ ia_drc_params_struct* ia_drc_params_struct,
+ ia_gain_buffer_struct* pstr_gain_buf,
+ shape_filter_block shape_filter_block[], FLOAT32* deinterleaved_audio[],
+
+ FLOAT32* channel_audio[], WORD32 impd_apply_gains) {
+ WORD32 c, b, g, i;
+ WORD32 offset = 0, signalIndex = 0;
+ WORD32 gainIndexForGroup[CHANNEL_GROUP_COUNT_MAX];
+ WORD32 signalIndexForChannel[MAX_CHANNEL_COUNT];
+ FLOAT32* lpcm_gains;
+ FLOAT32 sum;
+ FLOAT32 drc_gain_last, gainThr;
+ WORD32 iEnd, iStart;
+ ia_drc_instructions_struct* str_drc_instruction_str =
+ &(pstr_drc_instruction_arr[drc_instructions_index]);
+
+ if (drc_instructions_index >= 0) {
+ str_drc_instruction_str =
+ &(pstr_drc_instruction_arr[drc_instructions_index]);
{
- str_drc_instruction_str = &(pstr_drc_instruction_arr[drc_instructions_index]);
- {
- if (str_drc_instruction_str->drc_set_id > 0)
- {
- if (ia_drc_params_struct->delay_mode == DELAY_MODE_LOW_DELAY)
- {
- offset = ia_drc_params_struct->drc_frame_size;
- }
- gainIndexForGroup[0] = 0;
- for (g=0; g<str_drc_instruction_str->num_drc_ch_groups-1; g++)
- {
- gainIndexForGroup[g+1] = gainIndexForGroup[g] + str_drc_instruction_str->band_count_of_ch_group[g];
- }
- signalIndexForChannel[0] = 0;
- for (c=0; c<str_drc_instruction_str->audio_num_chan-1; c++)
- {
- if (str_drc_instruction_str->channel_group_of_ch[c] >= 0)
- {
- signalIndexForChannel[c+1] = signalIndexForChannel[c] + str_drc_instruction_str->band_count_of_ch_group[str_drc_instruction_str->channel_group_of_ch[c]];
- }
- else
- {
- signalIndexForChannel[c+1] = signalIndexForChannel[c] + 1;
- }
- }
-
- for (g=0; g<str_drc_instruction_str->num_drc_ch_groups; g++)
- {
- for (b=0; b<str_drc_instruction_str->band_count_of_ch_group[g]; b++)
- {
- if (str_drc_instruction_str->ch_group_parametric_drc_flag[g] == 0) {
- lpcm_gains = pstr_gain_buf->buf_interpolation[gainIndexForGroup[g]+b].lpcm_gains + MAX_SIGNAL_DELAY - ia_drc_params_struct->gain_delay_samples - ia_drc_params_struct->audio_delay_samples + offset;
- } else {
- lpcm_gains = pstr_gain_buf->buf_interpolation[gainIndexForGroup[g]+b].lpcm_gains + MAX_SIGNAL_DELAY + str_drc_instruction_str->parametric_drc_look_ahead_samples[g] - ia_drc_params_struct->audio_delay_samples;
- }
- iEnd = 0;
- iStart = 0;
- while (iEnd < ia_drc_params_struct->drc_frame_size)
- {
- if (shape_filter_block[g].shape_flter_block_flag) {
- drc_gain_last = shape_filter_block[g].drc_gain_last;
- gainThr = 0.0001f * drc_gain_last;
- while ((iEnd<ia_drc_params_struct->drc_frame_size) && (fabs(lpcm_gains[iEnd] - drc_gain_last) <= gainThr)) iEnd++;
- }
- else
- {
- iEnd = ia_drc_params_struct->drc_frame_size;
- }
-
- for (c=0; c<str_drc_instruction_str->audio_num_chan; c++)
-
- {
- if (g == str_drc_instruction_str->channel_group_of_ch[c])
- {
- signalIndex = signalIndexForChannel[c] + b;
-
- if(impd_apply_gains == 1) {
-
- impd_shape_filt_block_time_process(&shape_filter_block[g],
- &lpcm_gains[0],
- signalIndex,
- &deinterleaved_audio[signalIndex][0],
- iStart,
- iEnd);
-
- }
- else {
- for (i=iStart; i<iEnd; i++){
- deinterleaved_audio[signalIndex][i] = lpcm_gains[i];
- }
- }
-
-
-
-
- }
-
-
+ if (str_drc_instruction_str->drc_set_id > 0) {
+ if (ia_drc_params_struct->delay_mode == DELAY_MODE_LOW_DELAY) {
+ offset = ia_drc_params_struct->drc_frame_size;
+ }
+ gainIndexForGroup[0] = 0;
+ for (g = 0; g < str_drc_instruction_str->num_drc_ch_groups - 1; g++) {
+ gainIndexForGroup[g + 1] =
+ gainIndexForGroup[g] +
+ str_drc_instruction_str->band_count_of_ch_group[g];
+ }
+ signalIndexForChannel[0] = 0;
+ for (c = 0; c < str_drc_instruction_str->audio_num_chan - 1; c++) {
+ if (str_drc_instruction_str->channel_group_of_ch[c] >= 0) {
+ signalIndexForChannel[c + 1] =
+ signalIndexForChannel[c] +
+ str_drc_instruction_str->band_count_of_ch_group
+ [str_drc_instruction_str->channel_group_of_ch[c]];
+ } else {
+ signalIndexForChannel[c + 1] = signalIndexForChannel[c] + 1;
+ }
+ }
+ for (g = 0; g < str_drc_instruction_str->num_drc_ch_groups; g++) {
+ for (b = 0; b < str_drc_instruction_str->band_count_of_ch_group[g];
+ b++) {
+ if (str_drc_instruction_str->ch_group_parametric_drc_flag[g] == 0) {
+ lpcm_gains =
+ pstr_gain_buf->buf_interpolation[gainIndexForGroup[g] + b]
+ .lpcm_gains +
+ MAX_SIGNAL_DELAY - ia_drc_params_struct->gain_delay_samples -
+ ia_drc_params_struct->audio_delay_samples + offset;
+ } else {
+ lpcm_gains =
+ pstr_gain_buf->buf_interpolation[gainIndexForGroup[g] + b]
+ .lpcm_gains +
+ MAX_SIGNAL_DELAY +
+ str_drc_instruction_str
+ ->parametric_drc_look_ahead_samples[g] -
+ ia_drc_params_struct->audio_delay_samples;
+ }
+ iEnd = 0;
+ iStart = 0;
+ while (iEnd < ia_drc_params_struct->drc_frame_size) {
+ if (shape_filter_block[g].shape_flter_block_flag) {
+ drc_gain_last = shape_filter_block[g].drc_gain_last;
+ gainThr = 0.0001f * drc_gain_last;
+ while ((iEnd < ia_drc_params_struct->drc_frame_size) &&
+ (fabs(lpcm_gains[iEnd] - drc_gain_last) <= gainThr))
+ iEnd++;
+ } else {
+ iEnd = ia_drc_params_struct->drc_frame_size;
+ }
+
+ for (c = 0; c < str_drc_instruction_str->audio_num_chan; c++)
+
+ {
+ if (g == str_drc_instruction_str->channel_group_of_ch[c]) {
+ signalIndex = signalIndexForChannel[c] + b;
+
+ if (impd_apply_gains == 1) {
+ impd_shape_filt_block_time_process(
+ &shape_filter_block[g], &lpcm_gains[0], signalIndex,
+ &deinterleaved_audio[signalIndex][0], iStart, iEnd);
+
+ } else {
+ for (i = iStart; i < iEnd; i++) {
+ deinterleaved_audio[signalIndex][i] = lpcm_gains[i];
}
- if ((iEnd < ia_drc_params_struct->drc_frame_size) && (shape_filter_block[g].shape_flter_block_flag))
- {
- impd_shape_filt_block_adapt(lpcm_gains[iEnd], &shape_filter_block[g]);
- }
- iStart = iEnd;
- }
- }
+ }
}
+ }
+ if ((iEnd < ia_drc_params_struct->drc_frame_size) &&
+ (shape_filter_block[g].shape_flter_block_flag)) {
+ impd_shape_filt_block_adapt(lpcm_gains[iEnd],
+ &shape_filter_block[g]);
+ }
+ iStart = iEnd;
}
+ }
}
+ }
}
+ }
-signalIndex=0;
-
-if (str_drc_instruction_str->drc_set_id > 0)
- {
-
- for (c=0; c<str_drc_instruction_str->audio_num_chan; c++)
+ signalIndex = 0;
- {
- g = str_drc_instruction_str->channel_group_of_ch[c];
- if (g>=0)
- {
- for (i=0; i<ia_drc_params_struct->drc_frame_size; i++)
- {
- sum = 0.0f;
- for (b=0; b<str_drc_instruction_str->band_count_of_ch_group[g]; b++)
- {
- sum += deinterleaved_audio[signalIndex+b][i];
- }
+ if (str_drc_instruction_str->drc_set_id > 0) {
+ for (c = 0; c < str_drc_instruction_str->audio_num_chan; c++)
- channel_audio[c][i] = sum;
-
- }
- signalIndex += str_drc_instruction_str->band_count_of_ch_group[g];
- }
- else
- {
- for (i=0; i<ia_drc_params_struct->drc_frame_size; i++)
- {
- channel_audio[c][i] = deinterleaved_audio[signalIndex][i];
- }
- signalIndex++;
- }
- }
- }
- else
{
- for (c=0; c<str_drc_instruction_str->audio_num_chan; c++)
-
- {
- for (i=0; i<ia_drc_params_struct->drc_frame_size; i++)
- {
- channel_audio[c][i] = deinterleaved_audio[c][i];
- }
+ g = str_drc_instruction_str->channel_group_of_ch[c];
+ if (g >= 0) {
+ for (i = 0; i < ia_drc_params_struct->drc_frame_size; i++) {
+ sum = 0.0f;
+ for (b = 0; b < str_drc_instruction_str->band_count_of_ch_group[g];
+ b++) {
+ sum += deinterleaved_audio[signalIndex + b][i];
+ }
+
+ channel_audio[c][i] = sum;
+ }
+ signalIndex += str_drc_instruction_str->band_count_of_ch_group[g];
+ } else {
+ for (i = 0; i < ia_drc_params_struct->drc_frame_size; i++) {
+ channel_audio[c][i] = deinterleaved_audio[signalIndex][i];
}
+ signalIndex++;
+ }
}
+ } else {
+ for (c = 0; c < str_drc_instruction_str->audio_num_chan; c++)
+ {
+ for (i = 0; i < ia_drc_params_struct->drc_frame_size; i++) {
+ channel_audio[c][i] = deinterleaved_audio[c][i];
+ }
+ }
+ }
-
-
-
-
-
-
-
-
-
-
-
-
-
- return (0);
+ return (0);
}
-
-
-
-
-
/* subband-domain DRC: in-place application of DRC gains to audio frame */
WORD32
- impd_apply_gains_subband(ia_drc_instructions_struct* pstr_drc_instruction_arr,
- const WORD32 drc_instructions_index,
- ia_drc_params_struct* ia_drc_params_struct,
- ia_gain_buffer_struct* pstr_gain_buf,
- ia_overlap_params_struct* pstr_overlap_params,
- FLOAT32* deinterleaved_audio_delayed_re[],
- FLOAT32* deinterleaved_audio_delayed_im[],
- FLOAT32* deinterleaved_audio_re[],
- FLOAT32* deinterleaved_audio_im[])
-{
- WORD32 c, b, g, m, s;
- WORD32 gainIndexForGroup[CHANNEL_GROUP_COUNT_MAX];
- FLOAT32* lpcm_gains;
- FLOAT32 gainSb, gainLr;
- ia_drc_instructions_struct* str_drc_instruction_str;
- WORD32 offset = 0, signalIndex = 0;
- WORD32 drc_frame_sizeSb = 0;
- WORD32 nDecoderSubbands = 0;
- WORD32 L = 0; /* L: downsampling factor */
- WORD32 analysisDelay = 0;
- switch (ia_drc_params_struct->sub_band_domain_mode) {
- case SUBBAND_DOMAIN_MODE_QMF64:
- nDecoderSubbands = AUDIO_CODEC_SUBBAND_COUNT_QMF64;
- L = AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64;
- analysisDelay = AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_QMF64;
- break;
- case SUBBAND_DOMAIN_MODE_QMF71:
- nDecoderSubbands = AUDIO_CODEC_SUBBAND_COUNT_QMF71;
- L = AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF71;
- analysisDelay = AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_QMF71;
- break;
- case SUBBAND_DOMAIN_MODE_STFT256:
- nDecoderSubbands = AUDIO_CODEC_SUBBAND_COUNT_STFT256;
- L = AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_STFT256;
- analysisDelay = AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_STFT256;
- break;
- default:
- return -1;
- break;
- }
- drc_frame_sizeSb = ia_drc_params_struct->drc_frame_size/L;
-
- if (drc_instructions_index >= 0)
+impd_apply_gains_subband(ia_drc_instructions_struct* pstr_drc_instruction_arr,
+ const WORD32 drc_instructions_index,
+ ia_drc_params_struct* ia_drc_params_struct,
+ ia_gain_buffer_struct* pstr_gain_buf,
+ ia_overlap_params_struct* pstr_overlap_params,
+ FLOAT32* deinterleaved_audio_delayed_re[],
+ FLOAT32* deinterleaved_audio_delayed_im[],
+ FLOAT32* deinterleaved_audio_re[],
+ FLOAT32* deinterleaved_audio_im[]) {
+ WORD32 c, b, g, m, s;
+ WORD32 gainIndexForGroup[CHANNEL_GROUP_COUNT_MAX];
+ FLOAT32* lpcm_gains;
+ FLOAT32 gainSb, gainLr;
+ ia_drc_instructions_struct* str_drc_instruction_str;
+ WORD32 offset = 0, signalIndex = 0;
+ WORD32 drc_frame_sizeSb = 0;
+ WORD32 nDecoderSubbands = 0;
+ WORD32 L = 0; /* L: downsampling factor */
+ WORD32 analysisDelay = 0;
+ switch (ia_drc_params_struct->sub_band_domain_mode) {
+ case SUBBAND_DOMAIN_MODE_QMF64:
+ nDecoderSubbands = AUDIO_CODEC_SUBBAND_COUNT_QMF64;
+ L = AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64;
+ analysisDelay = AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_QMF64;
+ break;
+ case SUBBAND_DOMAIN_MODE_QMF71:
+ nDecoderSubbands = AUDIO_CODEC_SUBBAND_COUNT_QMF71;
+ L = AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF71;
+ analysisDelay = AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_QMF71;
+ break;
+ case SUBBAND_DOMAIN_MODE_STFT256:
+ nDecoderSubbands = AUDIO_CODEC_SUBBAND_COUNT_STFT256;
+ L = AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_STFT256;
+ analysisDelay = AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_STFT256;
+ break;
+ default:
+ return -1;
+ break;
+ }
+ drc_frame_sizeSb = ia_drc_params_struct->drc_frame_size / L;
+
+ if (drc_instructions_index >= 0) {
+ str_drc_instruction_str =
+ &(pstr_drc_instruction_arr[drc_instructions_index]);
{
- str_drc_instruction_str = &(pstr_drc_instruction_arr[drc_instructions_index]);
- {
- if (str_drc_instruction_str->drc_set_id > 0)
- {
- if (ia_drc_params_struct->delay_mode == DELAY_MODE_LOW_DELAY)
- {
- offset = ia_drc_params_struct->drc_frame_size;
- }
- gainIndexForGroup[0] = 0;
- for (g=0; g<str_drc_instruction_str->num_drc_ch_groups-1; g++)
- {
- gainIndexForGroup[g+1] = gainIndexForGroup[g] + str_drc_instruction_str->band_count_of_ch_group[g]; /* index of first gain sequence in channel group */
- }
+ if (str_drc_instruction_str->drc_set_id > 0) {
+ if (ia_drc_params_struct->delay_mode == DELAY_MODE_LOW_DELAY) {
+ offset = ia_drc_params_struct->drc_frame_size;
+ }
+ gainIndexForGroup[0] = 0;
+ for (g = 0; g < str_drc_instruction_str->num_drc_ch_groups - 1; g++) {
+ gainIndexForGroup[g + 1] =
+ gainIndexForGroup[g] +
+ str_drc_instruction_str
+ ->band_count_of_ch_group[g]; /* index of first gain sequence
+ in channel group */
+ }
+ for (c = 0; c < str_drc_instruction_str->audio_num_chan; c++)
- for (c=0; c<str_drc_instruction_str->audio_num_chan; c++)
-
- {
- g = str_drc_instruction_str->channel_group_of_ch[c];
- if (g>=0)
- {
- for (m=0; m<drc_frame_sizeSb; m++)
- {
- if (str_drc_instruction_str->band_count_of_ch_group[g] > 1)
- { /* multiband DRC */
- for (s=0; s<nDecoderSubbands; s++)
- {
- gainSb = 0.0f;
- for (b=0; b<str_drc_instruction_str->band_count_of_ch_group[g]; b++)
- {
- if (str_drc_instruction_str->ch_group_parametric_drc_flag[g] == 0) {
- lpcm_gains = pstr_gain_buf->buf_interpolation[gainIndexForGroup[g]+b].lpcm_gains + MAX_SIGNAL_DELAY - ia_drc_params_struct->gain_delay_samples - ia_drc_params_struct->audio_delay_samples + offset;
- } else {
- lpcm_gains = pstr_gain_buf->buf_interpolation[gainIndexForGroup[g]+b].lpcm_gains + MAX_SIGNAL_DELAY + str_drc_instruction_str->parametric_drc_look_ahead_samples[g] - ia_drc_params_struct->audio_delay_samples + analysisDelay;
- }
- /* get gain for this timeslot by downsampling */
- gainLr = lpcm_gains[(m*L+(L-1)/2)];
- gainSb += pstr_overlap_params->str_group_overlap_params[g].str_band_overlap_params[b].overlap_weight[s] * gainLr;
- }
- deinterleaved_audio_re[signalIndex][m*nDecoderSubbands+s] = gainSb * deinterleaved_audio_delayed_re[signalIndex][m*nDecoderSubbands+s];
- if (ia_drc_params_struct->sub_band_domain_mode == SUBBAND_DOMAIN_MODE_STFT256) { /* For STFT filterbank, the real value of the nyquist band is stored at the imag value of the first band */
- if (s != 0)
- deinterleaved_audio_im[signalIndex][m*nDecoderSubbands+s] = gainSb * deinterleaved_audio_delayed_im[signalIndex][m*nDecoderSubbands+s];
- if (s == (nDecoderSubbands-1))
- deinterleaved_audio_im[signalIndex][m*nDecoderSubbands+0] = gainSb * deinterleaved_audio_delayed_im[signalIndex][m*nDecoderSubbands+0];
- } else {
- deinterleaved_audio_im[signalIndex][m*nDecoderSubbands+s] = gainSb * deinterleaved_audio_delayed_im[signalIndex][m*nDecoderSubbands+s];
- }
- }
- }
- else
- { /* single-band DRC */
- if (str_drc_instruction_str->ch_group_parametric_drc_flag[g] == 0) {
- lpcm_gains = pstr_gain_buf->buf_interpolation[gainIndexForGroup[g]].lpcm_gains + MAX_SIGNAL_DELAY - ia_drc_params_struct->gain_delay_samples - ia_drc_params_struct->audio_delay_samples + offset;
- } else {
- lpcm_gains = pstr_gain_buf->buf_interpolation[gainIndexForGroup[g]].lpcm_gains + MAX_SIGNAL_DELAY + str_drc_instruction_str->parametric_drc_look_ahead_samples[g] - ia_drc_params_struct->audio_delay_samples + analysisDelay;
- }
- /* get gain for this timeslot by downsampling */
- gainSb = lpcm_gains[(m*L+(L-1)/2)];
- for (s=0; s<nDecoderSubbands; s++)
- {
- deinterleaved_audio_re[signalIndex][m*nDecoderSubbands+s] = gainSb * deinterleaved_audio_delayed_re[signalIndex][m*nDecoderSubbands+s];
- deinterleaved_audio_im[signalIndex][m*nDecoderSubbands+s] = gainSb * deinterleaved_audio_delayed_im[signalIndex][m*nDecoderSubbands+s];
- }
- }
- }
+ {
+ g = str_drc_instruction_str->channel_group_of_ch[c];
+ if (g >= 0) {
+ for (m = 0; m < drc_frame_sizeSb; m++) {
+ if (str_drc_instruction_str->band_count_of_ch_group[g] >
+ 1) { /* multiband DRC */
+ for (s = 0; s < nDecoderSubbands; s++) {
+ gainSb = 0.0f;
+ for (b = 0;
+ b < str_drc_instruction_str->band_count_of_ch_group[g];
+ b++) {
+ if (str_drc_instruction_str
+ ->ch_group_parametric_drc_flag[g] == 0) {
+ lpcm_gains =
+ pstr_gain_buf
+ ->buf_interpolation[gainIndexForGroup[g] + b]
+ .lpcm_gains +
+ MAX_SIGNAL_DELAY -
+ ia_drc_params_struct->gain_delay_samples -
+ ia_drc_params_struct->audio_delay_samples + offset;
+ } else {
+ lpcm_gains =
+ pstr_gain_buf
+ ->buf_interpolation[gainIndexForGroup[g] + b]
+ .lpcm_gains +
+ MAX_SIGNAL_DELAY +
+ str_drc_instruction_str
+ ->parametric_drc_look_ahead_samples[g] -
+ ia_drc_params_struct->audio_delay_samples +
+ analysisDelay;
}
- signalIndex++;
+ /* get gain for this timeslot by downsampling */
+ gainLr = lpcm_gains[(m * L + (L - 1) / 2)];
+ gainSb += pstr_overlap_params->str_group_overlap_params[g]
+ .str_band_overlap_params[b]
+ .overlap_weight[s] *
+ gainLr;
+ }
+ deinterleaved_audio_re[signalIndex][m * nDecoderSubbands +
+ s] =
+ gainSb *
+ deinterleaved_audio_delayed_re[signalIndex]
+ [m * nDecoderSubbands + s];
+ if (ia_drc_params_struct->sub_band_domain_mode ==
+ SUBBAND_DOMAIN_MODE_STFT256) { /* For STFT filterbank, the
+ real value of the
+ nyquist band is stored
+ at the imag value of the
+ first band */
+ if (s != 0)
+ deinterleaved_audio_im[signalIndex][m * nDecoderSubbands +
+ s] =
+ gainSb *
+ deinterleaved_audio_delayed_im[signalIndex]
+ [m * nDecoderSubbands +
+ s];
+ if (s == (nDecoderSubbands - 1))
+ deinterleaved_audio_im[signalIndex][m * nDecoderSubbands +
+ 0] =
+ gainSb *
+ deinterleaved_audio_delayed_im[signalIndex]
+ [m * nDecoderSubbands +
+ 0];
+ } else {
+ deinterleaved_audio_im[signalIndex][m * nDecoderSubbands +
+ s] =
+ gainSb *
+ deinterleaved_audio_delayed_im[signalIndex]
+ [m * nDecoderSubbands +
+ s];
+ }
}
+ } else { /* single-band DRC */
+ if (str_drc_instruction_str->ch_group_parametric_drc_flag[g] ==
+ 0) {
+ lpcm_gains =
+ pstr_gain_buf->buf_interpolation[gainIndexForGroup[g]]
+ .lpcm_gains +
+ MAX_SIGNAL_DELAY -
+ ia_drc_params_struct->gain_delay_samples -
+ ia_drc_params_struct->audio_delay_samples + offset;
+ } else {
+ lpcm_gains =
+ pstr_gain_buf->buf_interpolation[gainIndexForGroup[g]]
+ .lpcm_gains +
+ MAX_SIGNAL_DELAY +
+ str_drc_instruction_str
+ ->parametric_drc_look_ahead_samples[g] -
+ ia_drc_params_struct->audio_delay_samples + analysisDelay;
+ }
+ /* get gain for this timeslot by downsampling */
+ gainSb = lpcm_gains[(m * L + (L - 1) / 2)];
+ for (s = 0; s < nDecoderSubbands; s++) {
+ deinterleaved_audio_re[signalIndex][m * nDecoderSubbands +
+ s] =
+ gainSb *
+ deinterleaved_audio_delayed_re[signalIndex]
+ [m * nDecoderSubbands + s];
+ deinterleaved_audio_im[signalIndex][m * nDecoderSubbands +
+ s] =
+ gainSb *
+ deinterleaved_audio_delayed_im[signalIndex]
+ [m * nDecoderSubbands + s];
+ }
+ }
}
+ }
+ signalIndex++;
}
+ }
}
- return (0);
+ }
+ return (0);
}
WORD32
impd_filter_banks_process(ia_drc_instructions_struct* pstr_drc_instruction_arr,
- const WORD32 drc_instructions_index,
- ia_drc_params_struct* ia_drc_params_struct,
- FLOAT32* audio_io_buf[],
- ia_audio_band_buffer_struct* audio_band_buffer,
- ia_filter_banks_struct* ia_filter_banks_struct,
- const WORD32 passThru)
-{
- WORD32 c, g, e, i, num_bands;
- //WORD32 err = 0;
- FLOAT32* audio_in;
- FLOAT32** audio_out;
- ia_drc_filter_bank_struct* str_drc_filter_bank;
- ia_drc_instructions_struct* str_drc_instruction_str;
- WORD32 drc_frame_size = ia_drc_params_struct->drc_frame_size;
-
- if (drc_instructions_index >= 0) {
- str_drc_instruction_str = &(pstr_drc_instruction_arr[drc_instructions_index]);
- } else {
- return -1;
- }
-
- e=0;
-
- for (c=0; c<str_drc_instruction_str->audio_num_chan; c++)
-
- {
- str_drc_filter_bank = NULL;
-
- audio_in = audio_io_buf[c];
-
- audio_out = &(audio_band_buffer->non_interleaved_audio[e]);
- if ((passThru == 0) && (drc_instructions_index >= 0))
- {
- if (str_drc_instruction_str->drc_set_id < 0)
- {
- num_bands = 1;
- }
- else
- {
- g = str_drc_instruction_str->channel_group_of_ch[c];
- if (g== -1)
- {
- num_bands = 1;
- //if (ia_filter_banks_struct->str_drc_filter_bank != NULL)
- //{
- str_drc_filter_bank = &(ia_filter_banks_struct->str_drc_filter_bank[str_drc_instruction_str->num_drc_ch_groups]);
- //}
- }
- else
- {
- num_bands = str_drc_instruction_str->band_count_of_ch_group[g];
- //if (ia_filter_banks_struct->str_drc_filter_bank != NULL)
- //{
- str_drc_filter_bank = &(ia_filter_banks_struct->str_drc_filter_bank[g]);
- //}
- }
- //if (ia_filter_banks_struct->str_drc_filter_bank != NULL)
- //{
- //if (&str_drc_filter_bank->str_all_pass_cascade != NULL)
- //{
- impd_all_pass_cascade_process(&str_drc_filter_bank->str_all_pass_cascade, c, drc_frame_size, audio_in);
- //}
- //}
- }
- }
- else
- {
- num_bands = 1;
+ const WORD32 drc_instructions_index,
+ ia_drc_params_struct* ia_drc_params_struct,
+ FLOAT32* audio_io_buf[],
+ ia_audio_band_buffer_struct* audio_band_buffer,
+ ia_filter_banks_struct* ia_filter_banks_struct,
+ const WORD32 passThru) {
+ WORD32 c, g, e, i, num_bands;
+ // WORD32 err = 0;
+ FLOAT32* audio_in;
+ FLOAT32** audio_out;
+ ia_drc_filter_bank_struct* str_drc_filter_bank;
+ ia_drc_instructions_struct* str_drc_instruction_str;
+ WORD32 drc_frame_size = ia_drc_params_struct->drc_frame_size;
+
+ if (drc_instructions_index >= 0) {
+ str_drc_instruction_str =
+ &(pstr_drc_instruction_arr[drc_instructions_index]);
+ } else {
+ return -1;
+ }
+
+ e = 0;
+
+ for (c = 0; c < str_drc_instruction_str->audio_num_chan; c++)
+
+ {
+ str_drc_filter_bank = NULL;
+
+ audio_in = audio_io_buf[c];
+
+ audio_out = &(audio_band_buffer->non_interleaved_audio[e]);
+ if ((passThru == 0) && (drc_instructions_index >= 0)) {
+ if (str_drc_instruction_str->drc_set_id < 0) {
+ num_bands = 1;
+ } else {
+ g = str_drc_instruction_str->channel_group_of_ch[c];
+ if (g == -1) {
+ num_bands = 1;
+ // if (ia_filter_banks_struct->str_drc_filter_bank != NULL)
+ //{
+ str_drc_filter_bank =
+ &(ia_filter_banks_struct->str_drc_filter_bank
+ [str_drc_instruction_str->num_drc_ch_groups]);
+ //}
+ } else {
+ num_bands = str_drc_instruction_str->band_count_of_ch_group[g];
+ // if (ia_filter_banks_struct->str_drc_filter_bank != NULL)
+ //{
+ str_drc_filter_bank =
+ &(ia_filter_banks_struct->str_drc_filter_bank[g]);
+ //}
}
- switch (num_bands) {
- case 1:
- for (i=0; i<drc_frame_size; i++)
- {
- audio_out[0][i] = audio_in[i];
- }
- e++;
- break;
- case 2:
- impd_two_band_filter_process(&str_drc_filter_bank->str_two_band_bank,
- c,
- drc_frame_size,
- audio_in,
- audio_out);
- e+=2;
- break;
- case 3:
- impd_three_band_filter_process(&str_drc_filter_bank->str_three_band_bank,
- c,
- drc_frame_size,
- audio_in,
- audio_out);
- e+=3;
- break;
- case 4:
- impd_four_band_filter_process(&str_drc_filter_bank->str_four_band_bank,
- c,
- drc_frame_size,
- audio_in,
- audio_out);
- e+=4;
- break;
- default:
- return (PARAM_ERROR);
- break;
+ // if (ia_filter_banks_struct->str_drc_filter_bank != NULL)
+ //{
+ // if (&str_drc_filter_bank->str_all_pass_cascade != NULL)
+ //{
+ impd_all_pass_cascade_process(
+ &str_drc_filter_bank->str_all_pass_cascade, c, drc_frame_size,
+ audio_in);
+ //}
+ //}
+ }
+ } else {
+ num_bands = 1;
+ }
+ switch (num_bands) {
+ case 1:
+ for (i = 0; i < drc_frame_size; i++) {
+ audio_out[0][i] = audio_in[i];
}
+ e++;
+ break;
+ case 2:
+ impd_two_band_filter_process(&str_drc_filter_bank->str_two_band_bank, c,
+ drc_frame_size, audio_in, audio_out);
+ e += 2;
+ break;
+ case 3:
+ impd_three_band_filter_process(
+ &str_drc_filter_bank->str_three_band_bank, c, drc_frame_size,
+ audio_in, audio_out);
+ e += 3;
+ break;
+ case 4:
+ impd_four_band_filter_process(&str_drc_filter_bank->str_four_band_bank,
+ c, drc_frame_size, audio_in, audio_out);
+ e += 4;
+ break;
+ default:
+ return (PARAM_ERROR);
+ break;
}
+ }
- return (0);
+ return (0);
}
-
-
WORD32
-impd_store_audio_io_buffer_time(FLOAT32* audio_in_out_buf[],
- ia_audio_in_out_buf* audio_io_buf_internal)
-{
- WORD32 i,j;
-
- if (audio_io_buf_internal->audio_delay_samples) {
- for (i=0; i<audio_io_buf_internal->audio_num_chan; i++) {
- for (j=0; j<audio_io_buf_internal->frame_size; j++) {
- audio_io_buf_internal->audio_io_buffer_delayed[i][audio_io_buf_internal->audio_delay_samples+j] = audio_in_out_buf[i][j];
- }
- }
- } else {
- audio_io_buf_internal->audio_io_buffer_delayed = audio_in_out_buf;
- audio_io_buf_internal->audio_in_out_buf = audio_in_out_buf;
+impd_store_audio_io_buffer_time(FLOAT32* audio_in_out_buf[],
+ ia_audio_in_out_buf* audio_io_buf_internal) {
+ WORD32 i, j;
+
+ if (audio_io_buf_internal->audio_delay_samples) {
+ for (i = 0; i < audio_io_buf_internal->audio_num_chan; i++) {
+ for (j = 0; j < audio_io_buf_internal->frame_size; j++) {
+ audio_io_buf_internal->audio_io_buffer_delayed
+ [i][audio_io_buf_internal->audio_delay_samples + j] =
+ audio_in_out_buf[i][j];
+ }
}
+ } else {
+ audio_io_buf_internal->audio_io_buffer_delayed = audio_in_out_buf;
+ audio_io_buf_internal->audio_in_out_buf = audio_in_out_buf;
+ }
- return 0;
+ return 0;
}
WORD32
-impd_store_audio_io_buffer_freq(FLOAT32* audio_real_buff[],
- FLOAT32* audio_imag_buff[],
- ia_audio_in_out_buf* audio_io_buf_internal)
-{
- WORD32 i,j;
-
- if (audio_io_buf_internal->audio_delay_sub_band_samples) {
- for (i=0; i<audio_io_buf_internal->audio_num_chan; i++) {
- for (j=0; j<audio_io_buf_internal->audio_sub_band_frame_size*audio_io_buf_internal->audio_sub_band_count; j++) {
- audio_io_buf_internal->audio_buffer_delayed_real[i][audio_io_buf_internal->audio_delay_sub_band_samples*audio_io_buf_internal->audio_sub_band_count+j] = audio_real_buff[i][j];
- audio_io_buf_internal->audio_buffer_delayed_imag[i][audio_io_buf_internal->audio_delay_sub_band_samples*audio_io_buf_internal->audio_sub_band_count+j] = audio_imag_buff[i][j];
- }
- }
- } else {
- audio_io_buf_internal->audio_buffer_delayed_real = audio_real_buff;
- audio_io_buf_internal->audio_buffer_delayed_imag = audio_imag_buff;
- audio_io_buf_internal->audio_real_buff = audio_real_buff;
- audio_io_buf_internal->audio_imag_buff = audio_imag_buff;
+impd_store_audio_io_buffer_freq(FLOAT32* audio_real_buff[],
+ FLOAT32* audio_imag_buff[],
+ ia_audio_in_out_buf* audio_io_buf_internal) {
+ WORD32 i, j;
+
+ if (audio_io_buf_internal->audio_delay_sub_band_samples) {
+ for (i = 0; i < audio_io_buf_internal->audio_num_chan; i++) {
+ for (j = 0; j < audio_io_buf_internal->audio_sub_band_frame_size *
+ audio_io_buf_internal->audio_sub_band_count;
+ j++) {
+ audio_io_buf_internal->audio_buffer_delayed_real
+ [i][audio_io_buf_internal->audio_delay_sub_band_samples *
+ audio_io_buf_internal->audio_sub_band_count +
+ j] = audio_real_buff[i][j];
+ audio_io_buf_internal->audio_buffer_delayed_imag
+ [i][audio_io_buf_internal->audio_delay_sub_band_samples *
+ audio_io_buf_internal->audio_sub_band_count +
+ j] = audio_imag_buff[i][j];
+ }
}
-
- return 0;
+ } else {
+ audio_io_buf_internal->audio_buffer_delayed_real = audio_real_buff;
+ audio_io_buf_internal->audio_buffer_delayed_imag = audio_imag_buff;
+ audio_io_buf_internal->audio_real_buff = audio_real_buff;
+ audio_io_buf_internal->audio_imag_buff = audio_imag_buff;
+ }
+
+ return 0;
}
WORD32
-impd_retrieve_audio_io_buffer_time(FLOAT32* audio_in_out_buf[],
- ia_audio_in_out_buf* audio_io_buf_internal)
-{
- WORD32 i,j;
-
- if (audio_io_buf_internal->audio_delay_samples) {
- for (i=0; i<audio_io_buf_internal->audio_num_chan; i++) {
- for (j=0; j<audio_io_buf_internal->frame_size; j++) {
- audio_in_out_buf[i][j] = audio_io_buf_internal->audio_io_buffer_delayed[i][j];
- }
- }
+impd_retrieve_audio_io_buffer_time(FLOAT32* audio_in_out_buf[],
+ ia_audio_in_out_buf* audio_io_buf_internal) {
+ WORD32 i, j;
+
+ if (audio_io_buf_internal->audio_delay_samples) {
+ for (i = 0; i < audio_io_buf_internal->audio_num_chan; i++) {
+ for (j = 0; j < audio_io_buf_internal->frame_size; j++) {
+ audio_in_out_buf[i][j] =
+ audio_io_buf_internal->audio_io_buffer_delayed[i][j];
+ }
}
+ }
- return 0;
+ return 0;
}
WORD32
-impd_retrieve_audio_buffer_freq(FLOAT32* audio_real_buff[],
- FLOAT32* audio_imag_buff[],
- ia_audio_in_out_buf* audio_io_buf_internal)
-{
- WORD32 i,j;
-
- if (audio_io_buf_internal->audio_delay_sub_band_samples) {
- for (i=0; i<audio_io_buf_internal->audio_num_chan; i++) {
- for (j=0; j<audio_io_buf_internal->audio_sub_band_frame_size*audio_io_buf_internal->audio_sub_band_count; j++) {
- audio_real_buff[i][j] = audio_io_buf_internal->audio_buffer_delayed_real[i][audio_io_buf_internal->audio_sub_band_count+j];
- audio_imag_buff[i][j] = audio_io_buf_internal->audio_buffer_delayed_imag[i][audio_io_buf_internal->audio_sub_band_count+j];
- }
- }
+impd_retrieve_audio_buffer_freq(FLOAT32* audio_real_buff[],
+ FLOAT32* audio_imag_buff[],
+ ia_audio_in_out_buf* audio_io_buf_internal) {
+ WORD32 i, j;
+
+ if (audio_io_buf_internal->audio_delay_sub_band_samples) {
+ for (i = 0; i < audio_io_buf_internal->audio_num_chan; i++) {
+ for (j = 0; j < audio_io_buf_internal->audio_sub_band_frame_size *
+ audio_io_buf_internal->audio_sub_band_count;
+ j++) {
+ audio_real_buff[i][j] =
+ audio_io_buf_internal->audio_buffer_delayed_real
+ [i][audio_io_buf_internal->audio_sub_band_count + j];
+ audio_imag_buff[i][j] =
+ audio_io_buf_internal->audio_buffer_delayed_imag
+ [i][audio_io_buf_internal->audio_sub_band_count + j];
+ }
}
+ }
- return 0;
+ return 0;
}
WORD32
-impd_advance_audio_io_buffer_time(ia_audio_in_out_buf* audio_io_buf_internal)
-{
- WORD32 i;
- if (audio_io_buf_internal->audio_delay_samples) {
- for (i=0; i<audio_io_buf_internal->audio_num_chan; i++) {
- memmove(audio_io_buf_internal->audio_io_buffer_delayed[i], &audio_io_buf_internal->audio_io_buffer_delayed[i][audio_io_buf_internal->frame_size],sizeof(FLOAT32) * audio_io_buf_internal->audio_delay_samples);
- }
+impd_advance_audio_io_buffer_time(ia_audio_in_out_buf* audio_io_buf_internal) {
+ WORD32 i;
+ if (audio_io_buf_internal->audio_delay_samples) {
+ for (i = 0; i < audio_io_buf_internal->audio_num_chan; i++) {
+ memmove(
+ audio_io_buf_internal->audio_io_buffer_delayed[i],
+ &audio_io_buf_internal
+ ->audio_io_buffer_delayed[i][audio_io_buf_internal->frame_size],
+ sizeof(FLOAT32) * audio_io_buf_internal->audio_delay_samples);
}
+ }
- return 0;
+ return 0;
}
WORD32
-impd_advance_audio_buff_freq(ia_audio_in_out_buf* audio_io_buf_internal)
-{
- WORD32 i;
- if (audio_io_buf_internal->audio_delay_sub_band_samples) {
- for (i=0; i<audio_io_buf_internal->audio_num_chan; i++) {
- memmove(audio_io_buf_internal->audio_buffer_delayed_real[i], &audio_io_buf_internal->audio_buffer_delayed_real[i][audio_io_buf_internal->audio_sub_band_frame_size * audio_io_buf_internal->audio_sub_band_count],sizeof(FLOAT32) * audio_io_buf_internal->audio_delay_sub_band_samples * audio_io_buf_internal->audio_sub_band_count);
- memmove(audio_io_buf_internal->audio_buffer_delayed_imag[i], &audio_io_buf_internal->audio_buffer_delayed_imag[i][audio_io_buf_internal->audio_sub_band_frame_size * audio_io_buf_internal->audio_sub_band_count],sizeof(FLOAT32) * audio_io_buf_internal->audio_delay_sub_band_samples * audio_io_buf_internal->audio_sub_band_count);
- }
+impd_advance_audio_buff_freq(ia_audio_in_out_buf* audio_io_buf_internal) {
+ WORD32 i;
+ if (audio_io_buf_internal->audio_delay_sub_band_samples) {
+ for (i = 0; i < audio_io_buf_internal->audio_num_chan; i++) {
+ memmove(audio_io_buf_internal->audio_buffer_delayed_real[i],
+ &audio_io_buf_internal->audio_buffer_delayed_real
+ [i][audio_io_buf_internal->audio_sub_band_frame_size *
+ audio_io_buf_internal->audio_sub_band_count],
+ sizeof(FLOAT32) *
+ audio_io_buf_internal->audio_delay_sub_band_samples *
+ audio_io_buf_internal->audio_sub_band_count);
+ memmove(audio_io_buf_internal->audio_buffer_delayed_imag[i],
+ &audio_io_buf_internal->audio_buffer_delayed_imag
+ [i][audio_io_buf_internal->audio_sub_band_frame_size *
+ audio_io_buf_internal->audio_sub_band_count],
+ sizeof(FLOAT32) *
+ audio_io_buf_internal->audio_delay_sub_band_samples *
+ audio_io_buf_internal->audio_sub_band_count);
}
- return 0;
+ }
+ return 0;
}
-
diff --git a/decoder/drc_src/impd_drc_process_audio.h b/decoder/drc_src/impd_drc_process_audio.h
index d7f8f5f..9a60280 100644
--- a/decoder/drc_src/impd_drc_process_audio.h
+++ b/decoder/drc_src/impd_drc_process_audio.h
@@ -21,70 +21,67 @@
#define IMPD_DRC_PROCESS_AUDIO_H
#ifdef __cplusplus
-extern "C"
-{
+extern "C" {
#endif
typedef struct {
- WORD32 multiband_audio_sig_count;
- WORD32 frame_size;
- FLOAT32** non_interleaved_audio;
+ WORD32 multiband_audio_sig_count;
+ WORD32 frame_size;
+ FLOAT32** non_interleaved_audio;
} ia_audio_band_buffer_struct;
typedef struct {
- WORD32 audio_num_chan;
- WORD32 frame_size;
- WORD32 audio_sub_band_count;
- WORD32 audio_sub_band_frame_size;
- WORD32 audio_delay_samples;
- WORD32 audio_delay_sub_band_samples;
- FLOAT32** audio_io_buffer_delayed;
- FLOAT32** audio_buffer_delayed_real;
- FLOAT32** audio_buffer_delayed_imag;
- FLOAT32** audio_in_out_buf;
- FLOAT32** audio_real_buff;
- FLOAT32** audio_imag_buff;
+ WORD32 audio_num_chan;
+ WORD32 frame_size;
+ WORD32 audio_sub_band_count;
+ WORD32 audio_sub_band_frame_size;
+ WORD32 audio_delay_samples;
+ WORD32 audio_delay_sub_band_samples;
+ FLOAT32** audio_io_buffer_delayed;
+ FLOAT32** audio_buffer_delayed_real;
+ FLOAT32** audio_buffer_delayed_imag;
+ FLOAT32** audio_in_out_buf;
+ FLOAT32** audio_real_buff;
+ FLOAT32** audio_imag_buff;
} ia_audio_in_out_buf;
-
WORD32
impd_apply_gains_subband(ia_drc_instructions_struct* pstr_drc_instruction_arr,
- const WORD32 drc_instructions_index,
- ia_drc_params_struct* ia_drc_params_struct,
- ia_gain_buffer_struct* pstr_gain_buf,
- ia_overlap_params_struct* pstr_overlap_params,
- FLOAT32* deinterleaved_audio_delayed_re[],
- FLOAT32* deinterleaved_audio_delayed_im[],
- FLOAT32* deinterleaved_audio_re[],
- FLOAT32* deinterleaved_audio_im[]);
-
+ const WORD32 drc_instructions_index,
+ ia_drc_params_struct* ia_drc_params_struct,
+ ia_gain_buffer_struct* pstr_gain_buf,
+ ia_overlap_params_struct* pstr_overlap_params,
+ FLOAT32* deinterleaved_audio_delayed_re[],
+ FLOAT32* deinterleaved_audio_delayed_im[],
+ FLOAT32* deinterleaved_audio_re[],
+ FLOAT32* deinterleaved_audio_im[]);
WORD32
impd_filter_banks_process(ia_drc_instructions_struct* pstr_drc_instruction_arr,
- const WORD32 drc_instructions_index,
- ia_drc_params_struct* ia_drc_params_struct,
- FLOAT32* audio_io_buf[],
- ia_audio_band_buffer_struct* audio_band_buffer,
- ia_filter_banks_struct* ia_filter_banks_struct,
- const WORD32 passThru);
+ const WORD32 drc_instructions_index,
+ ia_drc_params_struct* ia_drc_params_struct,
+ FLOAT32* audio_io_buf[],
+ ia_audio_band_buffer_struct* audio_band_buffer,
+ ia_filter_banks_struct* ia_filter_banks_struct,
+ const WORD32 passThru);
WORD32
-impd_store_audio_io_buffer_time(FLOAT32* audio_in_out_buf[],
- ia_audio_in_out_buf* audio_io_buf_internal);
+impd_store_audio_io_buffer_time(FLOAT32* audio_in_out_buf[],
+ ia_audio_in_out_buf* audio_io_buf_internal);
WORD32
-impd_store_audio_io_buffer_freq(FLOAT32* audio_real_buff[],
- FLOAT32* audio_imag_buff[],
- ia_audio_in_out_buf* audio_io_buf_internal);
+impd_store_audio_io_buffer_freq(FLOAT32* audio_real_buff[],
+ FLOAT32* audio_imag_buff[],
+ ia_audio_in_out_buf* audio_io_buf_internal);
WORD32
-impd_retrieve_audio_io_buffer_time(FLOAT32* audio_in_out_buf[],
- ia_audio_in_out_buf* audio_io_buf_internal);
+impd_retrieve_audio_io_buffer_time(FLOAT32* audio_in_out_buf[],
+ ia_audio_in_out_buf* audio_io_buf_internal);
WORD32
-impd_retrieve_audio_buffer_freq(FLOAT32* audio_real_buff[],
- FLOAT32* audio_imag_buff[],
- ia_audio_in_out_buf* audio_io_buf_internal);
+impd_retrieve_audio_buffer_freq(FLOAT32* audio_real_buff[],
+ FLOAT32* audio_imag_buff[],
+ ia_audio_in_out_buf* audio_io_buf_internal);
WORD32
impd_advance_audio_io_buffer_time(ia_audio_in_out_buf* audio_io_buf_internal);
diff --git a/decoder/drc_src/impd_drc_qmf_filter.h b/decoder/drc_src/impd_drc_qmf_filter.h
index 051f44c..ab68ec1 100644
--- a/decoder/drc_src/impd_drc_qmf_filter.h
+++ b/decoder/drc_src/impd_drc_qmf_filter.h
@@ -20,21 +20,17 @@
#ifndef IMPD_DRC_QMF_FILTER_H
#define IMPD_DRC_QMF_FILTER_H
+#define QMF_NUM_FILT_BANDS 64
+#define QMF_FILT_RESOLUTION 64
-#define QMF_NUM_FILT_BANDS 64
-#define QMF_FILT_RESOLUTION 64
+typedef struct ia_drc_qmf_filt_struct {
+ FLOAT64* ana_buff;
+ FLOAT64* syn_buff;
+ FLOAT64 ana_tab_real[QMF_NUM_FILT_BANDS][2 * QMF_NUM_FILT_BANDS];
+ FLOAT64 ana_tab_imag[QMF_NUM_FILT_BANDS][2 * QMF_NUM_FILT_BANDS];
+ FLOAT64 syn_tab_real[2 * QMF_NUM_FILT_BANDS][QMF_NUM_FILT_BANDS];
+ FLOAT64 syn_tab_imag[2 * QMF_NUM_FILT_BANDS][QMF_NUM_FILT_BANDS];
-
-typedef struct ia_drc_qmf_filt_struct
-{
-
-FLOAT64* ana_buff;
-FLOAT64* syn_buff;
-FLOAT64 ana_tab_real[QMF_NUM_FILT_BANDS][2*QMF_NUM_FILT_BANDS];
-FLOAT64 ana_tab_imag[QMF_NUM_FILT_BANDS][2*QMF_NUM_FILT_BANDS];
-FLOAT64 syn_tab_real[2*QMF_NUM_FILT_BANDS][QMF_NUM_FILT_BANDS];
-FLOAT64 syn_tab_imag[2*QMF_NUM_FILT_BANDS][QMF_NUM_FILT_BANDS];
-
-}ia_drc_qmf_filt_struct;
+} ia_drc_qmf_filt_struct;
#endif
diff --git a/decoder/drc_src/impd_drc_rom.c b/decoder/drc_src/impd_drc_rom.c
index e741dc0..ad264bb 100644
--- a/decoder/drc_src/impd_drc_rom.c
+++ b/decoder/drc_src/impd_drc_rom.c
@@ -28,501 +28,180 @@
#include "impd_drc_filter_bank.h"
#include "impd_drc_rom.h"
-const FLOAT32 samp_rate_tbl[13][12]=
-{
- {1.559742927551f,-2.926673889160f,1.378173947334f,-1.844531774521f,0.855774641037f,0.997517585754f,-1.995035171509f,0.997517585754f,-1.995032072067f,0.995038211346f},
- {1.557545065880f,-2.905559301376f,1.361245870590f,-1.830842256546f,0.844074070454f,0.997298538685f,-1.994597077370f,0.997298538685f,-1.994593381882f,0.994600534439f},
- {1.547380685806f,-2.808161973953f,1.285161137581f,-1.767331838608f,0.791711509228f,0.996279776096f,-1.992559552193f,0.996279776096f,-1.992552518845f,0.992566406727f},
- {1.535182833672f,-2.691803932190f,1.198426246643f,-1.690699458122f,0.732504665852f,0.995044350624f,-1.990088701248f,0.995044350624f,-1.990076303482f,0.990100920200f},
- {1.530909657478f,-2.651169300079f,1.169166922569f,-1.663750052452f,0.712657511234f,0.994607865810f,-1.989215731621f,0.994607865810f,-1.989201068878f,0.989230215549f},
- {1.511321425438f,-2.465713739395f,1.042117238045f,-1.539572954178f,0.627297878265f,0.992580235004f,-1.985160470009f,0.992580235004f,-1.985132932663f,0.985188126564f},
- {1.488207340240f,-2.248480796814f,0.906192243099f,-1.391770243645f,0.537688970566f,0.990125238895f,-1.980250477791f,0.990125238895f,-1.980201482773f,0.980299532413f},
- {1.480212569237f,-2.173723459244f,0.862487196922f,-1.340346932411f,0.509323298931f,0.989259064198f,-1.978518128395f,0.989259064198f,-1.978460073471f,0.978576123714f},
- {1.444234013557f,-1.839543223381f,0.685432314873f,-1.107139229774f,0.397262454033f,0.985242545605f,-1.970485091209f,0.985242545605f,-1.970375299454f,0.970594763756f},
- {1.403080821037f,-1.461511373520f,0.519652962685f,-0.837045848370f,0.298268288374f,0.980395674706f,-1.960791349411f,0.980395674706f,-1.960597157478f,0.960985362530f},
- {1.389132857323f,-1.334347724915f,0.471855700016f,-0.744739949703f,0.271380871534f,0.978689610958f,-1.957379221916f,0.978689610958f,-1.957149744034f,0.957608699799f},
- {1.327733159065f,-0.780098080635f,0.309720277786f,-0.334008187056f,0.191363617778f,0.970807731152f,-1.941615462303f,0.970807731152f,-1.941183090210f,0.942047894001f},
- {1.308971643448f,-0.612507879734f,0.275601744652f,-0.207099482417f,0.179165065289f,0.968287348747f,-1.936574697495f,0.968287348747f,-1.936063885689f,0.937085747719f}
-};
-
-
-
-const ia_delta_gain_code_table_struct ia_drc_gain_tbls_prof_0_1[NUM_GAIN_TBL_PROF_0_1_ENTRIES] =
-{
- { 2, 0x003 , -0.125f },
- { 2, 0x002 , 0.125f },
- { 3, 0x001 , -0.250f },
- { 3, 0x002 , 0.000f },
- { 4, 0x000 , -2.000f },
- { 5, 0x002 , -0.500f },
- { 5, 0x00F , -0.375f },
- { 5, 0x00E , 1.000f },
- { 6, 0x019 , -0.625f },
- { 6, 0x018 , 0.250f },
- { 6, 0x006 , 0.375f },
- { 7, 0x00F , -1.000f },
- { 7, 0x034 , -0.875f },
- { 7, 0x036 , -0.750f },
- { 7, 0x037 , 0.500f },
- { 8, 0x01D , 0.625f },
- { 9, 0x039 , -1.875f },
- { 9, 0x0D5 , -1.125f },
- { 9, 0x0D7 , 0.750f },
- { 9, 0x0D4 , 0.875f },
- { 10, 0x070 , -1.500f },
- { 10, 0x1AC , -1.375f },
- { 10, 0x1AD , -1.250f },
- { 11, 0x0E2 , -1.750f },
- { 11, 0x0E3 , -1.625f }
+const FLOAT32 samp_rate_tbl[13][12] = {
+ {1.559742927551f, -2.926673889160f, 1.378173947334f, -1.844531774521f,
+ 0.855774641037f, 0.997517585754f, -1.995035171509f, 0.997517585754f,
+ -1.995032072067f, 0.995038211346f},
+ {1.557545065880f, -2.905559301376f, 1.361245870590f, -1.830842256546f,
+ 0.844074070454f, 0.997298538685f, -1.994597077370f, 0.997298538685f,
+ -1.994593381882f, 0.994600534439f},
+ {1.547380685806f, -2.808161973953f, 1.285161137581f, -1.767331838608f,
+ 0.791711509228f, 0.996279776096f, -1.992559552193f, 0.996279776096f,
+ -1.992552518845f, 0.992566406727f},
+ {1.535182833672f, -2.691803932190f, 1.198426246643f, -1.690699458122f,
+ 0.732504665852f, 0.995044350624f, -1.990088701248f, 0.995044350624f,
+ -1.990076303482f, 0.990100920200f},
+ {1.530909657478f, -2.651169300079f, 1.169166922569f, -1.663750052452f,
+ 0.712657511234f, 0.994607865810f, -1.989215731621f, 0.994607865810f,
+ -1.989201068878f, 0.989230215549f},
+ {1.511321425438f, -2.465713739395f, 1.042117238045f, -1.539572954178f,
+ 0.627297878265f, 0.992580235004f, -1.985160470009f, 0.992580235004f,
+ -1.985132932663f, 0.985188126564f},
+ {1.488207340240f, -2.248480796814f, 0.906192243099f, -1.391770243645f,
+ 0.537688970566f, 0.990125238895f, -1.980250477791f, 0.990125238895f,
+ -1.980201482773f, 0.980299532413f},
+ {1.480212569237f, -2.173723459244f, 0.862487196922f, -1.340346932411f,
+ 0.509323298931f, 0.989259064198f, -1.978518128395f, 0.989259064198f,
+ -1.978460073471f, 0.978576123714f},
+ {1.444234013557f, -1.839543223381f, 0.685432314873f, -1.107139229774f,
+ 0.397262454033f, 0.985242545605f, -1.970485091209f, 0.985242545605f,
+ -1.970375299454f, 0.970594763756f},
+ {1.403080821037f, -1.461511373520f, 0.519652962685f, -0.837045848370f,
+ 0.298268288374f, 0.980395674706f, -1.960791349411f, 0.980395674706f,
+ -1.960597157478f, 0.960985362530f},
+ {1.389132857323f, -1.334347724915f, 0.471855700016f, -0.744739949703f,
+ 0.271380871534f, 0.978689610958f, -1.957379221916f, 0.978689610958f,
+ -1.957149744034f, 0.957608699799f},
+ {1.327733159065f, -0.780098080635f, 0.309720277786f, -0.334008187056f,
+ 0.191363617778f, 0.970807731152f, -1.941615462303f, 0.970807731152f,
+ -1.941183090210f, 0.942047894001f},
+ {1.308971643448f, -0.612507879734f, 0.275601744652f, -0.207099482417f,
+ 0.179165065289f, 0.968287348747f, -1.936574697495f, 0.968287348747f,
+ -1.936063885689f, 0.937085747719f}};
-};
+const ia_delta_gain_code_table_struct
+ ia_drc_gain_tbls_prof_0_1[NUM_GAIN_TBL_PROF_0_1_ENTRIES] = {
+ {2, 0x003, -0.125f}, {2, 0x002, 0.125f}, {3, 0x001, -0.250f},
+ {3, 0x002, 0.000f}, {4, 0x000, -2.000f}, {5, 0x002, -0.500f},
+ {5, 0x00F, -0.375f}, {5, 0x00E, 1.000f}, {6, 0x019, -0.625f},
+ {6, 0x018, 0.250f}, {6, 0x006, 0.375f}, {7, 0x00F, -1.000f},
+ {7, 0x034, -0.875f}, {7, 0x036, -0.750f}, {7, 0x037, 0.500f},
+ {8, 0x01D, 0.625f}, {9, 0x039, -1.875f}, {9, 0x0D5, -1.125f},
+ {9, 0x0D7, 0.750f}, {9, 0x0D4, 0.875f}, {10, 0x070, -1.500f},
+ {10, 0x1AC, -1.375f}, {10, 0x1AD, -1.250f}, {11, 0x0E2, -1.750f},
+ {11, 0x0E3, -1.625f}
-const ia_delta_gain_code_table_struct ia_drc_gain_tbls_prof_2[NUM_GAIN_TBL_PROF_2_ENTRIES] =
-{
- { 3, 0x007, -0.125f },
- { 4, 0x00C, -0.625f },
- { 4, 0x009, -0.500f },
- { 4, 0x005, -0.375f },
- { 4, 0x003, -0.250f },
- { 4, 0x001, 0.000f },
- { 4, 0x00B, 0.125f },
- { 5, 0x011, -0.875f },
- { 5, 0x00E, -0.750f },
- { 5, 0x005, 0.250f },
- { 5, 0x004, 0.375f },
- { 5, 0x008, 0.500f },
- { 5, 0x000, 0.625f },
- { 5, 0x00D, 0.750f },
- { 5, 0x00F, 0.875f },
- { 5, 0x010, 1.000f },
- { 5, 0x01B, 1.125f },
- { 6, 0x02B, -1.250f },
- { 6, 0x028, -1.125f },
- { 6, 0x002, -1.000f },
- { 6, 0x012, 1.250f },
- { 6, 0x018, 1.375f },
- { 6, 0x029, 1.500f },
- { 7, 0x06A, -4.000f },
- { 7, 0x054, -1.750f },
- { 7, 0x068, -1.625f },
- { 7, 0x026, -1.500f },
- { 7, 0x006, -1.375f },
- { 7, 0x032, 1.625f },
- { 8, 0x0D2, -2.250f },
- { 8, 0x0AB, -2.125f },
- { 8, 0x0AA, -2.000f },
- { 8, 0x04F, -1.875f },
- { 8, 0x04E, 1.750f },
- { 8, 0x0D7, 1.875f },
- { 8, 0x00E, 2.000f },
- { 9, 0x1AD, -3.625f },
- { 9, 0x1AC, -3.375f },
- { 9, 0x1A6, -3.250f },
- { 9, 0x0CD, -3.125f },
- { 9, 0x0CE, -2.750f },
- { 9, 0x1A7, -2.625f },
- { 9, 0x01F, -2.500f },
- { 9, 0x0CC, -2.375f },
- { 10, 0x03C, -3.500f },
- { 10, 0x19E, -3.000f },
- { 10, 0x19F, -2.875f },
- { 11, 0x07A, -3.875f },
- { 11, 0x07B, -3.750f }
};
-const FLOAT32 channel_weight[] =
-{
- 10.0f,
- 6.0f,
- 4.5f,
- 3.0f,
- 1.5f,
- 0.0f,
- -1.5f,
- -3.0f,
- -4.5f,
- -6.0f,
- -10.0f,
- -15.0f,
- -20.0f,
- -30.0f,
- -40.0f,
- -1000.0f
-};
+const ia_delta_gain_code_table_struct
+ ia_drc_gain_tbls_prof_2[NUM_GAIN_TBL_PROF_2_ENTRIES] = {
+ {3, 0x007, -0.125f}, {4, 0x00C, -0.625f}, {4, 0x009, -0.500f},
+ {4, 0x005, -0.375f}, {4, 0x003, -0.250f}, {4, 0x001, 0.000f},
+ {4, 0x00B, 0.125f}, {5, 0x011, -0.875f}, {5, 0x00E, -0.750f},
+ {5, 0x005, 0.250f}, {5, 0x004, 0.375f}, {5, 0x008, 0.500f},
+ {5, 0x000, 0.625f}, {5, 0x00D, 0.750f}, {5, 0x00F, 0.875f},
+ {5, 0x010, 1.000f}, {5, 0x01B, 1.125f}, {6, 0x02B, -1.250f},
+ {6, 0x028, -1.125f}, {6, 0x002, -1.000f}, {6, 0x012, 1.250f},
+ {6, 0x018, 1.375f}, {6, 0x029, 1.500f}, {7, 0x06A, -4.000f},
+ {7, 0x054, -1.750f}, {7, 0x068, -1.625f}, {7, 0x026, -1.500f},
+ {7, 0x006, -1.375f}, {7, 0x032, 1.625f}, {8, 0x0D2, -2.250f},
+ {8, 0x0AB, -2.125f}, {8, 0x0AA, -2.000f}, {8, 0x04F, -1.875f},
+ {8, 0x04E, 1.750f}, {8, 0x0D7, 1.875f}, {8, 0x00E, 2.000f},
+ {9, 0x1AD, -3.625f}, {9, 0x1AC, -3.375f}, {9, 0x1A6, -3.250f},
+ {9, 0x0CD, -3.125f}, {9, 0x0CE, -2.750f}, {9, 0x1A7, -2.625f},
+ {9, 0x01F, -2.500f}, {9, 0x0CC, -2.375f}, {10, 0x03C, -3.500f},
+ {10, 0x19E, -3.000f}, {10, 0x19F, -2.875f}, {11, 0x07A, -3.875f},
+ {11, 0x07B, -3.750f}};
-const FLOAT32 dwnmix_coeff_v1[] =
-{
- 10.00f,
- 6.00f,
- 4.50f,
- 3.00f,
- 1.50f,
- 0.00f,
- -0.50f,
- -1.00f,
- -1.50f,
- -2.00f,
- -2.50f,
- -3.00f,
- -3.50f,
- -4.00f,
- -4.50f,
- -5.00f,
- -5.50f,
- -6.00f,
- -6.50f,
- -7.00f,
- -7.50f,
- -8.00f,
- -9.00f,
- -10.00f,
- -11.00f,
- -12.00f,
- -15.00f,
- -20.00f,
- -25.00f,
- -30.00f,
- -40.00f,
- -100000.0f
-};
+const FLOAT32 channel_weight[] = {
+ 10.0f, 6.0f, 4.5f, 3.0f, 1.5f, 0.0f, -1.5f, -3.0f,
+ -4.5f, -6.0f, -10.0f, -15.0f, -20.0f, -30.0f, -40.0f, -1000.0f};
-const FLOAT32 eq_slope_tbl [] =
-{
- -32.0f,
- -24.0f,
- -18.0f,
- -12.0f,
- -7.0f,
- -4.0f,
- -2.0f,
- -1.0f,
- 1.0f,
- 2.0f,
- 4.0f,
- 7.0f,
- 12.0f,
- 18.0f,
- 24.0f,
- 32.0f
-};
+const FLOAT32 dwnmix_coeff_v1[] = {
+ 10.00f, 6.00f, 4.50f, 3.00f, 1.50f, 0.00f, -0.50f, -1.00f,
+ -1.50f, -2.00f, -2.50f, -3.00f, -3.50f, -4.00f, -4.50f, -5.00f,
+ -5.50f, -6.00f, -6.50f, -7.00f, -7.50f, -8.00f, -9.00f, -10.00f,
+ -11.00f, -12.00f, -15.00f, -20.00f, -25.00f, -30.00f, -40.00f, -100000.0f};
+const FLOAT32 eq_slope_tbl[] = {-32.0f, -24.0f, -18.0f, -12.0f, -7.0f, -4.0f,
+ -2.0f, -1.0f, 1.0f, 2.0f, 4.0f, 7.0f,
+ 12.0f, 18.0f, 24.0f, 32.0f};
-const FLOAT32 eq_gain_delta_tbl[] =
-{
- -22.0f,
- -16.0f,
- -13.0f,
- -11.0f,
- -9.0f,
- -7.0f,
- -6.0f,
- -5.0f,
- -4.0f,
- -3.0f,
- -2.5f,
- -2.0f,
- -1.5f,
- -1.0f,
- -0.5f,
- 0.0f,
- 0.5f,
- 1.0f,
- 1.5f,
- 2.0f,
- 2.5f,
- 3.0f,
- 4.0f,
- 5.0f,
- 6.0f,
- 7.0f,
- 9.0f,
- 11.0f,
- 13.0f,
- 16.0f,
- 22.0f,
- 32.0f,
+const FLOAT32 eq_gain_delta_tbl[] = {
+ -22.0f, -16.0f, -13.0f, -11.0f, -9.0f, -7.0f, -6.0f, -5.0f,
+ -4.0f, -3.0f, -2.5f, -2.0f, -1.5f, -1.0f, -0.5f, 0.0f,
+ 0.5f, 1.0f, 1.5f, 2.0f, 2.5f, 3.0f, 4.0f, 5.0f,
+ 6.0f, 7.0f, 9.0f, 11.0f, 13.0f, 16.0f, 22.0f, 32.0f,
};
+const FLOAT32 zero_pole_radius_tbl[] = {
+ 0.00000000E+00f, 7.57409621E-11f, 7.47451079E-09f, 7.37623509E-08f,
+ 3.37872933E-07f, 1.05439995E-06f, 2.61370951E-06f, 5.55702854E-06f,
+ 1.05878771E-05f, 1.85806475E-05f, 3.05868707E-05f, 4.78395414E-05f,
+ 7.17558214E-05f, 1.03938342E-04f, 1.46175269E-04f, 2.00439375E-04f,
+ 2.68886099E-04f, 3.53850890E-04f, 4.57845890E-04f, 5.83555840E-04f,
+ 7.33833469E-04f, 9.11694835E-04f, 1.12031354E-03f, 1.36301492E-03f,
+ 1.64327072E-03f, 1.96469179E-03f, 2.33102194E-03f, 2.74613220E-03f,
+ 3.21401190E-03f, 3.73876374E-03f, 4.32459544E-03f, 4.97581391E-03f,
+ 5.69681637E-03f, 6.49208482E-03f, 7.36617809E-03f, 8.32372531E-03f,
+ 9.36941616E-03f, 1.05079999E-02f, 1.17442720E-02f, 1.30830696E-02f,
+ 1.45292655E-02f, 1.60877611E-02f, 1.77634824E-02f, 1.95613634E-02f,
+ 2.14863531E-02f, 2.35434026E-02f, 2.57374570E-02f, 2.80734543E-02f,
+ 3.05563174E-02f, 3.31909470E-02f, 3.59822176E-02f, 3.89349759E-02f,
+ 4.20540236E-02f, 4.53441292E-02f, 4.88100089E-02f, 5.24563305E-02f,
+ 5.62877022E-02f, 6.03086725E-02f, 6.45237267E-02f, 6.89372867E-02f,
+ 7.35536888E-02f, 7.83772022E-02f, 8.34120139E-02f, 8.86622295E-02f,
+ 9.41318572E-02f, 9.98248383E-02f, 1.05744988E-01f, 1.11896060E-01f,
+ 1.18281692E-01f, 1.24905407E-01f, 1.31770656E-01f, 1.38880774E-01f,
+ 1.46238968E-01f, 1.53848350E-01f, 1.61711931E-01f, 1.69832602E-01f,
+ 1.78213134E-01f, 1.86856180E-01f, 1.95764288E-01f, 2.04939872E-01f,
+ 2.14385241E-01f, 2.24102572E-01f, 2.34093949E-01f, 2.44361281E-01f,
+ 2.54906416E-01f, 2.65731007E-01f, 2.76836663E-01f, 2.88224846E-01f,
+ 2.99896836E-01f, 3.11853856E-01f, 3.24096978E-01f, 3.36627185E-01f,
+ 3.49445283E-01f, 3.62551987E-01f, 3.75947863E-01f, 3.89633417E-01f,
+ 4.03608948E-01f, 4.17874694E-01f, 4.32430804E-01f, 4.47277188E-01f,
+ 4.62413728E-01f, 4.77840215E-01f, 4.93556231E-01f, 5.09561300E-01f,
+ 5.25854886E-01f, 5.42436182E-01f, 5.59304416E-01f, 5.76458573E-01f,
+ 5.93897760E-01f, 6.11620665E-01f, 6.29626155E-01f, 6.47912800E-01f,
+ 6.66479111E-01f, 6.85323536E-01f, 7.04444408E-01f, 7.23839939E-01f,
+ 7.43508339E-01f, 7.63447523E-01f, 7.83655465E-01f, 8.04130018E-01f,
+ 8.24868977E-01f, 8.45869958E-01f, 8.67130578E-01f, 8.88648331E-01f,
+ 9.10420537E-01f, 9.32444632E-01f, 9.54717815E-01f, 9.77237225E-01f};
-const FLOAT32 zero_pole_radius_tbl[] =
-{
- 0.00000000E+00f,
- 7.57409621E-11f,
- 7.47451079E-09f,
- 7.37623509E-08f,
- 3.37872933E-07f,
- 1.05439995E-06f,
- 2.61370951E-06f,
- 5.55702854E-06f,
- 1.05878771E-05f,
- 1.85806475E-05f,
- 3.05868707E-05f,
- 4.78395414E-05f,
- 7.17558214E-05f,
- 1.03938342E-04f,
- 1.46175269E-04f,
- 2.00439375E-04f,
- 2.68886099E-04f,
- 3.53850890E-04f,
- 4.57845890E-04f,
- 5.83555840E-04f,
- 7.33833469E-04f,
- 9.11694835E-04f,
- 1.12031354E-03f,
- 1.36301492E-03f,
- 1.64327072E-03f,
- 1.96469179E-03f,
- 2.33102194E-03f,
- 2.74613220E-03f,
- 3.21401190E-03f,
- 3.73876374E-03f,
- 4.32459544E-03f,
- 4.97581391E-03f,
- 5.69681637E-03f,
- 6.49208482E-03f,
- 7.36617809E-03f,
- 8.32372531E-03f,
- 9.36941616E-03f,
- 1.05079999E-02f,
- 1.17442720E-02f,
- 1.30830696E-02f,
- 1.45292655E-02f,
- 1.60877611E-02f,
- 1.77634824E-02f,
- 1.95613634E-02f,
- 2.14863531E-02f,
- 2.35434026E-02f,
- 2.57374570E-02f,
- 2.80734543E-02f,
- 3.05563174E-02f,
- 3.31909470E-02f,
- 3.59822176E-02f,
- 3.89349759E-02f,
- 4.20540236E-02f,
- 4.53441292E-02f,
- 4.88100089E-02f,
- 5.24563305E-02f,
- 5.62877022E-02f,
- 6.03086725E-02f,
- 6.45237267E-02f,
- 6.89372867E-02f,
- 7.35536888E-02f,
- 7.83772022E-02f,
- 8.34120139E-02f,
- 8.86622295E-02f,
- 9.41318572E-02f,
- 9.98248383E-02f,
- 1.05744988E-01f,
- 1.11896060E-01f,
- 1.18281692E-01f,
- 1.24905407E-01f,
- 1.31770656E-01f,
- 1.38880774E-01f,
- 1.46238968E-01f,
- 1.53848350E-01f,
- 1.61711931E-01f,
- 1.69832602E-01f,
- 1.78213134E-01f,
- 1.86856180E-01f,
- 1.95764288E-01f,
- 2.04939872E-01f,
- 2.14385241E-01f,
- 2.24102572E-01f,
- 2.34093949E-01f,
- 2.44361281E-01f,
- 2.54906416E-01f,
- 2.65731007E-01f,
- 2.76836663E-01f,
- 2.88224846E-01f,
- 2.99896836E-01f,
- 3.11853856E-01f,
- 3.24096978E-01f,
- 3.36627185E-01f,
- 3.49445283E-01f,
- 3.62551987E-01f,
- 3.75947863E-01f,
- 3.89633417E-01f,
- 4.03608948E-01f,
- 4.17874694E-01f,
- 4.32430804E-01f,
- 4.47277188E-01f,
- 4.62413728E-01f,
- 4.77840215E-01f,
- 4.93556231E-01f,
- 5.09561300E-01f,
- 5.25854886E-01f,
- 5.42436182E-01f,
- 5.59304416E-01f,
- 5.76458573E-01f,
- 5.93897760E-01f,
- 6.11620665E-01f,
- 6.29626155E-01f,
- 6.47912800E-01f,
- 6.66479111E-01f,
- 6.85323536E-01f,
- 7.04444408E-01f,
- 7.23839939E-01f,
- 7.43508339E-01f,
- 7.63447523E-01f,
- 7.83655465E-01f,
- 8.04130018E-01f,
- 8.24868977E-01f,
- 8.45869958E-01f,
- 8.67130578E-01f,
- 8.88648331E-01f,
- 9.10420537E-01f,
- 9.32444632E-01f,
- 9.54717815E-01f,
- 9.77237225E-01f
-};
-
-const FLOAT32 zero_pole_angle_tbl[] =
-{
- 0.00000000E+00f,
- 6.90533966E-04f,
- 7.31595252E-04f,
- 7.75098170E-04f,
- 8.21187906E-04f,
- 8.70018279E-04f,
- 9.21752258E-04f,
- 9.76562500E-04f,
- 1.03463193E-03f,
- 1.09615434E-03f,
- 1.16133507E-03f,
- 1.23039165E-03f,
- 1.30355455E-03f,
- 1.38106793E-03f,
- 1.46319050E-03f,
- 1.55019634E-03f,
- 1.64237581E-03f,
- 1.74003656E-03f,
- 1.84350452E-03f,
- 1.95312500E-03f,
- 2.06926386E-03f,
- 2.19230869E-03f,
- 2.32267015E-03f,
- 2.46078330E-03f,
- 2.60710909E-03f,
- 2.76213586E-03f,
- 2.92638101E-03f,
- 3.10039268E-03f,
- 3.28475162E-03f,
- 3.48007312E-03f,
- 3.68700903E-03f,
- 3.90625000E-03f,
- 4.13852771E-03f,
- 4.38461738E-03f,
- 4.64534029E-03f,
- 4.92156660E-03f,
- 5.21421818E-03f,
- 5.52427173E-03f,
- 5.85276202E-03f,
- 6.20078536E-03f,
- 6.56950324E-03f,
- 6.96014624E-03f,
- 7.37401807E-03f,
- 7.81250000E-03f,
- 8.27705542E-03f,
- 8.76923475E-03f,
- 9.29068059E-03f,
- 9.84313320E-03f,
- 1.04284364E-02f,
- 1.10485435E-02f,
- 1.17055240E-02f,
- 1.24015707E-02f,
- 1.31390065E-02f,
- 1.39202925E-02f,
- 1.47480361E-02f,
- 1.56250000E-02f,
- 1.65541108E-02f,
- 1.75384695E-02f,
- 1.85813612E-02f,
- 1.96862664E-02f,
- 2.08568727E-02f,
- 2.20970869E-02f,
- 2.34110481E-02f,
- 2.48031414E-02f,
- 2.62780130E-02f,
- 2.78405849E-02f,
- 2.94960723E-02f,
- 3.12500000E-02f,
- 3.31082217E-02f,
- 3.50769390E-02f,
- 3.71627223E-02f,
- 3.93725328E-02f,
- 4.17137454E-02f,
- 4.41941738E-02f,
- 4.68220962E-02f,
- 4.96062829E-02f,
- 5.25560260E-02f,
- 5.56811699E-02f,
- 5.89921445E-02f,
- 6.25000000E-02f,
- 6.62164434E-02f,
- 7.01538780E-02f,
- 7.43254447E-02f,
- 7.87450656E-02f,
- 8.34274909E-02f,
- 8.83883476E-02f,
- 9.36441923E-02f,
- 9.92125657E-02f,
- 1.05112052E-01f,
- 1.11362340E-01f,
- 1.17984289E-01f,
- 1.25000000E-01f,
- 1.32432887E-01f,
- 1.40307756E-01f,
- 1.48650889E-01f,
- 1.57490131E-01f,
- 1.66854982E-01f,
- 1.76776695E-01f,
- 1.87288385E-01f,
- 1.98425131E-01f,
- 2.10224104E-01f,
- 2.22724680E-01f,
- 2.35968578E-01f,
- 2.50000000E-01f,
- 2.64865774E-01f,
- 2.80615512E-01f,
- 2.97301779E-01f,
- 3.14980262E-01f,
- 3.33709964E-01f,
- 3.53553391E-01f,
- 3.74576769E-01f,
- 3.96850263E-01f,
- 4.20448208E-01f,
- 4.45449359E-01f,
- 4.71937156E-01f,
- 5.00000000E-01f,
- 5.29731547E-01f,
- 5.61231024E-01f,
- 5.94603558E-01f,
- 6.29960525E-01f,
- 6.67419927E-01f,
- 7.07106781E-01f,
- 7.49153538E-01f,
- 7.93700526E-01f,
- 8.40896415E-01f,
- 8.90898718E-01f,
- 9.43874313E-01f,
- 1.00000000E+00f
-};
+const FLOAT32 zero_pole_angle_tbl[] = {
+ 0.00000000E+00f, 6.90533966E-04f, 7.31595252E-04f, 7.75098170E-04f,
+ 8.21187906E-04f, 8.70018279E-04f, 9.21752258E-04f, 9.76562500E-04f,
+ 1.03463193E-03f, 1.09615434E-03f, 1.16133507E-03f, 1.23039165E-03f,
+ 1.30355455E-03f, 1.38106793E-03f, 1.46319050E-03f, 1.55019634E-03f,
+ 1.64237581E-03f, 1.74003656E-03f, 1.84350452E-03f, 1.95312500E-03f,
+ 2.06926386E-03f, 2.19230869E-03f, 2.32267015E-03f, 2.46078330E-03f,
+ 2.60710909E-03f, 2.76213586E-03f, 2.92638101E-03f, 3.10039268E-03f,
+ 3.28475162E-03f, 3.48007312E-03f, 3.68700903E-03f, 3.90625000E-03f,
+ 4.13852771E-03f, 4.38461738E-03f, 4.64534029E-03f, 4.92156660E-03f,
+ 5.21421818E-03f, 5.52427173E-03f, 5.85276202E-03f, 6.20078536E-03f,
+ 6.56950324E-03f, 6.96014624E-03f, 7.37401807E-03f, 7.81250000E-03f,
+ 8.27705542E-03f, 8.76923475E-03f, 9.29068059E-03f, 9.84313320E-03f,
+ 1.04284364E-02f, 1.10485435E-02f, 1.17055240E-02f, 1.24015707E-02f,
+ 1.31390065E-02f, 1.39202925E-02f, 1.47480361E-02f, 1.56250000E-02f,
+ 1.65541108E-02f, 1.75384695E-02f, 1.85813612E-02f, 1.96862664E-02f,
+ 2.08568727E-02f, 2.20970869E-02f, 2.34110481E-02f, 2.48031414E-02f,
+ 2.62780130E-02f, 2.78405849E-02f, 2.94960723E-02f, 3.12500000E-02f,
+ 3.31082217E-02f, 3.50769390E-02f, 3.71627223E-02f, 3.93725328E-02f,
+ 4.17137454E-02f, 4.41941738E-02f, 4.68220962E-02f, 4.96062829E-02f,
+ 5.25560260E-02f, 5.56811699E-02f, 5.89921445E-02f, 6.25000000E-02f,
+ 6.62164434E-02f, 7.01538780E-02f, 7.43254447E-02f, 7.87450656E-02f,
+ 8.34274909E-02f, 8.83883476E-02f, 9.36441923E-02f, 9.92125657E-02f,
+ 1.05112052E-01f, 1.11362340E-01f, 1.17984289E-01f, 1.25000000E-01f,
+ 1.32432887E-01f, 1.40307756E-01f, 1.48650889E-01f, 1.57490131E-01f,
+ 1.66854982E-01f, 1.76776695E-01f, 1.87288385E-01f, 1.98425131E-01f,
+ 2.10224104E-01f, 2.22724680E-01f, 2.35968578E-01f, 2.50000000E-01f,
+ 2.64865774E-01f, 2.80615512E-01f, 2.97301779E-01f, 3.14980262E-01f,
+ 3.33709964E-01f, 3.53553391E-01f, 3.74576769E-01f, 3.96850263E-01f,
+ 4.20448208E-01f, 4.45449359E-01f, 4.71937156E-01f, 5.00000000E-01f,
+ 5.29731547E-01f, 5.61231024E-01f, 5.94603558E-01f, 6.29960525E-01f,
+ 6.67419927E-01f, 7.07106781E-01f, 7.49153538E-01f, 7.93700526E-01f,
+ 8.40896415E-01f, 8.90898718E-01f, 9.43874313E-01f, 1.00000000E+00f};
-const FLOAT32 shape_filt_lf_y1_bound_tbl[][3] =
-{
- {-0.994f,-0.996f, -1.0f},
+const FLOAT32 shape_filt_lf_y1_bound_tbl[][3] = {
+ {-0.994f, -0.996f, -1.0f},
{-0.99f, -0.995f, -0.999f},
{-0.98f, -0.989f, -0.996f},
{-0.97f, -0.983f, -0.994f},
};
-const FLOAT32 shape_filt_hf_y1_bound_tbl[][3] =
-{
- {0.15f, 0.75f, 1.05f },
- {0.43f, 0.87f, 1.07f},
- {0.60f, 0.92f, 1.07f},
- {0.80f, 1.00f, 1.06f},
- {0.90f, 1.04f, 1.073f},
+const FLOAT32 shape_filt_hf_y1_bound_tbl[][3] = {
+ {0.15f, 0.75f, 1.05f}, {0.43f, 0.87f, 1.07f}, {0.60f, 0.92f, 1.07f},
+ {0.80f, 1.00f, 1.06f}, {0.90f, 1.04f, 1.073f},
};
const FLOAT32 shape_filt_lf_gain_offset_tbl[][3] = {
@@ -533,759 +212,924 @@ const FLOAT32 shape_filt_lf_gain_offset_tbl[][3] = {
};
const FLOAT32 shape_filt_hf_gain_offset_tbl[][3] = {
- {4.5f, 6.0f, 3.5f},
- {3.7f, 4.0f, 2.7f},
- {3.0f, 3.5f, 2.0f},
- {2.0f, 2.5f, 1.5f},
- {1.5f, 2.0f, 1.31f},
+ {4.5f, 6.0f, 3.5f}, {3.7f, 4.0f, 2.7f}, {3.0f, 3.5f, 2.0f},
+ {2.0f, 2.5f, 1.5f}, {1.5f, 2.0f, 1.31f},
};
const FLOAT32 shape_filt_lf_radius_tbl[] = {
- 0.988f,
- 0.98f,
- 0.96f,
- 0.94f,
+ 0.988f, 0.98f, 0.96f, 0.94f,
};
-const FLOAT32 shape_filt_hf_radius_tbl[] = {
- 0.45f,
- 0.40f,
- 0.35f,
- 0.30f,
- 0.30f
-};
+const FLOAT32 shape_filt_hf_radius_tbl[] = {0.45f, 0.40f, 0.35f, 0.30f, 0.30f};
-const FLOAT32 shape_filt_cutoff_freq_norm_hf_tbl[] = {
- 0.15f,
- 0.20f,
- 0.25f,
- 0.35f,
- 0.45f
-};
-
-const ia_cicp_sigmoid_characteristic_param_struct pstr_cicp_sigmoid_characteristic_param[] = {
- {0.0f, 9.0f, 12.0f},
- {0.2f, 9.0f, 12.0f},
- {0.4f, 9.0f, 12.0f},
- {0.6f, 9.0f, 12.0f},
- {0.8f, 6.0f, 8.0f},
- {1.0f, 5.0f, 6.0f}
-};
+const FLOAT32 shape_filt_cutoff_freq_norm_hf_tbl[] = {0.15f, 0.20f, 0.25f,
+ 0.35f, 0.45f};
+const ia_cicp_sigmoid_characteristic_param_struct
+ pstr_cicp_sigmoid_characteristic_param[] = {
+ {0.0f, 9.0f, 12.0f}, {0.2f, 9.0f, 12.0f}, {0.4f, 9.0f, 12.0f},
+ {0.6f, 9.0f, 12.0f}, {0.8f, 6.0f, 8.0f}, {1.0f, 5.0f, 6.0f}};
-const ia_slope_code_table_struct slope_code_tbl_entries_by_size[NUM_SLOPE_TBL_ENTRIES] =
-{
- { 1, 0x001, 0.0f, 7 },
- { 2, 0x000, -0.005f, 6 },
- { 4, 0x007, 0.005f, 8 },
- { 5, 0x00A, -0.1953f, 3 },
- { 5, 0x009, -0.0781f, 4 },
- { 5, 0x00D, -0.0312f, 5 },
- { 5, 0x00B, 0.0312f, 9 },
- { 6, 0x018, -3.0518f, 0 },
- { 6, 0x011, 0.0781f, 10 },
- { 7, 0x032, -0.4883f, 2 },
- { 7, 0x020, 1.2207f, 13 },
- { 7, 0x033, 3.0518f, 14 },
- { 8, 0x042, -1.2207f, 1 },
- { 9, 0x087, 0.1953f, 11 },
- { 9, 0x086, 0.4883f, 12 },
+const ia_slope_code_table_struct
+ slope_code_tbl_entries_by_size[NUM_SLOPE_TBL_ENTRIES] = {
+ {1, 0x001, 0.0f, 7}, {2, 0x000, -0.005f, 6},
+ {4, 0x007, 0.005f, 8}, {5, 0x00A, -0.1953f, 3},
+ {5, 0x009, -0.0781f, 4}, {5, 0x00D, -0.0312f, 5},
+ {5, 0x00B, 0.0312f, 9}, {6, 0x018, -3.0518f, 0},
+ {6, 0x011, 0.0781f, 10}, {7, 0x032, -0.4883f, 2},
+ {7, 0x020, 1.2207f, 13}, {7, 0x033, 3.0518f, 14},
+ {8, 0x042, -1.2207f, 1}, {9, 0x087, 0.1953f, 11},
+ {9, 0x086, 0.4883f, 12},
};
-const FLOAT32 dwnmix_coeff[] =
-{
- 0.0f,
- -0.5f,
- -1.0f,
- -1.5f,
- -2.0f,
- -2.5f,
- -3.0f,
- -3.5f,
- -4.0f,
- -4.5f,
- -5.0f,
- -5.5f,
- -6.0f,
- -7.5f,
- -9.0f,
- -1000.0f
-};
+const FLOAT32 dwnmix_coeff[] = {0.0f, -0.5f, -1.0f, -1.5f, -2.0f, -2.5f,
+ -3.0f, -3.5f, -4.0f, -4.5f, -5.0f, -5.5f,
+ -6.0f, -7.5f, -9.0f, -1000.0f};
-const FLOAT32 dwnmix_coeff_lfe[] =
-{
- 10.0f,
- 6.0f,
- 4.5f,
- 3.0f,
- 1.5f,
- 0.0f,
- -1.5f,
- -3.0f,
- -4.5f,
- -6.0f,
- -10.0f,
- -15.0f,
- -20.0f,
- -30.0f,
- -40.0f,
- -1000.0f
-};
+const FLOAT32 dwnmix_coeff_lfe[] = {
+ 10.0f, 6.0f, 4.5f, 3.0f, 1.5f, 0.0f, -1.5f, -3.0f,
+ -4.5f, -6.0f, -10.0f, -15.0f, -20.0f, -30.0f, -40.0f, -1000.0f};
-WORD32 drc_characteristic_order_default [][3] =
-{
- {1, 2, -1},
- {2, 3, 1},
- {3, 4, 2},
- {4, 5, 3},
- {5, 6, 4},
- {6, 5, -1},
- {7, 9, -1},
- {8, 10, -1},
- {9, 7, -1},
- {10, 8, -1},
- {11, 10, 9}
-};
+WORD32 drc_characteristic_order_default[][3] = {
+ {1, 2, -1}, {2, 3, 1}, {3, 4, 2}, {4, 5, 3}, {5, 6, 4}, {6, 5, -1},
+ {7, 9, -1}, {8, 10, -1}, {9, 7, -1}, {10, 8, -1}, {11, 10, 9}};
-WORD32 measurement_system_default_tbl[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-WORD32 measurement_system_bs1770_3_tbl[] = {0, 0, 8, 0, 1, 3, 0, 5, 6, 7, 4, 2};
-WORD32 measurement_system_user_tbl[] = {0, 0, 1, 0, 8, 5, 0, 2, 3, 4, 6, 7};
-WORD32 measurement_system_expert_tbl[] = {0, 0, 3, 0, 1, 8, 0, 4, 5, 6, 7, 2};
-WORD32 measurement_system_rms_a_tbl[] = {0, 0, 5, 0, 1, 3, 0, 8, 6, 7, 4, 2};
-WORD32 measurement_system_rms_b_tbl[] = {0, 0, 5, 0, 1, 3, 0, 6, 8, 7, 4, 2};
-WORD32 measurement_system_rms_c_tbl[] = {0, 0, 5, 0, 1, 3, 0, 6, 7, 8, 4, 2};
-WORD32 measurement_system_rms_d_tbl[] = {0, 0, 3, 0, 1, 7, 0, 4, 5, 6, 8, 2};
-WORD32 measurement_system_rms_e_tbl[] = {0, 0, 1, 0, 7, 5, 0, 2, 3, 4, 6, 8};
+WORD32 measurement_system_default_tbl[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+WORD32 measurement_system_bs1770_3_tbl[] = {0, 0, 8, 0, 1, 3, 0, 5, 6, 7, 4, 2};
+WORD32 measurement_system_user_tbl[] = {0, 0, 1, 0, 8, 5, 0, 2, 3, 4, 6, 7};
+WORD32 measurement_system_expert_tbl[] = {0, 0, 3, 0, 1, 8, 0, 4, 5, 6, 7, 2};
+WORD32 measurement_system_rms_a_tbl[] = {0, 0, 5, 0, 1, 3, 0, 8, 6, 7, 4, 2};
+WORD32 measurement_system_rms_b_tbl[] = {0, 0, 5, 0, 1, 3, 0, 6, 8, 7, 4, 2};
+WORD32 measurement_system_rms_c_tbl[] = {0, 0, 5, 0, 1, 3, 0, 6, 7, 8, 4, 2};
+WORD32 measurement_system_rms_d_tbl[] = {0, 0, 3, 0, 1, 7, 0, 4, 5, 6, 8, 2};
+WORD32 measurement_system_rms_e_tbl[] = {0, 0, 1, 0, 7, 5, 0, 2, 3, 4, 6, 8};
-WORD32 measurement_method_prog_loudness_tbl[] = {0, 0, 1, 0, 0, 0, 0, 2, 3, 4, 0, 0};
-WORD32 measurement_method_peak_loudness_tbl[] = {0, 7, 0, 0, 0, 0, 6, 5, 4, 3, 2, 1};
+WORD32 measurement_method_prog_loudness_tbl[] = {0, 0, 1, 0, 0, 0,
+ 0, 2, 3, 4, 0, 0};
+WORD32 measurement_method_peak_loudness_tbl[] = {0, 7, 0, 0, 0, 0,
+ 6, 5, 4, 3, 2, 1};
-const ia_loc_sys_interface_struct loc_sys_interface[]=
-{
- {0, 1, {0,0,0}, 0, 0},
- {0, 1, {2,0,0}, 0, 0},
+const ia_loc_sys_interface_struct loc_sys_interface[] = {
+ {0, 1, {0, 0, 0}, 0, 0}, {0, 1, {2, 0, 0}, 0, 0},
};
-const ia_loc_loudness_norm_ctrl_interface_struct loc_loudness_norm_ctrl_interface[] =
-{
- {0,0.0f},
- {0,0.0f},
+const ia_loc_loudness_norm_ctrl_interface_struct
+ loc_loudness_norm_ctrl_interface[] = {
+ {0, 0.0f}, {0, 0.0f},
};
-const ia_loc_loudness_norm_param_interface_struct loc_loudness_norm_param_interface[] = {
-
+const ia_loc_loudness_norm_param_interface_struct
+ loc_loudness_norm_param_interface[] = {
- {0, 0, LOUDNESS_DEVIATION_MAX_DEFAULT, USER_METHOD_DEFINITION_PROGRAM_LOUDNESS, USER_MEASUREMENT_SYSTEM_BS_1770_3, USER_LOUDNESS_PREPROCESSING_OFF, 20, LOUDNESS_NORMALIZATION_GAIN_MAX_DEFAULT, 0.0f, 0.0f},
- {0, 0, LOUDNESS_DEVIATION_MAX_DEFAULT, USER_METHOD_DEFINITION_PROGRAM_LOUDNESS, USER_MEASUREMENT_SYSTEM_BS_1770_3, USER_LOUDNESS_PREPROCESSING_OFF, 20, LOUDNESS_NORMALIZATION_GAIN_MAX_DEFAULT, 0.0f, 0.0f},
+ {0, 0, LOUDNESS_DEVIATION_MAX_DEFAULT,
+ USER_METHOD_DEFINITION_PROGRAM_LOUDNESS,
+ USER_MEASUREMENT_SYSTEM_BS_1770_3, USER_LOUDNESS_PREPROCESSING_OFF, 20,
+ LOUDNESS_NORMALIZATION_GAIN_MAX_DEFAULT, 0.0f, 0.0f},
+ {0, 0, LOUDNESS_DEVIATION_MAX_DEFAULT,
+ USER_METHOD_DEFINITION_PROGRAM_LOUDNESS,
+ USER_MEASUREMENT_SYSTEM_BS_1770_3, USER_LOUDNESS_PREPROCESSING_OFF, 20,
+ LOUDNESS_NORMALIZATION_GAIN_MAX_DEFAULT, 0.0f, 0.0f},
};
const ia_loc_drc_interface_struct loc_dyn_range_ctrl_interface[] = {
-
- {1, 3, {MATCH_EFFECT_TYPE, MATCH_DYNAMIC_RANGE, MATCH_DRC_CHARACTERISTIC}, SHORT_TERM_LOUDNESS_TO_AVG, 1, 5.0f, 3.0f, 10.0f, 3},
- {1, 3, {MATCH_EFFECT_TYPE, MATCH_DYNAMIC_RANGE, MATCH_DRC_CHARACTERISTIC}, TOP_OF_LOUDNESS_RANGE_TO_AVG, 0, 5.0f, 3.0f, 10.0f, 3},
-
-
+ {1,
+ 3,
+ {MATCH_EFFECT_TYPE, MATCH_DYNAMIC_RANGE, MATCH_DRC_CHARACTERISTIC},
+ SHORT_TERM_LOUDNESS_TO_AVG,
+ 1,
+ 5.0f,
+ 3.0f,
+ 10.0f,
+ 3},
+ {1,
+ 3,
+ {MATCH_EFFECT_TYPE, MATCH_DYNAMIC_RANGE, MATCH_DRC_CHARACTERISTIC},
+ TOP_OF_LOUDNESS_RANGE_TO_AVG,
+ 0,
+ 5.0f,
+ 3.0f,
+ 10.0f,
+ 3},
};
const ia_loc_requested_drc_effect_struct loc_requested_drc_effect_type_str[] = {
- {1, 1, {EFFECT_TYPE_REQUESTED_NIGHT, EFFECT_TYPE_REQUESTED_GENERAL_COMPR, EFFECT_TYPE_REQUESTED_ARTISTIC, EFFECT_TYPE_REQUESTED_LIMITED, EFFECT_TYPE_REQUESTED_DIALOG}},
- {4, 1, {EFFECT_TYPE_REQUESTED_LOWLEVEL, EFFECT_TYPE_REQUESTED_NIGHT, EFFECT_TYPE_REQUESTED_LIMITED, EFFECT_TYPE_REQUESTED_ARTISTIC, EFFECT_TYPE_REQUESTED_DIALOG}},
-
+ {1,
+ 1,
+ {EFFECT_TYPE_REQUESTED_NIGHT, EFFECT_TYPE_REQUESTED_GENERAL_COMPR,
+ EFFECT_TYPE_REQUESTED_ARTISTIC, EFFECT_TYPE_REQUESTED_LIMITED,
+ EFFECT_TYPE_REQUESTED_DIALOG}},
+ {4,
+ 1,
+ {EFFECT_TYPE_REQUESTED_LOWLEVEL, EFFECT_TYPE_REQUESTED_NIGHT,
+ EFFECT_TYPE_REQUESTED_LIMITED, EFFECT_TYPE_REQUESTED_ARTISTIC,
+ EFFECT_TYPE_REQUESTED_DIALOG}},
};
const ia_loc_drc_parameter_interface_struct loc_drc_parameter_interface[] = {
-
- {1.0f,1.0f,0},
- {1.0f,1.0f,0},
+ {1.0f, 1.0f, 0}, {1.0f, 1.0f, 0},
};
- FLOAT32 f_bands_nrm_QMF71[71] = {
- 0.004583300000000f,
- 0.000833330000000f,
- 0.002083300000000f,
- 0.005875000000000f,
- 0.009791700000000f,
- 0.014292000000000f,
- 0.019792000000000f,
- 0.027000000000000f,
- 0.035417000000000f,
- 0.042625000000000f,
- 0.056750000000000f,
- 0.072375000000000f,
- 0.088000000000000f,
- 0.103620000000000f,
- 0.119250000000000f,
- 0.134870000000000f,
- 0.150500000000000f,
- 0.166120000000000f,
- 0.181750000000000f,
- 0.197370000000000f,
- 0.213000000000000f,
- 0.228620000000000f,
- 0.244250000000000f,
- 0.259880000000000f,
- 0.275500000000000f,
- 0.291130000000000f,
- 0.306750000000000f,
- 0.322380000000000f,
- 0.338000000000000f,
- 0.353630000000000f,
- 0.369250000000000f,
- 0.384880000000000f,
- 0.400500000000000f,
- 0.416130000000000f,
- 0.431750000000000f,
- 0.447380000000000f,
- 0.463000000000000f,
- 0.478630000000000f,
- 0.494250000000000f,
- 0.509870000000000f,
- 0.525500000000000f,
- 0.541120000000000f,
- 0.556750000000000f,
- 0.572370000000000f,
- 0.588000000000000f,
- 0.603620000000000f,
- 0.619250000000000f,
- 0.634870000000000f,
- 0.650500000000000f,
- 0.666120000000000f,
- 0.681750000000000f,
- 0.697370000000000f,
- 0.713000000000000f,
- 0.728620000000000f,
- 0.744250000000000f,
- 0.759870000000000f,
- 0.775500000000000f,
- 0.791120000000000f,
- 0.806750000000000f,
- 0.822370000000000f,
- 0.838000000000000f,
- 0.853620000000000f,
- 0.869250000000000f,
- 0.884870000000000f,
- 0.900500000000000f,
- 0.916120000000000f,
- 0.931750000000000f,
- 0.947370000000000f,
- 0.963000000000000f,
- 0.974540000000000f,
- 0.999040000000000f
-};
+FLOAT32 f_bands_nrm_QMF71[71] = {
+ 0.004583300000000f, 0.000833330000000f, 0.002083300000000f,
+ 0.005875000000000f, 0.009791700000000f, 0.014292000000000f,
+ 0.019792000000000f, 0.027000000000000f, 0.035417000000000f,
+ 0.042625000000000f, 0.056750000000000f, 0.072375000000000f,
+ 0.088000000000000f, 0.103620000000000f, 0.119250000000000f,
+ 0.134870000000000f, 0.150500000000000f, 0.166120000000000f,
+ 0.181750000000000f, 0.197370000000000f, 0.213000000000000f,
+ 0.228620000000000f, 0.244250000000000f, 0.259880000000000f,
+ 0.275500000000000f, 0.291130000000000f, 0.306750000000000f,
+ 0.322380000000000f, 0.338000000000000f, 0.353630000000000f,
+ 0.369250000000000f, 0.384880000000000f, 0.400500000000000f,
+ 0.416130000000000f, 0.431750000000000f, 0.447380000000000f,
+ 0.463000000000000f, 0.478630000000000f, 0.494250000000000f,
+ 0.509870000000000f, 0.525500000000000f, 0.541120000000000f,
+ 0.556750000000000f, 0.572370000000000f, 0.588000000000000f,
+ 0.603620000000000f, 0.619250000000000f, 0.634870000000000f,
+ 0.650500000000000f, 0.666120000000000f, 0.681750000000000f,
+ 0.697370000000000f, 0.713000000000000f, 0.728620000000000f,
+ 0.744250000000000f, 0.759870000000000f, 0.775500000000000f,
+ 0.791120000000000f, 0.806750000000000f, 0.822370000000000f,
+ 0.838000000000000f, 0.853620000000000f, 0.869250000000000f,
+ 0.884870000000000f, 0.900500000000000f, 0.916120000000000f,
+ 0.931750000000000f, 0.947370000000000f, 0.963000000000000f,
+ 0.974540000000000f, 0.999040000000000f};
- FLOAT32 f_bands_nrm_QMF64[64] = {
- 0.0078125000000000f,
- 0.0234380000000000f,
- 0.0390620000000000f,
- 0.0546880000000000f,
- 0.0703120000000000f,
- 0.0859380000000000f,
- 0.1015600000000000f,
- 0.1171900000000000f,
- 0.1328100000000000f,
- 0.1484400000000000f,
- 0.1640600000000000f,
- 0.1796900000000000f,
- 0.1953100000000000f,
- 0.2109400000000000f,
- 0.2265600000000000f,
- 0.2421900000000000f,
- 0.2578100000000000f,
- 0.2734400000000000f,
- 0.2890600000000000f,
- 0.3046900000000000f,
- 0.3203100000000000f,
- 0.3359400000000000f,
- 0.3515600000000000f,
- 0.3671900000000000f,
- 0.3828100000000000f,
- 0.3984400000000000f,
- 0.4140600000000000f,
- 0.4296900000000000f,
- 0.4453100000000000f,
- 0.4609400000000000f,
- 0.4765600000000000f,
- 0.4921900000000000f,
- 0.5078100000000000f,
- 0.5234400000000000f,
- 0.5390600000000000f,
- 0.5546900000000000f,
- 0.5703100000000000f,
- 0.5859400000000000f,
- 0.6015600000000000f,
- 0.6171900000000000f,
- 0.6328100000000000f,
- 0.6484400000000000f,
- 0.6640600000000000f,
- 0.6796900000000000f,
- 0.6953100000000000f,
- 0.7109400000000000f,
- 0.7265600000000000f,
- 0.7421900000000000f,
- 0.7578100000000000f,
- 0.7734400000000000f,
- 0.7890600000000000f,
- 0.8046900000000000f,
- 0.8203100000000000f,
- 0.8359400000000000f,
- 0.8515600000000000f,
- 0.8671900000000000f,
- 0.8828100000000000f,
- 0.8984400000000000f,
- 0.9140600000000000f,
- 0.9296900000000000f,
- 0.9453100000000000f,
- 0.9609400000000000f,
- 0.9765600000000000f,
- 0.9921900000000000f
-};
+FLOAT32 f_bands_nrm_QMF64[64] = {
+ 0.0078125000000000f, 0.0234380000000000f, 0.0390620000000000f,
+ 0.0546880000000000f, 0.0703120000000000f, 0.0859380000000000f,
+ 0.1015600000000000f, 0.1171900000000000f, 0.1328100000000000f,
+ 0.1484400000000000f, 0.1640600000000000f, 0.1796900000000000f,
+ 0.1953100000000000f, 0.2109400000000000f, 0.2265600000000000f,
+ 0.2421900000000000f, 0.2578100000000000f, 0.2734400000000000f,
+ 0.2890600000000000f, 0.3046900000000000f, 0.3203100000000000f,
+ 0.3359400000000000f, 0.3515600000000000f, 0.3671900000000000f,
+ 0.3828100000000000f, 0.3984400000000000f, 0.4140600000000000f,
+ 0.4296900000000000f, 0.4453100000000000f, 0.4609400000000000f,
+ 0.4765600000000000f, 0.4921900000000000f, 0.5078100000000000f,
+ 0.5234400000000000f, 0.5390600000000000f, 0.5546900000000000f,
+ 0.5703100000000000f, 0.5859400000000000f, 0.6015600000000000f,
+ 0.6171900000000000f, 0.6328100000000000f, 0.6484400000000000f,
+ 0.6640600000000000f, 0.6796900000000000f, 0.6953100000000000f,
+ 0.7109400000000000f, 0.7265600000000000f, 0.7421900000000000f,
+ 0.7578100000000000f, 0.7734400000000000f, 0.7890600000000000f,
+ 0.8046900000000000f, 0.8203100000000000f, 0.8359400000000000f,
+ 0.8515600000000000f, 0.8671900000000000f, 0.8828100000000000f,
+ 0.8984400000000000f, 0.9140600000000000f, 0.9296900000000000f,
+ 0.9453100000000000f, 0.9609400000000000f, 0.9765600000000000f,
+ 0.9921900000000000f};
- FLOAT32 f_bands_nrm_STFT256[257]={
- 0.000000000000000f,
- 0.003906250000000f,
- 0.007812500000000f,
- 0.011718750000000f,
- 0.015625000000000f,
- 0.019531250000000f,
- 0.023437500000000f,
- 0.027343750000000f,
- 0.031250000000000f,
- 0.035156250000000f,
- 0.039062500000000f,
- 0.042968750000000f,
- 0.046875000000000f,
- 0.050781250000000f,
- 0.054687500000000f,
- 0.058593750000000f,
- 0.062500000000000f,
- 0.066406250000000f,
- 0.070312500000000f,
- 0.074218750000000f,
- 0.078125000000000f,
- 0.082031250000000f,
- 0.085937500000000f,
- 0.089843750000000f,
- 0.093750000000000f,
- 0.097656250000000f,
- 0.101562500000000f,
- 0.105468750000000f,
- 0.109375000000000f,
- 0.113281250000000f,
- 0.117187500000000f,
- 0.121093750000000f,
- 0.125000000000000f,
- 0.128906250000000f,
- 0.132812500000000f,
- 0.136718750000000f,
- 0.140625000000000f,
- 0.144531250000000f,
- 0.148437500000000f,
- 0.152343750000000f,
- 0.156250000000000f,
- 0.160156250000000f,
- 0.164062500000000f,
- 0.167968750000000f,
- 0.171875000000000f,
- 0.175781250000000f,
- 0.179687500000000f,
- 0.183593750000000f,
- 0.187500000000000f,
- 0.191406250000000f,
- 0.195312500000000f,
- 0.199218750000000f,
- 0.203125000000000f,
- 0.207031250000000f,
- 0.210937500000000f,
- 0.214843750000000f,
- 0.218750000000000f,
- 0.222656250000000f,
- 0.226562500000000f,
- 0.230468750000000f,
- 0.234375000000000f,
- 0.238281250000000f,
- 0.242187500000000f,
- 0.246093750000000f,
- 0.250000000000000f,
- 0.253906250000000f,
- 0.257812500000000f,
- 0.261718750000000f,
- 0.265625000000000f,
- 0.269531250000000f,
- 0.273437500000000f,
- 0.277343750000000f,
- 0.281250000000000f,
- 0.285156250000000f,
- 0.289062500000000f,
- 0.292968750000000f,
- 0.296875000000000f,
- 0.300781250000000f,
- 0.304687500000000f,
- 0.308593750000000f,
- 0.312500000000000f,
- 0.316406250000000f,
- 0.320312500000000f,
- 0.324218750000000f,
- 0.328125000000000f,
- 0.332031250000000f,
- 0.335937500000000f,
- 0.339843750000000f,
- 0.343750000000000f,
- 0.347656250000000f,
- 0.351562500000000f,
- 0.355468750000000f,
- 0.359375000000000f,
- 0.363281250000000f,
- 0.367187500000000f,
- 0.371093750000000f,
- 0.375000000000000f,
- 0.378906250000000f,
- 0.382812500000000f,
- 0.386718750000000f,
- 0.390625000000000f,
- 0.394531250000000f,
- 0.398437500000000f,
- 0.402343750000000f,
- 0.406250000000000f,
- 0.410156250000000f,
- 0.414062500000000f,
- 0.417968750000000f,
- 0.421875000000000f,
- 0.425781250000000f,
- 0.429687500000000f,
- 0.433593750000000f,
- 0.437500000000000f,
- 0.441406250000000f,
- 0.445312500000000f,
- 0.449218750000000f,
- 0.453125000000000f,
- 0.457031250000000f,
- 0.460937500000000f,
- 0.464843750000000f,
- 0.468750000000000f,
- 0.472656250000000f,
- 0.476562500000000f,
- 0.480468750000000f,
- 0.484375000000000f,
- 0.488281250000000f,
- 0.492187500000000f,
- 0.496093750000000f,
- 0.500000000000000f,
- 0.503906250000000f,
- 0.507812500000000f,
- 0.511718750000000f,
- 0.515625000000000f,
- 0.519531250000000f,
- 0.523437500000000f,
- 0.527343750000000f,
- 0.531250000000000f,
- 0.535156250000000f,
- 0.539062500000000f,
- 0.542968750000000f,
- 0.546875000000000f,
- 0.550781250000000f,
- 0.554687500000000f,
- 0.558593750000000f,
- 0.562500000000000f,
- 0.566406250000000f,
- 0.570312500000000f,
- 0.574218750000000f,
- 0.578125000000000f,
- 0.582031250000000f,
- 0.585937500000000f,
- 0.589843750000000f,
- 0.593750000000000f,
- 0.597656250000000f,
- 0.601562500000000f,
- 0.605468750000000f,
- 0.609375000000000f,
- 0.613281250000000f,
- 0.617187500000000f,
- 0.621093750000000f,
- 0.625000000000000f,
- 0.628906250000000f,
- 0.632812500000000f,
- 0.636718750000000f,
- 0.640625000000000f,
- 0.644531250000000f,
- 0.648437500000000f,
- 0.652343750000000f,
- 0.656250000000000f,
- 0.660156250000000f,
- 0.664062500000000f,
- 0.667968750000000f,
- 0.671875000000000f,
- 0.675781250000000f,
- 0.679687500000000f,
- 0.683593750000000f,
- 0.687500000000000f,
- 0.691406250000000f,
- 0.695312500000000f,
- 0.699218750000000f,
- 0.703125000000000f,
- 0.707031250000000f,
- 0.710937500000000f,
- 0.714843750000000f,
- 0.718750000000000f,
- 0.722656250000000f,
- 0.726562500000000f,
- 0.730468750000000f,
- 0.734375000000000f,
- 0.738281250000000f,
- 0.742187500000000f,
- 0.746093750000000f,
- 0.750000000000000f,
- 0.753906250000000f,
- 0.757812500000000f,
- 0.761718750000000f,
- 0.765625000000000f,
- 0.769531250000000f,
- 0.773437500000000f,
- 0.777343750000000f,
- 0.781250000000000f,
- 0.785156250000000f,
- 0.789062500000000f,
- 0.792968750000000f,
- 0.796875000000000f,
- 0.800781250000000f,
- 0.804687500000000f,
- 0.808593750000000f,
- 0.812500000000000f,
- 0.816406250000000f,
- 0.820312500000000f,
- 0.824218750000000f,
- 0.828125000000000f,
- 0.832031250000000f,
- 0.835937500000000f,
- 0.839843750000000f,
- 0.843750000000000f,
- 0.847656250000000f,
- 0.851562500000000f,
- 0.855468750000000f,
- 0.859375000000000f,
- 0.863281250000000f,
- 0.867187500000000f,
- 0.871093750000000f,
- 0.875000000000000f,
- 0.878906250000000f,
- 0.882812500000000f,
- 0.886718750000000f,
- 0.890625000000000f,
- 0.894531250000000f,
- 0.898437500000000f,
- 0.902343750000000f,
- 0.906250000000000f,
- 0.910156250000000f,
- 0.914062500000000f,
- 0.917968750000000f,
- 0.921875000000000f,
- 0.925781250000000f,
- 0.929687500000000f,
- 0.933593750000000f,
- 0.937500000000000f,
- 0.941406250000000f,
- 0.945312500000000f,
- 0.949218750000000f,
- 0.953125000000000f,
- 0.957031250000000f,
- 0.960937500000000f,
- 0.964843750000000f,
- 0.968750000000000f,
- 0.972656250000000f,
- 0.976562500000000f,
- 0.980468750000000f,
- 0.984375000000000f,
- 0.988281250000000f,
- 0.992187500000000f,
- 0.996093750000000f,
- 1.000000000000000f
-};
+FLOAT32 f_bands_nrm_STFT256[257] = {
+ 0.000000000000000f, 0.003906250000000f, 0.007812500000000f,
+ 0.011718750000000f, 0.015625000000000f, 0.019531250000000f,
+ 0.023437500000000f, 0.027343750000000f, 0.031250000000000f,
+ 0.035156250000000f, 0.039062500000000f, 0.042968750000000f,
+ 0.046875000000000f, 0.050781250000000f, 0.054687500000000f,
+ 0.058593750000000f, 0.062500000000000f, 0.066406250000000f,
+ 0.070312500000000f, 0.074218750000000f, 0.078125000000000f,
+ 0.082031250000000f, 0.085937500000000f, 0.089843750000000f,
+ 0.093750000000000f, 0.097656250000000f, 0.101562500000000f,
+ 0.105468750000000f, 0.109375000000000f, 0.113281250000000f,
+ 0.117187500000000f, 0.121093750000000f, 0.125000000000000f,
+ 0.128906250000000f, 0.132812500000000f, 0.136718750000000f,
+ 0.140625000000000f, 0.144531250000000f, 0.148437500000000f,
+ 0.152343750000000f, 0.156250000000000f, 0.160156250000000f,
+ 0.164062500000000f, 0.167968750000000f, 0.171875000000000f,
+ 0.175781250000000f, 0.179687500000000f, 0.183593750000000f,
+ 0.187500000000000f, 0.191406250000000f, 0.195312500000000f,
+ 0.199218750000000f, 0.203125000000000f, 0.207031250000000f,
+ 0.210937500000000f, 0.214843750000000f, 0.218750000000000f,
+ 0.222656250000000f, 0.226562500000000f, 0.230468750000000f,
+ 0.234375000000000f, 0.238281250000000f, 0.242187500000000f,
+ 0.246093750000000f, 0.250000000000000f, 0.253906250000000f,
+ 0.257812500000000f, 0.261718750000000f, 0.265625000000000f,
+ 0.269531250000000f, 0.273437500000000f, 0.277343750000000f,
+ 0.281250000000000f, 0.285156250000000f, 0.289062500000000f,
+ 0.292968750000000f, 0.296875000000000f, 0.300781250000000f,
+ 0.304687500000000f, 0.308593750000000f, 0.312500000000000f,
+ 0.316406250000000f, 0.320312500000000f, 0.324218750000000f,
+ 0.328125000000000f, 0.332031250000000f, 0.335937500000000f,
+ 0.339843750000000f, 0.343750000000000f, 0.347656250000000f,
+ 0.351562500000000f, 0.355468750000000f, 0.359375000000000f,
+ 0.363281250000000f, 0.367187500000000f, 0.371093750000000f,
+ 0.375000000000000f, 0.378906250000000f, 0.382812500000000f,
+ 0.386718750000000f, 0.390625000000000f, 0.394531250000000f,
+ 0.398437500000000f, 0.402343750000000f, 0.406250000000000f,
+ 0.410156250000000f, 0.414062500000000f, 0.417968750000000f,
+ 0.421875000000000f, 0.425781250000000f, 0.429687500000000f,
+ 0.433593750000000f, 0.437500000000000f, 0.441406250000000f,
+ 0.445312500000000f, 0.449218750000000f, 0.453125000000000f,
+ 0.457031250000000f, 0.460937500000000f, 0.464843750000000f,
+ 0.468750000000000f, 0.472656250000000f, 0.476562500000000f,
+ 0.480468750000000f, 0.484375000000000f, 0.488281250000000f,
+ 0.492187500000000f, 0.496093750000000f, 0.500000000000000f,
+ 0.503906250000000f, 0.507812500000000f, 0.511718750000000f,
+ 0.515625000000000f, 0.519531250000000f, 0.523437500000000f,
+ 0.527343750000000f, 0.531250000000000f, 0.535156250000000f,
+ 0.539062500000000f, 0.542968750000000f, 0.546875000000000f,
+ 0.550781250000000f, 0.554687500000000f, 0.558593750000000f,
+ 0.562500000000000f, 0.566406250000000f, 0.570312500000000f,
+ 0.574218750000000f, 0.578125000000000f, 0.582031250000000f,
+ 0.585937500000000f, 0.589843750000000f, 0.593750000000000f,
+ 0.597656250000000f, 0.601562500000000f, 0.605468750000000f,
+ 0.609375000000000f, 0.613281250000000f, 0.617187500000000f,
+ 0.621093750000000f, 0.625000000000000f, 0.628906250000000f,
+ 0.632812500000000f, 0.636718750000000f, 0.640625000000000f,
+ 0.644531250000000f, 0.648437500000000f, 0.652343750000000f,
+ 0.656250000000000f, 0.660156250000000f, 0.664062500000000f,
+ 0.667968750000000f, 0.671875000000000f, 0.675781250000000f,
+ 0.679687500000000f, 0.683593750000000f, 0.687500000000000f,
+ 0.691406250000000f, 0.695312500000000f, 0.699218750000000f,
+ 0.703125000000000f, 0.707031250000000f, 0.710937500000000f,
+ 0.714843750000000f, 0.718750000000000f, 0.722656250000000f,
+ 0.726562500000000f, 0.730468750000000f, 0.734375000000000f,
+ 0.738281250000000f, 0.742187500000000f, 0.746093750000000f,
+ 0.750000000000000f, 0.753906250000000f, 0.757812500000000f,
+ 0.761718750000000f, 0.765625000000000f, 0.769531250000000f,
+ 0.773437500000000f, 0.777343750000000f, 0.781250000000000f,
+ 0.785156250000000f, 0.789062500000000f, 0.792968750000000f,
+ 0.796875000000000f, 0.800781250000000f, 0.804687500000000f,
+ 0.808593750000000f, 0.812500000000000f, 0.816406250000000f,
+ 0.820312500000000f, 0.824218750000000f, 0.828125000000000f,
+ 0.832031250000000f, 0.835937500000000f, 0.839843750000000f,
+ 0.843750000000000f, 0.847656250000000f, 0.851562500000000f,
+ 0.855468750000000f, 0.859375000000000f, 0.863281250000000f,
+ 0.867187500000000f, 0.871093750000000f, 0.875000000000000f,
+ 0.878906250000000f, 0.882812500000000f, 0.886718750000000f,
+ 0.890625000000000f, 0.894531250000000f, 0.898437500000000f,
+ 0.902343750000000f, 0.906250000000000f, 0.910156250000000f,
+ 0.914062500000000f, 0.917968750000000f, 0.921875000000000f,
+ 0.925781250000000f, 0.929687500000000f, 0.933593750000000f,
+ 0.937500000000000f, 0.941406250000000f, 0.945312500000000f,
+ 0.949218750000000f, 0.953125000000000f, 0.957031250000000f,
+ 0.960937500000000f, 0.964843750000000f, 0.968750000000000f,
+ 0.972656250000000f, 0.976562500000000f, 0.980468750000000f,
+ 0.984375000000000f, 0.988281250000000f, 0.992187500000000f,
+ 0.996093750000000f, 1.000000000000000f};
+FLOAT64 qmf_filter_coeff[640] = {0,
+ -0.00055252865047,
+ -0.00056176925738,
+ -0.00049475180896,
+ -0.00048752279712,
+ -0.00048937912498,
+ -0.00050407143497,
+ -0.00052265642972,
+ -0.00054665656337,
+ -0.00056778025613,
+ -0.00058709304852,
+ -0.00061327473938,
+ -0.00063124935319,
+ -0.00065403333621,
+ -0.00067776907764,
+ -0.00069416146273,
+ -0.00071577364744,
+ -0.00072550431222,
+ -0.00074409418541,
+ -0.00074905980532,
+ -0.00076813719270,
+ -0.00077248485949,
+ -0.00078343322877,
+ -0.00077798694927,
+ -0.00078036647100,
+ -0.00078014496257,
+ -0.00077579773310,
+ -0.00076307935757,
+ -0.00075300014201,
+ -0.00073193571525,
+ -0.00072153919876,
+ -0.00069179375372,
+ -0.00066504150893,
+ -0.00063415949025,
+ -0.00059461189330,
+ -0.00055645763906,
+ -0.00051455722108,
+ -0.00046063254803,
+ -0.00040951214522,
+ -0.00035011758756,
+ -0.00028969811748,
+ -0.00020983373440,
+ -0.00014463809349,
+ -0.00006173344072,
+ 0.00001349497418,
+ 0.00010943831274,
+ 0.00020430170688,
+ 0.00029495311041,
+ 0.00040265402160,
+ 0.00051073884952,
+ 0.00062393761391,
+ 0.00074580258865,
+ 0.00086084433262,
+ 0.00098859883015,
+ 0.00112501551307,
+ 0.00125778846475,
+ 0.00139024948272,
+ 0.00154432198471,
+ 0.00168680832531,
+ 0.00183482654224,
+ 0.00198411407369,
+ 0.00214615835557,
+ 0.00230172547746,
+ 0.00246256169126,
+ 0.00262017586902,
+ 0.00278704643465,
+ 0.00294694477165,
+ 0.00311254206525,
+ 0.00327396134847,
+ 0.00344188741828,
+ 0.00360082681231,
+ 0.00376039229104,
+ 0.00392074323703,
+ 0.00408197531935,
+ 0.00422642692270,
+ 0.00437307196781,
+ 0.00452098527825,
+ 0.00466064606118,
+ 0.00479325608498,
+ 0.00491376035745,
+ 0.00503930226013,
+ 0.00514073539032,
+ 0.00524611661324,
+ 0.00534716811982,
+ 0.00541967759307,
+ 0.00548760401507,
+ 0.00554757145088,
+ 0.00559380230045,
+ 0.00562206432097,
+ 0.00564551969164,
+ 0.00563891995151,
+ 0.00562661141932,
+ 0.00559171286630,
+ 0.00554043639400,
+ 0.00547537830770,
+ 0.00538389758970,
+ 0.00527157587272,
+ 0.00513822754514,
+ 0.00498396877629,
+ 0.00481094690600,
+ 0.00460395301471,
+ 0.00438018617447,
+ 0.00412516423270,
+ 0.00384564081246,
+ 0.00354012465507,
+ 0.00320918858098,
+ 0.00284467578623,
+ 0.00245085400321,
+ 0.00202741761850,
+ 0.00157846825768,
+ 0.00109023290512,
+ 0.00058322642480,
+ 0.00002760451905,
+ -0.00054642808664,
+ -0.00115681355227,
+ -0.00180394725893,
+ -0.00248267236449,
+ -0.00319337783900,
+ -0.00394011240522,
+ -0.00472225962400,
+ -0.00553372111088,
+ -0.00637922932685,
+ -0.00726158168517,
+ -0.00817982333726,
+ -0.00913253296085,
+ -0.01011502154986,
+ -0.01113155480321,
+ -0.01218499959508,
+ 0.01327182200351,
+ 0.01439046660792,
+ 0.01554055533423,
+ 0.01673247129989,
+ 0.01794333813443,
+ 0.01918724313698,
+ 0.02045317933555,
+ 0.02174675502535,
+ 0.02306801692862,
+ 0.02441609920285,
+ 0.02578758475467,
+ 0.02718594296329,
+ 0.02860721736385,
+ 0.03005026574279,
+ 0.03150176087389,
+ 0.03297540810337,
+ 0.03446209487686,
+ 0.03596975605542,
+ 0.03748128504252,
+ 0.03900536794745,
+ 0.04053491705584,
+ 0.04206490946367,
+ 0.04360975421304,
+ 0.04514884056413,
+ 0.04668430272642,
+ 0.04821657200672,
+ 0.04973857556014,
+ 0.05125561555216,
+ 0.05276307465207,
+ 0.05424527683589,
+ 0.05571736482138,
+ 0.05716164501299,
+ 0.05859156836260,
+ 0.05998374801761,
+ 0.06134551717207,
+ 0.06268578081172,
+ 0.06397158980681,
+ 0.06522471064380,
+ 0.06643675122104,
+ 0.06760759851228,
+ 0.06870438283512,
+ 0.06976302447127,
+ 0.07076287107266,
+ 0.07170026731102,
+ 0.07256825833083,
+ 0.07336202550803,
+ 0.07410036424342,
+ 0.07474525581194,
+ 0.07531373362019,
+ 0.07580083586584,
+ 0.07619924793396,
+ 0.07649921704119,
+ 0.07670934904245,
+ 0.07681739756964,
+ 0.07682300113923,
+ 0.07672049241746,
+ 0.07650507183194,
+ 0.07617483218536,
+ 0.07573057565061,
+ 0.07515762552870,
+ 0.07446643947564,
+ 0.07364060057620,
+ 0.07267746427299,
+ 0.07158263647903,
+ 0.07035330735093,
+ 0.06896640131951,
+ 0.06745250215166,
+ 0.06576906686508,
+ 0.06394448059633,
+ 0.06196027790387,
+ 0.05981665708090,
+ 0.05751526919867,
+ 0.05504600343009,
+ 0.05240938217366,
+ 0.04959786763445,
+ 0.04663033051701,
+ 0.04347687821958,
+ 0.04014582784127,
+ 0.03664181168133,
+ 0.03295839306691,
+ 0.02908240060125,
+ 0.02503075618909,
+ 0.02079970728622,
+ 0.01637012582228,
+ 0.01176238327857,
+ 0.00696368621617,
+ 0.00197656014503,
+ -0.00320868968304,
+ -0.00857117491366,
+ -0.01412888273558,
+ -0.01988341292573,
+ -0.02582272888064,
+ -0.03195312745332,
+ -0.03827765720822,
+ -0.04478068215856,
+ -0.05148041767934,
+ -0.05837053268336,
+ -0.06544098531359,
+ -0.07269433008129,
+ -0.08013729344279,
+ -0.08775475365593,
+ -0.09555333528914,
+ -0.10353295311463,
+ -0.11168269317730,
+ -0.12000779846800,
+ -0.12850028503878,
+ -0.13715517611934,
+ -0.14597664911870,
+ -0.15496070710605,
+ -0.16409588556669,
+ -0.17338081721706,
+ -0.18281725485142,
+ -0.19239667457267,
+ -0.20212501768103,
+ -0.21197358538056,
+ -0.22196526964149,
+ -0.23206908706791,
+ -0.24230168845974,
+ -0.25264803095722,
+ -0.26310532994603,
+ -0.27366340405625,
+ -0.28432141891085,
+ -0.29507167170646,
+ -0.30590985751916,
+ -0.31682789136456,
+ -0.32781137272105,
+ -0.33887226938665,
+ -0.34999141229310,
+ 0.36115899031355,
+ 0.37237955463061,
+ 0.38363500139043,
+ 0.39492117615675,
+ 0.40623176767625,
+ 0.41756968968409,
+ 0.42891199207373,
+ 0.44025537543665,
+ 0.45159965356824,
+ 0.46293080852757,
+ 0.47424532146115,
+ 0.48552530911099,
+ 0.49677082545707,
+ 0.50798175000434,
+ 0.51912349702391,
+ 0.53022408956855,
+ 0.54125534487322,
+ 0.55220512585061,
+ 0.56307891401370,
+ 0.57385241316923,
+ 0.58454032354679,
+ 0.59511230862496,
+ 0.60557835389180,
+ 0.61591099320291,
+ 0.62612426956055,
+ 0.63619801077286,
+ 0.64612696959461,
+ 0.65590163024671,
+ 0.66551398801627,
+ 0.67496631901712,
+ 0.68423532934598,
+ 0.69332823767032,
+ 0.70223887193539,
+ 0.71094104263095,
+ 0.71944626349561,
+ 0.72774489002994,
+ 0.73582117582769,
+ 0.74368278636488,
+ 0.75131374561237,
+ 0.75870807608242,
+ 0.76586748650939,
+ 0.77277808813327,
+ 0.77942875190216,
+ 0.78583531203920,
+ 0.79197358416424,
+ 0.79784664137700,
+ 0.80344857518505,
+ 0.80876950044491,
+ 0.81381912706217,
+ 0.81857760046468,
+ 0.82304198905409,
+ 0.82722753473360,
+ 0.83110384571520,
+ 0.83469373618402,
+ 0.83797173378865,
+ 0.84095413924722,
+ 0.84362382812005,
+ 0.84598184698206,
+ 0.84803157770763,
+ 0.84978051984268,
+ 0.85119715249343,
+ 0.85230470352147,
+ 0.85310209497017,
+ 0.85357205739107,
+ 0.85373856005937,
+ 0.85357205739107,
+ 0.85310209497017,
+ 0.85230470352147,
+ 0.85119715249343,
+ 0.84978051984268,
+ 0.84803157770763,
+ 0.84598184698206,
+ 0.84362382812005,
+ 0.84095413924722,
+ 0.83797173378865,
+ 0.83469373618402,
+ 0.83110384571520,
+ 0.82722753473360,
+ 0.82304198905409,
+ 0.81857760046468,
+ 0.81381912706217,
+ 0.80876950044491,
+ 0.80344857518505,
+ 0.79784664137700,
+ 0.79197358416424,
+ 0.78583531203920,
+ 0.77942875190216,
+ 0.77277808813327,
+ 0.76586748650939,
+ 0.75870807608242,
+ 0.75131374561237,
+ 0.74368278636488,
+ 0.73582117582769,
+ 0.72774489002994,
+ 0.71944626349561,
+ 0.71094104263095,
+ 0.70223887193539,
+ 0.69332823767032,
+ 0.68423532934598,
+ 0.67496631901712,
+ 0.66551398801627,
+ 0.65590163024671,
+ 0.64612696959461,
+ 0.63619801077286,
+ 0.62612426956055,
+ 0.61591099320291,
+ 0.60557835389180,
+ 0.59511230862496,
+ 0.58454032354679,
+ 0.57385241316923,
+ 0.56307891401370,
+ 0.55220512585061,
+ 0.54125534487322,
+ 0.53022408956855,
+ 0.51912349702391,
+ 0.50798175000434,
+ 0.49677082545707,
+ 0.48552530911099,
+ 0.47424532146115,
+ 0.46293080852757,
+ 0.45159965356824,
+ 0.44025537543665,
+ 0.42891199207373,
+ 0.41756968968409,
+ 0.40623176767625,
+ 0.39492117615675,
+ 0.38363500139043,
+ 0.37237955463061,
+ -0.36115899031355,
+ -0.34999141229310,
+ -0.33887226938665,
+ -0.32781137272105,
+ -0.31682789136456,
+ -0.30590985751916,
+ -0.29507167170646,
+ -0.28432141891085,
+ -0.27366340405625,
+ -0.26310532994603,
+ -0.25264803095722,
+ -0.24230168845974,
+ -0.23206908706791,
+ -0.22196526964149,
+ -0.21197358538056,
+ -0.20212501768103,
+ -0.19239667457267,
+ -0.18281725485142,
+ -0.17338081721706,
+ -0.16409588556669,
+ -0.15496070710605,
+ -0.14597664911870,
+ -0.13715517611934,
+ -0.12850028503878,
+ -0.12000779846800,
+ -0.11168269317730,
+ -0.10353295311463,
+ -0.09555333528914,
+ -0.08775475365593,
+ -0.08013729344279,
+ -0.07269433008129,
+ -0.06544098531359,
+ -0.05837053268336,
+ -0.05148041767934,
+ -0.04478068215856,
+ -0.03827765720822,
+ -0.03195312745332,
+ -0.02582272888064,
+ -0.01988341292573,
+ -0.01412888273558,
+ -0.00857117491366,
+ -0.00320868968304,
+ 0.00197656014503,
+ 0.00696368621617,
+ 0.01176238327857,
+ 0.01637012582228,
+ 0.02079970728622,
+ 0.02503075618909,
+ 0.02908240060125,
+ 0.03295839306691,
+ 0.03664181168133,
+ 0.04014582784127,
+ 0.04347687821958,
+ 0.04663033051701,
+ 0.04959786763445,
+ 0.05240938217366,
+ 0.05504600343009,
+ 0.05751526919867,
+ 0.05981665708090,
+ 0.06196027790387,
+ 0.06394448059633,
+ 0.06576906686508,
+ 0.06745250215166,
+ 0.06896640131951,
+ 0.07035330735093,
+ 0.07158263647903,
+ 0.07267746427299,
+ 0.07364060057620,
+ 0.07446643947564,
+ 0.07515762552870,
+ 0.07573057565061,
+ 0.07617483218536,
+ 0.07650507183194,
+ 0.07672049241746,
+ 0.07682300113923,
+ 0.07681739756964,
+ 0.07670934904245,
+ 0.07649921704119,
+ 0.07619924793396,
+ 0.07580083586584,
+ 0.07531373362019,
+ 0.07474525581194,
+ 0.07410036424342,
+ 0.07336202550803,
+ 0.07256825833083,
+ 0.07170026731102,
+ 0.07076287107266,
+ 0.06976302447127,
+ 0.06870438283512,
+ 0.06760759851228,
+ 0.06643675122104,
+ 0.06522471064380,
+ 0.06397158980681,
+ 0.06268578081172,
+ 0.06134551717207,
+ 0.05998374801761,
+ 0.05859156836260,
+ 0.05716164501299,
+ 0.05571736482138,
+ 0.05424527683589,
+ 0.05276307465207,
+ 0.05125561555216,
+ 0.04973857556014,
+ 0.04821657200672,
+ 0.04668430272642,
+ 0.04514884056413,
+ 0.04360975421304,
+ 0.04206490946367,
+ 0.04053491705584,
+ 0.03900536794745,
+ 0.03748128504252,
+ 0.03596975605542,
+ 0.03446209487686,
+ 0.03297540810337,
+ 0.03150176087389,
+ 0.03005026574279,
+ 0.02860721736385,
+ 0.02718594296329,
+ 0.02578758475467,
+ 0.02441609920285,
+ 0.02306801692862,
+ 0.02174675502535,
+ 0.02045317933555,
+ 0.01918724313698,
+ 0.01794333813443,
+ 0.01673247129989,
+ 0.01554055533423,
+ 0.01439046660792,
+ -0.01327182200351,
+ -0.01218499959508,
+ -0.01113155480321,
+ -0.01011502154986,
+ -0.00913253296085,
+ -0.00817982333726,
+ -0.00726158168517,
+ -0.00637922932685,
+ -0.00553372111088,
+ -0.00472225962400,
+ -0.00394011240522,
+ -0.00319337783900,
+ -0.00248267236449,
+ -0.00180394725893,
+ -0.00115681355227,
+ -0.00054642808664,
+ 0.00002760451905,
+ 0.00058322642480,
+ 0.00109023290512,
+ 0.00157846825768,
+ 0.00202741761850,
+ 0.00245085400321,
+ 0.00284467578623,
+ 0.00320918858098,
+ 0.00354012465507,
+ 0.00384564081246,
+ 0.00412516423270,
+ 0.00438018617447,
+ 0.00460395301471,
+ 0.00481094690600,
+ 0.00498396877629,
+ 0.00513822754514,
+ 0.00527157587272,
+ 0.00538389758970,
+ 0.00547537830770,
+ 0.00554043639400,
+ 0.00559171286630,
+ 0.00562661141932,
+ 0.00563891995151,
+ 0.00564551969164,
+ 0.00562206432097,
+ 0.00559380230045,
+ 0.00554757145088,
+ 0.00548760401507,
+ 0.00541967759307,
+ 0.00534716811982,
+ 0.00524611661324,
+ 0.00514073539032,
+ 0.00503930226013,
+ 0.00491376035745,
+ 0.00479325608498,
+ 0.00466064606118,
+ 0.00452098527825,
+ 0.00437307196781,
+ 0.00422642692270,
+ 0.00408197531935,
+ 0.00392074323703,
+ 0.00376039229104,
+ 0.00360082681231,
+ 0.00344188741828,
+ 0.00327396134847,
+ 0.00311254206525,
+ 0.00294694477165,
+ 0.00278704643465,
+ 0.00262017586902,
+ 0.00246256169126,
+ 0.00230172547746,
+ 0.00214615835557,
+ 0.00198411407369,
+ 0.00183482654224,
+ 0.00168680832531,
+ 0.00154432198471,
+ 0.00139024948272,
+ 0.00125778846475,
+ 0.00112501551307,
+ 0.00098859883015,
+ 0.00086084433262,
+ 0.00074580258865,
+ 0.00062393761391,
+ 0.00051073884952,
+ 0.00040265402160,
+ 0.00029495311041,
+ 0.00020430170688,
+ 0.00010943831274,
+ 0.00001349497418,
+ -0.00006173344072,
+ -0.00014463809349,
+ -0.00020983373440,
+ -0.00028969811748,
+ -0.00035011758756,
+ -0.00040951214522,
+ -0.00046063254803,
+ -0.00051455722108,
+ -0.00055645763906,
+ -0.00059461189330,
+ -0.00063415949025,
+ -0.00066504150893,
+ -0.00069179375372,
+ -0.00072153919876,
+ -0.00073193571525,
+ -0.00075300014201,
+ -0.00076307935757,
+ -0.00077579773310,
+ -0.00078014496257,
+ -0.00078036647100,
+ -0.00077798694927,
+ -0.00078343322877,
+ -0.00077248485949,
+ -0.00076813719270,
+ -0.00074905980532,
+ -0.00074409418541,
+ -0.00072550431222,
+ -0.00071577364744,
+ -0.00069416146273,
+ -0.00067776907764,
+ -0.00065403333621,
+ -0.00063124935319,
+ -0.00061327473938,
+ -0.00058709304852,
+ -0.00056778025613,
+ -0.00054665656337,
+ -0.00052265642972,
+ -0.00050407143497,
+ -0.00048937912498,
+ -0.00048752279712,
+ -0.00049475180896,
+ -0.00056176925738,
+ -0.00055252865047};
-FLOAT64 qmf_filter_coeff[640] = {
- 0, -0.00055252865047, -0.00056176925738, -0.00049475180896,
- -0.00048752279712, -0.00048937912498, -0.00050407143497, -0.00052265642972,
- -0.00054665656337, -0.00056778025613, -0.00058709304852, -0.00061327473938,
- -0.00063124935319, -0.00065403333621, -0.00067776907764, -0.00069416146273,
- -0.00071577364744, -0.00072550431222, -0.00074409418541, -0.00074905980532,
- -0.00076813719270, -0.00077248485949, -0.00078343322877, -0.00077798694927,
- -0.00078036647100, -0.00078014496257, -0.00077579773310, -0.00076307935757,
- -0.00075300014201, -0.00073193571525, -0.00072153919876, -0.00069179375372,
- -0.00066504150893, -0.00063415949025, -0.00059461189330, -0.00055645763906,
- -0.00051455722108, -0.00046063254803, -0.00040951214522, -0.00035011758756,
- -0.00028969811748, -0.00020983373440, -0.00014463809349, -0.00006173344072,
- 0.00001349497418, 0.00010943831274, 0.00020430170688, 0.00029495311041,
- 0.00040265402160, 0.00051073884952, 0.00062393761391, 0.00074580258865,
- 0.00086084433262, 0.00098859883015, 0.00112501551307, 0.00125778846475,
- 0.00139024948272, 0.00154432198471, 0.00168680832531, 0.00183482654224,
- 0.00198411407369, 0.00214615835557, 0.00230172547746, 0.00246256169126,
- 0.00262017586902, 0.00278704643465, 0.00294694477165, 0.00311254206525,
- 0.00327396134847, 0.00344188741828, 0.00360082681231, 0.00376039229104,
- 0.00392074323703, 0.00408197531935, 0.00422642692270, 0.00437307196781,
- 0.00452098527825, 0.00466064606118, 0.00479325608498, 0.00491376035745,
- 0.00503930226013, 0.00514073539032, 0.00524611661324, 0.00534716811982,
- 0.00541967759307, 0.00548760401507, 0.00554757145088, 0.00559380230045,
- 0.00562206432097, 0.00564551969164, 0.00563891995151, 0.00562661141932,
- 0.00559171286630, 0.00554043639400, 0.00547537830770, 0.00538389758970,
- 0.00527157587272, 0.00513822754514, 0.00498396877629, 0.00481094690600,
- 0.00460395301471, 0.00438018617447, 0.00412516423270, 0.00384564081246,
- 0.00354012465507, 0.00320918858098, 0.00284467578623, 0.00245085400321,
- 0.00202741761850, 0.00157846825768, 0.00109023290512, 0.00058322642480,
- 0.00002760451905, -0.00054642808664, -0.00115681355227, -0.00180394725893,
- -0.00248267236449, -0.00319337783900, -0.00394011240522, -0.00472225962400,
- -0.00553372111088, -0.00637922932685, -0.00726158168517, -0.00817982333726,
- -0.00913253296085, -0.01011502154986, -0.01113155480321, -0.01218499959508,
- 0.01327182200351, 0.01439046660792, 0.01554055533423, 0.01673247129989,
- 0.01794333813443, 0.01918724313698, 0.02045317933555, 0.02174675502535,
- 0.02306801692862, 0.02441609920285, 0.02578758475467, 0.02718594296329,
- 0.02860721736385, 0.03005026574279, 0.03150176087389, 0.03297540810337,
- 0.03446209487686, 0.03596975605542, 0.03748128504252, 0.03900536794745,
- 0.04053491705584, 0.04206490946367, 0.04360975421304, 0.04514884056413,
- 0.04668430272642, 0.04821657200672, 0.04973857556014, 0.05125561555216,
- 0.05276307465207, 0.05424527683589, 0.05571736482138, 0.05716164501299,
- 0.05859156836260, 0.05998374801761, 0.06134551717207, 0.06268578081172,
- 0.06397158980681, 0.06522471064380, 0.06643675122104, 0.06760759851228,
- 0.06870438283512, 0.06976302447127, 0.07076287107266, 0.07170026731102,
- 0.07256825833083, 0.07336202550803, 0.07410036424342, 0.07474525581194,
- 0.07531373362019, 0.07580083586584, 0.07619924793396, 0.07649921704119,
- 0.07670934904245, 0.07681739756964, 0.07682300113923, 0.07672049241746,
- 0.07650507183194, 0.07617483218536, 0.07573057565061, 0.07515762552870,
- 0.07446643947564, 0.07364060057620, 0.07267746427299, 0.07158263647903,
- 0.07035330735093, 0.06896640131951, 0.06745250215166, 0.06576906686508,
- 0.06394448059633, 0.06196027790387, 0.05981665708090, 0.05751526919867,
- 0.05504600343009, 0.05240938217366, 0.04959786763445, 0.04663033051701,
- 0.04347687821958, 0.04014582784127, 0.03664181168133, 0.03295839306691,
- 0.02908240060125, 0.02503075618909, 0.02079970728622, 0.01637012582228,
- 0.01176238327857, 0.00696368621617, 0.00197656014503, -0.00320868968304,
- -0.00857117491366, -0.01412888273558, -0.01988341292573, -0.02582272888064,
- -0.03195312745332, -0.03827765720822, -0.04478068215856, -0.05148041767934,
- -0.05837053268336, -0.06544098531359, -0.07269433008129, -0.08013729344279,
- -0.08775475365593, -0.09555333528914, -0.10353295311463, -0.11168269317730,
- -0.12000779846800, -0.12850028503878, -0.13715517611934, -0.14597664911870,
- -0.15496070710605, -0.16409588556669, -0.17338081721706, -0.18281725485142,
- -0.19239667457267, -0.20212501768103, -0.21197358538056, -0.22196526964149,
- -0.23206908706791, -0.24230168845974, -0.25264803095722, -0.26310532994603,
- -0.27366340405625, -0.28432141891085, -0.29507167170646, -0.30590985751916,
- -0.31682789136456, -0.32781137272105, -0.33887226938665, -0.34999141229310,
- 0.36115899031355, 0.37237955463061, 0.38363500139043, 0.39492117615675,
- 0.40623176767625, 0.41756968968409, 0.42891199207373, 0.44025537543665,
- 0.45159965356824, 0.46293080852757, 0.47424532146115, 0.48552530911099,
- 0.49677082545707, 0.50798175000434, 0.51912349702391, 0.53022408956855,
- 0.54125534487322, 0.55220512585061, 0.56307891401370, 0.57385241316923,
- 0.58454032354679, 0.59511230862496, 0.60557835389180, 0.61591099320291,
- 0.62612426956055, 0.63619801077286, 0.64612696959461, 0.65590163024671,
- 0.66551398801627, 0.67496631901712, 0.68423532934598, 0.69332823767032,
- 0.70223887193539, 0.71094104263095, 0.71944626349561, 0.72774489002994,
- 0.73582117582769, 0.74368278636488, 0.75131374561237, 0.75870807608242,
- 0.76586748650939, 0.77277808813327, 0.77942875190216, 0.78583531203920,
- 0.79197358416424, 0.79784664137700, 0.80344857518505, 0.80876950044491,
- 0.81381912706217, 0.81857760046468, 0.82304198905409, 0.82722753473360,
- 0.83110384571520, 0.83469373618402, 0.83797173378865, 0.84095413924722,
- 0.84362382812005, 0.84598184698206, 0.84803157770763, 0.84978051984268,
- 0.85119715249343, 0.85230470352147, 0.85310209497017, 0.85357205739107,
- 0.85373856005937, 0.85357205739107, 0.85310209497017, 0.85230470352147,
- 0.85119715249343, 0.84978051984268, 0.84803157770763, 0.84598184698206,
- 0.84362382812005, 0.84095413924722, 0.83797173378865, 0.83469373618402,
- 0.83110384571520, 0.82722753473360, 0.82304198905409, 0.81857760046468,
- 0.81381912706217, 0.80876950044491, 0.80344857518505, 0.79784664137700,
- 0.79197358416424, 0.78583531203920, 0.77942875190216, 0.77277808813327,
- 0.76586748650939, 0.75870807608242, 0.75131374561237, 0.74368278636488,
- 0.73582117582769, 0.72774489002994, 0.71944626349561, 0.71094104263095,
- 0.70223887193539, 0.69332823767032, 0.68423532934598, 0.67496631901712,
- 0.66551398801627, 0.65590163024671, 0.64612696959461, 0.63619801077286,
- 0.62612426956055, 0.61591099320291, 0.60557835389180, 0.59511230862496,
- 0.58454032354679, 0.57385241316923, 0.56307891401370, 0.55220512585061,
- 0.54125534487322, 0.53022408956855, 0.51912349702391, 0.50798175000434,
- 0.49677082545707, 0.48552530911099, 0.47424532146115, 0.46293080852757,
- 0.45159965356824, 0.44025537543665, 0.42891199207373, 0.41756968968409,
- 0.40623176767625, 0.39492117615675, 0.38363500139043, 0.37237955463061,
- -0.36115899031355, -0.34999141229310, -0.33887226938665, -0.32781137272105,
- -0.31682789136456, -0.30590985751916, -0.29507167170646, -0.28432141891085,
- -0.27366340405625, -0.26310532994603, -0.25264803095722, -0.24230168845974,
- -0.23206908706791, -0.22196526964149, -0.21197358538056, -0.20212501768103,
- -0.19239667457267, -0.18281725485142, -0.17338081721706, -0.16409588556669,
- -0.15496070710605, -0.14597664911870, -0.13715517611934, -0.12850028503878,
- -0.12000779846800, -0.11168269317730, -0.10353295311463, -0.09555333528914,
- -0.08775475365593, -0.08013729344279, -0.07269433008129, -0.06544098531359,
- -0.05837053268336, -0.05148041767934, -0.04478068215856, -0.03827765720822,
- -0.03195312745332, -0.02582272888064, -0.01988341292573, -0.01412888273558,
- -0.00857117491366, -0.00320868968304, 0.00197656014503, 0.00696368621617,
- 0.01176238327857, 0.01637012582228, 0.02079970728622, 0.02503075618909,
- 0.02908240060125, 0.03295839306691, 0.03664181168133, 0.04014582784127,
- 0.04347687821958, 0.04663033051701, 0.04959786763445, 0.05240938217366,
- 0.05504600343009, 0.05751526919867, 0.05981665708090, 0.06196027790387,
- 0.06394448059633, 0.06576906686508, 0.06745250215166, 0.06896640131951,
- 0.07035330735093, 0.07158263647903, 0.07267746427299, 0.07364060057620,
- 0.07446643947564, 0.07515762552870, 0.07573057565061, 0.07617483218536,
- 0.07650507183194, 0.07672049241746, 0.07682300113923, 0.07681739756964,
- 0.07670934904245, 0.07649921704119, 0.07619924793396, 0.07580083586584,
- 0.07531373362019, 0.07474525581194, 0.07410036424342, 0.07336202550803,
- 0.07256825833083, 0.07170026731102, 0.07076287107266, 0.06976302447127,
- 0.06870438283512, 0.06760759851228, 0.06643675122104, 0.06522471064380,
- 0.06397158980681, 0.06268578081172, 0.06134551717207, 0.05998374801761,
- 0.05859156836260, 0.05716164501299, 0.05571736482138, 0.05424527683589,
- 0.05276307465207, 0.05125561555216, 0.04973857556014, 0.04821657200672,
- 0.04668430272642, 0.04514884056413, 0.04360975421304, 0.04206490946367,
- 0.04053491705584, 0.03900536794745, 0.03748128504252, 0.03596975605542,
- 0.03446209487686, 0.03297540810337, 0.03150176087389, 0.03005026574279,
- 0.02860721736385, 0.02718594296329, 0.02578758475467, 0.02441609920285,
- 0.02306801692862, 0.02174675502535, 0.02045317933555, 0.01918724313698,
- 0.01794333813443, 0.01673247129989, 0.01554055533423, 0.01439046660792,
- -0.01327182200351, -0.01218499959508, -0.01113155480321, -0.01011502154986,
- -0.00913253296085, -0.00817982333726, -0.00726158168517, -0.00637922932685,
- -0.00553372111088, -0.00472225962400, -0.00394011240522, -0.00319337783900,
- -0.00248267236449, -0.00180394725893, -0.00115681355227, -0.00054642808664,
- 0.00002760451905, 0.00058322642480, 0.00109023290512, 0.00157846825768,
- 0.00202741761850, 0.00245085400321, 0.00284467578623, 0.00320918858098,
- 0.00354012465507, 0.00384564081246, 0.00412516423270, 0.00438018617447,
- 0.00460395301471, 0.00481094690600, 0.00498396877629, 0.00513822754514,
- 0.00527157587272, 0.00538389758970, 0.00547537830770, 0.00554043639400,
- 0.00559171286630, 0.00562661141932, 0.00563891995151, 0.00564551969164,
- 0.00562206432097, 0.00559380230045, 0.00554757145088, 0.00548760401507,
- 0.00541967759307, 0.00534716811982, 0.00524611661324, 0.00514073539032,
- 0.00503930226013, 0.00491376035745, 0.00479325608498, 0.00466064606118,
- 0.00452098527825, 0.00437307196781, 0.00422642692270, 0.00408197531935,
- 0.00392074323703, 0.00376039229104, 0.00360082681231, 0.00344188741828,
- 0.00327396134847, 0.00311254206525, 0.00294694477165, 0.00278704643465,
- 0.00262017586902, 0.00246256169126, 0.00230172547746, 0.00214615835557,
- 0.00198411407369, 0.00183482654224, 0.00168680832531, 0.00154432198471,
- 0.00139024948272, 0.00125778846475, 0.00112501551307, 0.00098859883015,
- 0.00086084433262, 0.00074580258865, 0.00062393761391, 0.00051073884952,
- 0.00040265402160, 0.00029495311041, 0.00020430170688, 0.00010943831274,
- 0.00001349497418, -0.00006173344072, -0.00014463809349, -0.00020983373440,
- -0.00028969811748, -0.00035011758756, -0.00040951214522, -0.00046063254803,
- -0.00051455722108, -0.00055645763906, -0.00059461189330, -0.00063415949025,
- -0.00066504150893, -0.00069179375372, -0.00072153919876, -0.00073193571525,
- -0.00075300014201, -0.00076307935757, -0.00077579773310, -0.00078014496257,
- -0.00078036647100, -0.00077798694927, -0.00078343322877, -0.00077248485949,
- -0.00076813719270, -0.00074905980532, -0.00074409418541, -0.00072550431222,
- -0.00071577364744, -0.00069416146273, -0.00067776907764, -0.00065403333621,
- -0.00063124935319, -0.00061327473938, -0.00058709304852, -0.00056778025613,
- -0.00054665656337, -0.00052265642972, -0.00050407143497, -0.00048937912498,
- -0.00048752279712, -0.00049475180896, -0.00056176925738, -0.00055252865047
+const ia_filter_bank_params_struct
+ normal_cross_freq[FILTER_BANK_PARAMETER_COUNT] = {
+ {2.0f / 1024.0f, 0.0000373252f, 0.9913600345f},
+ {3.0f / 1024.0f, 0.0000836207f, 0.9870680830f},
+ {4.0f / 1024.0f, 0.0001480220f, 0.9827947083f},
+ {5.0f / 1024.0f, 0.0002302960f, 0.9785398263f},
+ {6.0f / 1024.0f, 0.0003302134f, 0.9743033527f},
+ {2.0f / 256.0f, 0.0005820761f, 0.9658852897f},
+ {3.0f / 256.0f, 0.0012877837f, 0.9492662926f},
+ {2.0f / 128.0f, 0.0022515827f, 0.9329321561f},
+ {3.0f / 128.0f, 0.0049030350f, 0.9010958535f},
+ {2.0f / 64.0f, 0.0084426929f, 0.8703307793f},
+ {3.0f / 64.0f, 0.0178631928f, 0.8118317459f},
+ {2.0f / 32.0f, 0.0299545822f, 0.7570763753f},
+ {3.0f / 32.0f, 0.0604985076f, 0.6574551915f},
+ {2.0f / 16.0f, 0.0976310729f, 0.5690355937f},
+ {3.0f / 16.0f, 0.1866943331f, 0.4181633458f},
+ {2.0f / 8.0f, 0.2928932188f, 0.2928932188f},
};
-
-const ia_filter_bank_params_struct normal_cross_freq[FILTER_BANK_PARAMETER_COUNT] = {
- {2.0f/1024.0f, 0.0000373252f, 0.9913600345f},
- {3.0f/1024.0f, 0.0000836207f, 0.9870680830f},
- {4.0f/1024.0f, 0.0001480220f, 0.9827947083f},
- {5.0f/1024.0f, 0.0002302960f, 0.9785398263f},
- {6.0f/1024.0f, 0.0003302134f, 0.9743033527f},
- {2.0f/256.0f, 0.0005820761f, 0.9658852897f},
- {3.0f/256.0f, 0.0012877837f, 0.9492662926f},
- {2.0f/128.0f, 0.0022515827f, 0.9329321561f},
- {3.0f/128.0f, 0.0049030350f, 0.9010958535f},
- {2.0f/64.0f, 0.0084426929f, 0.8703307793f},
- {3.0f/64.0f, 0.0178631928f, 0.8118317459f},
- {2.0f/32.0f, 0.0299545822f, 0.7570763753f},
- {3.0f/32.0f, 0.0604985076f, 0.6574551915f},
- {2.0f/16.0f, 0.0976310729f, 0.5690355937f},
- {3.0f/16.0f, 0.1866943331f, 0.4181633458f},
- {2.0f/8.0f, 0.2928932188f, 0.2928932188f},
-};
-
diff --git a/decoder/drc_src/impd_drc_rom.h b/decoder/drc_src/impd_drc_rom.h
index c0c7933..9add85d 100644
--- a/decoder/drc_src/impd_drc_rom.h
+++ b/decoder/drc_src/impd_drc_rom.h
@@ -19,7 +19,7 @@
*/
#ifndef IMPD_DRC_ROM_H
#define IMPD_DRC_ROM_H
-#define MAX_NUM_QMF_BANDS 128
+#define MAX_NUM_QMF_BANDS 128
#define NUM_GAIN_TBL_PROF_0_1_ENTRIES 25
#define NUM_GAIN_TBL_PROF_2_ENTRIES 49
@@ -27,14 +27,16 @@
extern const FLOAT32 samp_rate_tbl[13][12];
-extern const ia_delta_gain_code_table_struct ia_drc_gain_tbls_prof_0_1[NUM_GAIN_TBL_PROF_0_1_ENTRIES];
+extern const ia_delta_gain_code_table_struct
+ ia_drc_gain_tbls_prof_0_1[NUM_GAIN_TBL_PROF_0_1_ENTRIES];
-extern const ia_delta_gain_code_table_struct ia_drc_gain_tbls_prof_2[NUM_GAIN_TBL_PROF_2_ENTRIES];
+extern const ia_delta_gain_code_table_struct
+ ia_drc_gain_tbls_prof_2[NUM_GAIN_TBL_PROF_2_ENTRIES];
extern const FLOAT32 channel_weight[];
extern const FLOAT32 dwnmix_coeff_v1[];
-extern const FLOAT32 eq_slope_tbl [];
+extern const FLOAT32 eq_slope_tbl[];
extern const FLOAT32 eq_gain_delta_tbl[];
@@ -54,14 +56,14 @@ extern const FLOAT32 shape_filt_hf_radius_tbl[];
extern const FLOAT32 shape_filt_cutoff_freq_norm_hf_tbl[];
-extern const ia_cicp_sigmoid_characteristic_param_struct pstr_cicp_sigmoid_characteristic_param[];
+extern const ia_cicp_sigmoid_characteristic_param_struct
+ pstr_cicp_sigmoid_characteristic_param[];
-
-extern const ia_slope_code_table_struct slope_code_tbl_entries_by_size[NUM_SLOPE_TBL_ENTRIES];
+extern const ia_slope_code_table_struct
+ slope_code_tbl_entries_by_size[NUM_SLOPE_TBL_ENTRIES];
extern const FLOAT32 dwnmix_coeff[];
-
extern const FLOAT32 dwnmix_coeff_lfe[];
extern WORD32 drc_characteristic_order_default[][3];
@@ -82,69 +84,72 @@ extern WORD32 measurement_method_peak_loudness_tbl[];
#define MAX_NUM_DOWNMIX_ID_REQUESTS_LOCAL 3
typedef struct {
- WORD32 target_config_request_type;
- WORD32 num_downmix_id_requests;
- WORD32 requested_dwnmix_id[MAX_NUM_DOWNMIX_ID_REQUESTS_LOCAL];
- WORD32 requested_target_layout;
- WORD32 requested_target_ch_count;
+ WORD32 target_config_request_type;
+ WORD32 num_downmix_id_requests;
+ WORD32 requested_dwnmix_id[MAX_NUM_DOWNMIX_ID_REQUESTS_LOCAL];
+ WORD32 requested_target_layout;
+ WORD32 requested_target_ch_count;
} ia_loc_sys_interface_struct;
-
extern const ia_loc_sys_interface_struct loc_sys_interface[];
typedef struct {
- WORD32 loudness_normalization_on;
- FLOAT32 target_loudness;
+ WORD32 loudness_normalization_on;
+ FLOAT32 target_loudness;
} ia_loc_loudness_norm_ctrl_interface_struct;
-extern const ia_loc_loudness_norm_ctrl_interface_struct loc_loudness_norm_ctrl_interface[];
+extern const ia_loc_loudness_norm_ctrl_interface_struct
+ loc_loudness_norm_ctrl_interface[];
typedef struct {
- WORD32 album_mode;
- WORD32 peak_limiter;
- WORD32 loudness_deviation_max;
- WORD32 loudness_measurement_method;
- WORD32 loudness_measurement_system;
- WORD32 loudness_measurement_pre_proc;
- WORD32 device_cut_off_frequency;
- FLOAT32 loudness_norm_gain_db_max;
- FLOAT32 loudness_norm_gain_modification_db;
- FLOAT32 output_peak_level_max;
+ WORD32 album_mode;
+ WORD32 peak_limiter;
+ WORD32 loudness_deviation_max;
+ WORD32 loudness_measurement_method;
+ WORD32 loudness_measurement_system;
+ WORD32 loudness_measurement_pre_proc;
+ WORD32 device_cut_off_frequency;
+ FLOAT32 loudness_norm_gain_db_max;
+ FLOAT32 loudness_norm_gain_modification_db;
+ FLOAT32 output_peak_level_max;
} ia_loc_loudness_norm_param_interface_struct;
-extern const ia_loc_loudness_norm_param_interface_struct loc_loudness_norm_param_interface[];
+extern const ia_loc_loudness_norm_param_interface_struct
+ loc_loudness_norm_param_interface[];
#define MAX_NUM_DRC_FEATURE_REQUESTS_LOCAL 3
typedef struct {
- WORD32 dynamic_range_control_on;
- WORD32 num_drc_feature_requests;
- WORD32 drc_feature_req_type[MAX_NUM_DRC_FEATURE_REQUESTS_LOCAL];
- WORD32 requested_dyn_rng_measurement_type;
- WORD32 requested_dyn_range_is_single_val_flag;
- FLOAT32 requested_dyn_range_value;
- FLOAT32 requested_dyn_range_min_val;
- FLOAT32 requested_dyn_range_max_val;
- WORD32 requested_drc_characteristic;
+ WORD32 dynamic_range_control_on;
+ WORD32 num_drc_feature_requests;
+ WORD32 drc_feature_req_type[MAX_NUM_DRC_FEATURE_REQUESTS_LOCAL];
+ WORD32 requested_dyn_rng_measurement_type;
+ WORD32 requested_dyn_range_is_single_val_flag;
+ FLOAT32 requested_dyn_range_value;
+ FLOAT32 requested_dyn_range_min_val;
+ FLOAT32 requested_dyn_range_max_val;
+ WORD32 requested_drc_characteristic;
} ia_loc_drc_interface_struct;
extern const ia_loc_drc_interface_struct loc_dyn_range_ctrl_interface[];
#define MAX_NUM_DRC_EFFECT_TYPE_REQUESTS_LOCAL 5
typedef struct {
- WORD32 requested_num_drc_effects;
- WORD32 desired_num_drc_effects_of_requested;
- WORD32 requested_drc_effect_type[MAX_NUM_DRC_EFFECT_TYPE_REQUESTS_LOCAL];
+ WORD32 requested_num_drc_effects;
+ WORD32 desired_num_drc_effects_of_requested;
+ WORD32 requested_drc_effect_type[MAX_NUM_DRC_EFFECT_TYPE_REQUESTS_LOCAL];
} ia_loc_requested_drc_effect_struct;
-extern const ia_loc_requested_drc_effect_struct loc_requested_drc_effect_type_str[];
+extern const ia_loc_requested_drc_effect_struct
+ loc_requested_drc_effect_type_str[];
typedef struct {
- FLOAT32 compress;
- FLOAT32 boost;
- WORD32 drc_characteristic_target;
+ FLOAT32 compress;
+ FLOAT32 boost;
+ WORD32 drc_characteristic_target;
} ia_loc_drc_parameter_interface_struct;
-extern const ia_loc_drc_parameter_interface_struct loc_drc_parameter_interface[];
+extern const ia_loc_drc_parameter_interface_struct
+ loc_drc_parameter_interface[];
extern FLOAT32 f_bands_nrm_QMF71[71];
extern FLOAT32 f_bands_nrm_QMF64[64];
@@ -152,5 +157,6 @@ extern FLOAT32 f_bands_nrm_STFT256[257];
FLOAT64 qmf_filter_coeff[640];
-extern const ia_filter_bank_params_struct normal_cross_freq[FILTER_BANK_PARAMETER_COUNT];
+extern const ia_filter_bank_params_struct
+ normal_cross_freq[FILTER_BANK_PARAMETER_COUNT];
#endif
diff --git a/decoder/drc_src/impd_drc_sel_proc_drc_set_sel.h b/decoder/drc_src/impd_drc_sel_proc_drc_set_sel.h
index 18c5697..6c96751 100644
--- a/decoder/drc_src/impd_drc_sel_proc_drc_set_sel.h
+++ b/decoder/drc_src/impd_drc_sel_proc_drc_set_sel.h
@@ -24,28 +24,27 @@
extern "C" {
#endif /* __cplusplus */
-
-#define SELECTION_FLAG_DRC_TARGET_LOUDNESS_MATCH (1<<0)
-#define SELECTION_FLAG_EXPLICIT_PEAK_INFO_PRESENT (1<<1)
+#define SELECTION_FLAG_DRC_TARGET_LOUDNESS_MATCH (1 << 0)
+#define SELECTION_FLAG_EXPLICIT_PEAK_INFO_PRESENT (1 << 1)
typedef struct {
- WORD32 drc_instructions_index;
- WORD32 downmix_id_request_index;
- WORD32 eq_set_id;
- FLOAT32 output_peak_level;
- FLOAT32 loudness_norm_db_gain_adjusted;
- FLOAT32 output_loudness;
- FLOAT32 mixing_level;
- WORD32 selection_flags;
+ WORD32 drc_instructions_index;
+ WORD32 downmix_id_request_index;
+ WORD32 eq_set_id;
+ FLOAT32 output_peak_level;
+ FLOAT32 loudness_norm_db_gain_adjusted;
+ FLOAT32 output_loudness;
+ FLOAT32 mixing_level;
+ WORD32 selection_flags;
} ia_selection_candidate_info_struct;
-
WORD32
-impd_validate_requested_drc_feature(ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct);
+impd_validate_requested_drc_feature(
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct);
WORD32
impd_map_requested_effect_bit_idx(WORD32 requested_effect_type,
- WORD32* effect_bit_idx);
+ WORD32* effect_bit_idx);
WORD32
impd_get_fading_drc_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc);
@@ -55,127 +54,123 @@ impd_get_ducking_drc_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc);
WORD32
impd_get_selected_drc_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- WORD32 drc_set_id_selected);
+ WORD32 drc_set_id_selected);
WORD32
impd_get_dependent_drc_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc);
WORD32
-impd_get_dependent_drc_instructions(const ia_drc_config* drc_config,
- const ia_drc_instructions_struct* str_drc_instruction_str,
- ia_drc_instructions_struct** ppstr_drc_instructions_dependent);
+impd_get_dependent_drc_instructions(
+ const ia_drc_config* drc_config,
+ const ia_drc_instructions_struct* str_drc_instruction_str,
+ ia_drc_instructions_struct** ppstr_drc_instructions_dependent);
WORD32
-impd_manage_drc_complexity (ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- ia_drc_config* pstr_drc_config);
+impd_manage_drc_complexity(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
+ ia_drc_config* pstr_drc_config);
WORD32
-impd_manage_eq_complexity (ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- ia_drc_config* pstr_drc_config);
+impd_manage_eq_complexity(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
+ ia_drc_config* pstr_drc_config);
WORD32
-impd_manage_complexity (ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- ia_drc_config* pstr_drc_config,
- WORD32* repeat_selection);
+impd_manage_complexity(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
+ ia_drc_config* pstr_drc_config,
+ WORD32* repeat_selection);
WORD32
impd_get_selected_eq_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- WORD32 eq_set_id_selected);
+ WORD32 eq_set_id_selected);
WORD32
impd_get_dependent_eq_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc);
WORD32
impd_get_selected_loud_eq_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- WORD32 loudEqSetIdSelected);
+ WORD32 loudEqSetIdSelected);
WORD32
-impd_select_drcs_without_compr_effects (ia_drc_config* pstr_drc_config,
- WORD32* match_found_flag,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info);
+impd_select_drcs_without_compr_effects(
+ ia_drc_config* pstr_drc_config, WORD32* match_found_flag,
+ WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info);
WORD32
-impd_match_effect_type_attempt(ia_drc_config* pstr_drc_config,
- WORD32 requested_effect_type,
- WORD32 stateRequested,
- WORD32* match_found_flag,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info);
+impd_match_effect_type_attempt(
+ ia_drc_config* pstr_drc_config, WORD32 requested_effect_type,
+ WORD32 stateRequested, WORD32* match_found_flag,
+ WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info);
WORD32
-impd_match_effect_types(ia_drc_config* pstr_drc_config,
- WORD32 total_effect_type_requested,
- WORD32 desired_effect_type_requested,
- WORD32* requested_effect_type,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info);
+impd_match_effect_types(
+ ia_drc_config* pstr_drc_config, WORD32 total_effect_type_requested,
+ WORD32 desired_effect_type_requested, WORD32* requested_effect_type,
+ WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info);
-WORD32 impd_match_dynamic_range(ia_drc_config* pstr_drc_config,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
- WORD32 num_drc_requests,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info);
+WORD32 impd_match_dynamic_range(
+ ia_drc_config* pstr_drc_config,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
+ WORD32 num_drc_requests, WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info);
WORD32
-impd_match_drc_characteristic_attempt(ia_drc_config* pstr_drc_config,
- WORD32 requested_drc_characteristic,
- WORD32* match_found_flag,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info);
+impd_match_drc_characteristic_attempt(
+ ia_drc_config* pstr_drc_config, WORD32 requested_drc_characteristic,
+ WORD32* match_found_flag, WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info);
WORD32
-impd_match_drc_characteristic(ia_drc_config* pstr_drc_config,
- WORD32 requested_drc_characteristic,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info);
+impd_match_drc_characteristic(
+ ia_drc_config* pstr_drc_config, WORD32 requested_drc_characteristic,
+ WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info);
-VOID impd_select_drc_coeff3(ia_drc_config* drc_config,
- ia_uni_drc_coeffs_struct** str_p_loc_drc_coefficients_uni_drc);
+VOID impd_select_drc_coeff3(
+ ia_drc_config* drc_config,
+ ia_uni_drc_coeffs_struct** str_p_loc_drc_coefficients_uni_drc);
WORD32
-impd_drc_set_preselection(ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
- ia_drc_config* pstr_drc_config,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- WORD32 restrict_to_drc_with_album_loudness,
- ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info);
+impd_drc_set_preselection(
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
+ ia_drc_config* pstr_drc_config,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ WORD32 restrict_to_drc_with_album_loudness,
+ ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
+ WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info);
-WORD32 impd_drc_set_final_selection(ia_drc_config* pstr_drc_config,
- ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info
- , WORD32* eq_set_id_valid_flag
-);
+WORD32 impd_drc_set_final_selection(
+ ia_drc_config* pstr_drc_config,
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
+ WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info,
+ WORD32* eq_set_id_valid_flag);
-WORD32 impd_match_eq_set_purpose(ia_drc_config* drc_config,
- WORD32 eq_set_purpose_requested,
- WORD32* eq_set_id_valid_flag,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info,
- ia_selection_candidate_info_struct* selection_candidate_info_step_2
- );
+WORD32 impd_match_eq_set_purpose(
+ ia_drc_config* drc_config, WORD32 eq_set_purpose_requested,
+ WORD32* eq_set_id_valid_flag, WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info,
+ ia_selection_candidate_info_struct* selection_candidate_info_step_2);
WORD32
impd_select_drc_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- WORD32* drc_set_id_selected
- , WORD32* eq_set_id_selected
- , WORD32* loud_eq_id_sel
- );
+ WORD32* drc_set_id_selected, WORD32* eq_set_id_selected,
+ WORD32* loud_eq_id_sel);
WORD32
impd_drc_sel_proc_init_dflt(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc);
WORD32
-impd_drc_sel_proc_init_sel_proc_params(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct);
+impd_drc_sel_proc_init_sel_proc_params(
+ ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct);
WORD32
-impd_drc_sel_proc_init_interface_params(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- ia_drc_interface_struct* pstr_drc_interface);
-
-
+impd_drc_sel_proc_init_interface_params(
+ ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
+ ia_drc_interface_struct* pstr_drc_interface);
#ifdef __cplusplus
}
diff --git a/decoder/drc_src/impd_drc_selection_process.c b/decoder/drc_src/impd_drc_selection_process.c
index b7b6e36..b5b1b7f 100644
--- a/decoder/drc_src/impd_drc_selection_process.c
+++ b/decoder/drc_src/impd_drc_selection_process.c
@@ -29,1072 +29,1090 @@
#include "impd_drc_selection_process.h"
#include "impd_drc_sel_proc_drc_set_sel.h"
-WORD32 impd_drc_uni_selction_proc_init(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
- ia_drc_interface_struct* pstr_drc_interface,
- WORD32 subband_domain_mode)
-{
- WORD32 err = 0;
-
- if (pstr_drc_uni_sel_proc == NULL) {
- return 1;
- }
+WORD32 impd_drc_uni_selction_proc_init(
+ ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
+ ia_drc_interface_struct* pstr_drc_interface, WORD32 subband_domain_mode) {
+ WORD32 err = 0;
+
+ if (pstr_drc_uni_sel_proc == NULL) {
+ return 1;
+ }
+
+ if (pstr_drc_uni_sel_proc->first_frame == 1) {
+ err = impd_drc_sel_proc_init_dflt(pstr_drc_uni_sel_proc);
+ if (err) return (err);
+ }
- if (pstr_drc_uni_sel_proc->first_frame == 1) {
- err = impd_drc_sel_proc_init_dflt(pstr_drc_uni_sel_proc);
- if (err) return (err);
+ err = impd_drc_sel_proc_init_sel_proc_params(pstr_drc_uni_sel_proc,
+ pstr_drc_sel_proc_params_struct);
+ if (err) return (err);
+ {
+ WORD32 i;
+ pstr_drc_uni_sel_proc->drc_set_id_valid_flag[0] = 1;
+ for (i = 1; i < DRC_INSTRUCTIONS_COUNT_MAX; i++) {
+ pstr_drc_uni_sel_proc->drc_set_id_valid_flag[i] = 0;
}
- err = impd_drc_sel_proc_init_sel_proc_params(pstr_drc_uni_sel_proc,
- pstr_drc_sel_proc_params_struct);
- if (err) return (err);
- {
- WORD32 i;
- pstr_drc_uni_sel_proc->drc_set_id_valid_flag[0] = 1;
- for (i=1; i<DRC_INSTRUCTIONS_COUNT_MAX; i++)
- {
- pstr_drc_uni_sel_proc->drc_set_id_valid_flag[i] = 0;
- }
-
- pstr_drc_uni_sel_proc->eq_set_id_valid_flag[0] = 1;
- for (i=1; i<EQ_INSTRUCTIONS_COUNT_MAX; i++)
- {
- pstr_drc_uni_sel_proc->eq_set_id_valid_flag[i] = 0;
- }
+ pstr_drc_uni_sel_proc->eq_set_id_valid_flag[0] = 1;
+ for (i = 1; i < EQ_INSTRUCTIONS_COUNT_MAX; i++) {
+ pstr_drc_uni_sel_proc->eq_set_id_valid_flag[i] = 0;
}
- err = impd_drc_sel_proc_init_interface_params(pstr_drc_uni_sel_proc,
- pstr_drc_interface);
- if (err) return (err);
+ }
+ err = impd_drc_sel_proc_init_interface_params(pstr_drc_uni_sel_proc,
+ pstr_drc_interface);
+ if (err) return (err);
- pstr_drc_uni_sel_proc->subband_domain_mode = subband_domain_mode;
+ pstr_drc_uni_sel_proc->subband_domain_mode = subband_domain_mode;
- return 0;
+ return 0;
}
-
WORD32
-impd_drc_uni_sel_proc_process(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- ia_drc_config* pstr_drc_config,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- ia_drc_sel_proc_output_struct* hia_drc_sel_proc_output_struct)
-{
- WORD32 i, err, drc_set_id_selected, activeDrcSetIndex;
- WORD32 eq_set_id_selected;
- WORD32 loudEqSetIdSelected;
-
-
- if (pstr_drc_config != NULL)
- {
- if ( memcmp ( &pstr_drc_uni_sel_proc->drc_config, pstr_drc_config, sizeof(ia_drc_config) ))
- {
- pstr_drc_uni_sel_proc->drc_config = *pstr_drc_config;
- pstr_drc_uni_sel_proc->drc_config_flag = 1;
-
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.base_channel_count != pstr_drc_uni_sel_proc->drc_config.channel_layout.base_channel_count)
- {
-
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.base_channel_count = pstr_drc_uni_sel_proc->drc_config.channel_layout.base_channel_count;
- }
- if (pstr_drc_uni_sel_proc->drc_config.channel_layout.layout_signaling_present == 1 && pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.base_layout != pstr_drc_uni_sel_proc->drc_config.channel_layout.defined_layout)
- {
-
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.base_layout = pstr_drc_uni_sel_proc->drc_config.channel_layout.defined_layout;
- }
- }
- else
- {
- pstr_drc_uni_sel_proc->drc_config_flag = 0;
- }
+impd_drc_uni_sel_proc_process(
+ ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
+ ia_drc_config* pstr_drc_config,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ ia_drc_sel_proc_output_struct* hia_drc_sel_proc_output_struct) {
+ WORD32 i, err, drc_set_id_selected, activeDrcSetIndex;
+ WORD32 eq_set_id_selected;
+ WORD32 loudEqSetIdSelected;
+
+ if (pstr_drc_config != NULL) {
+ if (memcmp(&pstr_drc_uni_sel_proc->drc_config, pstr_drc_config,
+ sizeof(ia_drc_config))) {
+ pstr_drc_uni_sel_proc->drc_config = *pstr_drc_config;
+ pstr_drc_uni_sel_proc->drc_config_flag = 1;
+
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.base_channel_count !=
+ pstr_drc_uni_sel_proc->drc_config.channel_layout.base_channel_count) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.base_channel_count =
+ pstr_drc_uni_sel_proc->drc_config.channel_layout.base_channel_count;
+ }
+ if (pstr_drc_uni_sel_proc->drc_config.channel_layout
+ .layout_signaling_present == 1 &&
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.base_layout !=
+ pstr_drc_uni_sel_proc->drc_config.channel_layout.defined_layout) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.base_layout =
+ pstr_drc_uni_sel_proc->drc_config.channel_layout.defined_layout;
+ }
+ } else {
+ pstr_drc_uni_sel_proc->drc_config_flag = 0;
}
- if (pstr_loudness_info != NULL)
- {
- if ( memcmp ( &pstr_drc_uni_sel_proc->loudness_info_set, pstr_loudness_info, sizeof(ia_drc_loudness_info_set_struct) ))
- {
- pstr_drc_uni_sel_proc->loudness_info_set = *pstr_loudness_info;
- pstr_drc_uni_sel_proc->loudness_info_set_flag = 1;
- }
- else
- {
- pstr_drc_uni_sel_proc->loudness_info_set_flag = 0;
- }
- }
-
- if ((pstr_drc_uni_sel_proc->drc_config_flag && pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_config_request_type != 0) ||
- (pstr_drc_uni_sel_proc->sel_proc_request_flag && pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_config_request_type != 0) ||
- (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_config_request_type == 0 && pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests == 0))
- {
- err = impd_map_target_config_req_downmix_id(pstr_drc_uni_sel_proc,
- &pstr_drc_uni_sel_proc->drc_config);
- if (err) return (err);
+ }
+ if (pstr_loudness_info != NULL) {
+ if (memcmp(&pstr_drc_uni_sel_proc->loudness_info_set, pstr_loudness_info,
+ sizeof(ia_drc_loudness_info_set_struct))) {
+ pstr_drc_uni_sel_proc->loudness_info_set = *pstr_loudness_info;
+ pstr_drc_uni_sel_proc->loudness_info_set_flag = 1;
+ } else {
+ pstr_drc_uni_sel_proc->loudness_info_set_flag = 0;
}
+ }
+
+ if ((pstr_drc_uni_sel_proc->drc_config_flag &&
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .target_config_request_type != 0) ||
+ (pstr_drc_uni_sel_proc->sel_proc_request_flag &&
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .target_config_request_type != 0) ||
+ (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .target_config_request_type == 0 &&
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests ==
+ 0)) {
+ err = impd_map_target_config_req_downmix_id(
+ pstr_drc_uni_sel_proc, &pstr_drc_uni_sel_proc->drc_config);
+ if (err) return (err);
+ }
- if (pstr_drc_uni_sel_proc->drc_config_flag || pstr_drc_uni_sel_proc->loudness_info_set_flag || pstr_drc_uni_sel_proc->sel_proc_request_flag) {
-
- WORD32 repeat_selection = 1;
- WORD32 loop_cnt = 0;
-
- err = impd_manage_drc_complexity (pstr_drc_uni_sel_proc, pstr_drc_config);
- if (err) return(err);
- err = impd_manage_eq_complexity (pstr_drc_uni_sel_proc, pstr_drc_config);
- if (err) return(err);
- while (repeat_selection==1)
- {
- err = impd_select_drc_set(pstr_drc_uni_sel_proc,
- &drc_set_id_selected
- , &eq_set_id_selected
- , &loudEqSetIdSelected
- );
- if (err) return (err);
-
- err = impd_get_selected_drc_set(pstr_drc_uni_sel_proc,
- drc_set_id_selected);
- if (err) return (err);
-
- err = impd_get_dependent_drc_set(pstr_drc_uni_sel_proc);
- if (err) return (err);
-
- err = impd_get_fading_drc_set(pstr_drc_uni_sel_proc);
- if (err) return (err);
-
- err = impd_get_ducking_drc_set(pstr_drc_uni_sel_proc);
- if (err) return (err);
-
- pstr_drc_uni_sel_proc->eq_inst_index[0] = -1;
- pstr_drc_uni_sel_proc->eq_inst_index[1] = -1;
-
- err = impd_get_selected_eq_set(pstr_drc_uni_sel_proc, eq_set_id_selected);
- if (err) return (err);
-
- err = impd_get_dependent_eq_set(pstr_drc_uni_sel_proc);
- if (err) return (err);
-
- err = impd_get_selected_loud_eq_set(pstr_drc_uni_sel_proc, loudEqSetIdSelected);
- if (err) return (err);
-
- activeDrcSetIndex = 0;
- for (i=SUB_DRC_COUNT-1; i>=0; i--) {
- WORD32 drc_instructions_index = pstr_drc_uni_sel_proc->drc_instructions_index[i];
- ia_drc_instructions_struct str_drc_instruction_str;
-
- str_drc_instruction_str = pstr_drc_uni_sel_proc->drc_config.str_drc_instruction_str[drc_instructions_index];
-
- if (drc_instructions_index >= 0 && str_drc_instruction_str.drc_set_id > 0)
- {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_drc_set_ids[activeDrcSetIndex] = str_drc_instruction_str.drc_set_id;
-
- if ((i==3) && (str_drc_instruction_str.drc_set_effect & (EFFECT_BIT_DUCK_SELF | EFFECT_BIT_DUCK_OTHER))) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_downmix_ids[activeDrcSetIndex] = 0;
- }
- else {
- if (str_drc_instruction_str.drc_apply_to_dwnmix == 1) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_downmix_ids[activeDrcSetIndex] = str_drc_instruction_str.downmix_id[0];
- } else {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_downmix_ids[activeDrcSetIndex] = 0;
- }
- }
+ if (pstr_drc_uni_sel_proc->drc_config_flag ||
+ pstr_drc_uni_sel_proc->loudness_info_set_flag ||
+ pstr_drc_uni_sel_proc->sel_proc_request_flag) {
+ WORD32 repeat_selection = 1;
+ WORD32 loop_cnt = 0;
- activeDrcSetIndex++;
- }
- }
- if (activeDrcSetIndex <= 3)
- {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.num_sel_drc_sets = activeDrcSetIndex;
- } else
- {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.num_sel_drc_sets = -1;
- return(UNEXPECTED_ERROR);
+ err = impd_manage_drc_complexity(pstr_drc_uni_sel_proc, pstr_drc_config);
+ if (err) return (err);
+ err = impd_manage_eq_complexity(pstr_drc_uni_sel_proc, pstr_drc_config);
+ if (err) return (err);
+ while (repeat_selection == 1) {
+ err = impd_select_drc_set(pstr_drc_uni_sel_proc, &drc_set_id_selected,
+ &eq_set_id_selected, &loudEqSetIdSelected);
+ if (err) return (err);
+
+ err =
+ impd_get_selected_drc_set(pstr_drc_uni_sel_proc, drc_set_id_selected);
+ if (err) return (err);
+
+ err = impd_get_dependent_drc_set(pstr_drc_uni_sel_proc);
+ if (err) return (err);
+
+ err = impd_get_fading_drc_set(pstr_drc_uni_sel_proc);
+ if (err) return (err);
+
+ err = impd_get_ducking_drc_set(pstr_drc_uni_sel_proc);
+ if (err) return (err);
+
+ pstr_drc_uni_sel_proc->eq_inst_index[0] = -1;
+ pstr_drc_uni_sel_proc->eq_inst_index[1] = -1;
+
+ err = impd_get_selected_eq_set(pstr_drc_uni_sel_proc, eq_set_id_selected);
+ if (err) return (err);
+
+ err = impd_get_dependent_eq_set(pstr_drc_uni_sel_proc);
+ if (err) return (err);
+
+ err = impd_get_selected_loud_eq_set(pstr_drc_uni_sel_proc,
+ loudEqSetIdSelected);
+ if (err) return (err);
+
+ activeDrcSetIndex = 0;
+ for (i = SUB_DRC_COUNT - 1; i >= 0; i--) {
+ WORD32 drc_instructions_index =
+ pstr_drc_uni_sel_proc->drc_instructions_index[i];
+ ia_drc_instructions_struct str_drc_instruction_str;
+
+ str_drc_instruction_str =
+ pstr_drc_uni_sel_proc->drc_config
+ .str_drc_instruction_str[drc_instructions_index];
+
+ if (drc_instructions_index >= 0 &&
+ str_drc_instruction_str.drc_set_id > 0) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output
+ .sel_drc_set_ids[activeDrcSetIndex] =
+ str_drc_instruction_str.drc_set_id;
+
+ if ((i == 3) && (str_drc_instruction_str.drc_set_effect &
+ (EFFECT_BIT_DUCK_SELF | EFFECT_BIT_DUCK_OTHER))) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output
+ .sel_downmix_ids[activeDrcSetIndex] = 0;
+ } else {
+ if (str_drc_instruction_str.drc_apply_to_dwnmix == 1) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output
+ .sel_downmix_ids[activeDrcSetIndex] =
+ str_drc_instruction_str.downmix_id[0];
+ } else {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output
+ .sel_downmix_ids[activeDrcSetIndex] = 0;
}
+ }
- impd_sel_downmix_matrix(pstr_drc_uni_sel_proc,
- &pstr_drc_uni_sel_proc->drc_config);
-
- err = impd_manage_complexity (pstr_drc_uni_sel_proc, pstr_drc_config, &repeat_selection);
- if (err) return(err);
-
- loop_cnt++;
- if (loop_cnt > 100)
- {
- return (UNEXPECTED_ERROR);
- }
+ activeDrcSetIndex++;
}
+ }
+ if (activeDrcSetIndex <= 3) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.num_sel_drc_sets =
+ activeDrcSetIndex;
+ } else {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.num_sel_drc_sets = -1;
+ return (UNEXPECTED_ERROR);
+ }
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 0;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.boost = pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.boost;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.compress = pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.compress;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.drc_characteristic_target = pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.drc_characteristic_target;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.loudness_normalization_gain_db += pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_norm_gain_modification_db;
-
+ impd_sel_downmix_matrix(pstr_drc_uni_sel_proc,
+ &pstr_drc_uni_sel_proc->drc_config);
+ err = impd_manage_complexity(pstr_drc_uni_sel_proc, pstr_drc_config,
+ &repeat_selection);
+ if (err) return (err);
+ loop_cnt++;
+ if (loop_cnt > 100) {
+ return (UNEXPECTED_ERROR);
+ }
}
- for (i=0; i<2; i++)
- {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_eq_set_ids[i] = pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext.str_eq_instructions[pstr_drc_uni_sel_proc->eq_inst_index[i]].eq_set_id;
- }
- if (pstr_drc_uni_sel_proc->loud_eq_inst_index_sel >= 0)
- {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_loud_eq_id = pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext.loud_eq_instructions[pstr_drc_uni_sel_proc->loud_eq_inst_index_sel].loud_eq_set_id;
- }
- else
- {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_loud_eq_id = 0;
- }
- *hia_drc_sel_proc_output_struct = pstr_drc_uni_sel_proc->uni_drc_sel_proc_output;
- return 0;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 0;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.boost =
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.boost;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.compress =
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.compress;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.drc_characteristic_target =
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .drc_characteristic_target;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output
+ .loudness_normalization_gain_db +=
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .loudness_norm_gain_modification_db;
+ }
+ for (i = 0; i < 2; i++) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_eq_set_ids[i] =
+ pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext
+ .str_eq_instructions[pstr_drc_uni_sel_proc->eq_inst_index[i]]
+ .eq_set_id;
+ }
+ if (pstr_drc_uni_sel_proc->loud_eq_inst_index_sel >= 0) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_loud_eq_id =
+ pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext
+ .loud_eq_instructions[pstr_drc_uni_sel_proc->loud_eq_inst_index_sel]
+ .loud_eq_set_id;
+ } else {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_loud_eq_id = 0;
+ }
+ *hia_drc_sel_proc_output_struct =
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output;
+
+ return 0;
}
-WORD32 impd_map_target_config_req_downmix_id(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- ia_drc_config* pstr_drc_config)
-{
- WORD32 i, dwnmix_instructions_count;
- WORD32 target_ch_count_prelim = pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.base_channel_count;
-
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests = 0;
- switch (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_config_request_type) {
- case 0:
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests == 0)
- {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dwnmix_id[0] = 0;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests = 1;
- }
- break;
- case 1:
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_target_layout == pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.base_layout)
- {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dwnmix_id[0] = 0;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests = 1;
- }
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests == 0) {
- dwnmix_instructions_count = pstr_drc_uni_sel_proc->drc_config.dwnmix_instructions_count;
- for (i=0; i<dwnmix_instructions_count; i++)
- {
- ia_downmix_instructions_struct* dwnmix_instructions = &(pstr_drc_config->dwnmix_instructions[i]);
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_target_layout == dwnmix_instructions->target_layout)
- {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dwnmix_id[pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests] = dwnmix_instructions->downmix_id;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests += 1;
- target_ch_count_prelim = dwnmix_instructions->target_channel_count;
- }
- }
- }
-
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests == 0)
- {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dwnmix_id[0] = 0;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests = 1;
- }
- break;
- case 2:
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_target_ch_count == pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.base_channel_count)
- {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dwnmix_id[0] = 0;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests = 1;
- }
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests == 0)
- {
- dwnmix_instructions_count = pstr_drc_uni_sel_proc->drc_config.dwnmix_instructions_count;
- for (i=0; i<dwnmix_instructions_count; i++)
- {
- ia_downmix_instructions_struct* dwnmix_instructions = &(pstr_drc_config->dwnmix_instructions[i]);
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_target_ch_count == dwnmix_instructions->target_channel_count) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dwnmix_id[pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests] = dwnmix_instructions->downmix_id;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests += 1;
- target_ch_count_prelim = dwnmix_instructions->target_channel_count;
- }
- }
- }
-
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests == 0)
- {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dwnmix_id[0] = 0;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests = 1;
- }
- break;
- default:
- return UNEXPECTED_ERROR;
- break;
- }
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_ch_count_prelim = target_ch_count_prelim;
-
- return 0;
+WORD32 impd_map_target_config_req_downmix_id(
+ ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
+ ia_drc_config* pstr_drc_config) {
+ WORD32 i, dwnmix_instructions_count;
+ WORD32 target_ch_count_prelim =
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.base_channel_count;
+
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests = 0;
+ switch (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .target_config_request_type) {
+ case 0:
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .num_downmix_id_requests == 0) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dwnmix_id[0] =
+ 0;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests =
+ 1;
+ }
+ break;
+ case 1:
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_target_layout ==
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.base_layout) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dwnmix_id[0] =
+ 0;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests =
+ 1;
+ }
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .num_downmix_id_requests == 0) {
+ dwnmix_instructions_count =
+ pstr_drc_uni_sel_proc->drc_config.dwnmix_instructions_count;
+ for (i = 0; i < dwnmix_instructions_count; i++) {
+ ia_downmix_instructions_struct* dwnmix_instructions =
+ &(pstr_drc_config->dwnmix_instructions[i]);
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_target_layout ==
+ dwnmix_instructions->target_layout) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dwnmix_id
+ [pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .num_downmix_id_requests] =
+ dwnmix_instructions->downmix_id;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .num_downmix_id_requests += 1;
+ target_ch_count_prelim = dwnmix_instructions->target_channel_count;
+ }
+ }
+ }
+
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .num_downmix_id_requests == 0) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dwnmix_id[0] =
+ 0;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests =
+ 1;
+ }
+ break;
+ case 2:
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_target_ch_count ==
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.base_channel_count) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dwnmix_id[0] =
+ 0;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests =
+ 1;
+ }
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .num_downmix_id_requests == 0) {
+ dwnmix_instructions_count =
+ pstr_drc_uni_sel_proc->drc_config.dwnmix_instructions_count;
+ for (i = 0; i < dwnmix_instructions_count; i++) {
+ ia_downmix_instructions_struct* dwnmix_instructions =
+ &(pstr_drc_config->dwnmix_instructions[i]);
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_target_ch_count ==
+ dwnmix_instructions->target_channel_count) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dwnmix_id
+ [pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .num_downmix_id_requests] =
+ dwnmix_instructions->downmix_id;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .num_downmix_id_requests += 1;
+ target_ch_count_prelim = dwnmix_instructions->target_channel_count;
+ }
+ }
+ }
+
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .num_downmix_id_requests == 0) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dwnmix_id[0] =
+ 0;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests =
+ 1;
+ }
+ break;
+ default:
+ return UNEXPECTED_ERROR;
+ break;
+ }
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_ch_count_prelim =
+ target_ch_count_prelim;
+
+ return 0;
}
VOID impd_sel_downmix_matrix(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- ia_drc_config* pstr_drc_config)
-{
- WORD32 i, j, n;
-
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.base_channel_count = pstr_drc_config->channel_layout.base_channel_count;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.target_channel_count = pstr_drc_config->channel_layout.base_channel_count;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.target_layout = -1;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.downmix_matrix_present = 0;
- pstr_drc_uni_sel_proc->downmix_inst_index_sel = -1;
-
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.active_downmix_id != 0) {
-
- for (n=0; n<pstr_drc_config->dwnmix_instructions_count; n++) {
- ia_downmix_instructions_struct* dwnmix_instructions = &(pstr_drc_config->dwnmix_instructions[n]);
-
-
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.active_downmix_id == dwnmix_instructions->downmix_id) {
- pstr_drc_uni_sel_proc->downmix_inst_index_sel = n;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.target_channel_count = dwnmix_instructions->target_channel_count;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.target_layout = dwnmix_instructions->target_layout;
- if (dwnmix_instructions->downmix_coefficients_present) {
- for( i =0 ; i < pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.base_channel_count; i++)
- {
- for( j =0 ; j < pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.target_channel_count; j++)
- {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.downmix_matrix[i][j] = dwnmix_instructions->downmix_coefficient[i+j*pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.base_channel_count];
- }
- }
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.downmix_matrix_present = 1;
- }
- break;
+ ia_drc_config* pstr_drc_config) {
+ WORD32 i, j, n;
+
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.base_channel_count =
+ pstr_drc_config->channel_layout.base_channel_count;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.target_channel_count =
+ pstr_drc_config->channel_layout.base_channel_count;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.target_layout = -1;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.downmix_matrix_present = 0;
+ pstr_drc_uni_sel_proc->downmix_inst_index_sel = -1;
+
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.active_downmix_id != 0) {
+ for (n = 0; n < pstr_drc_config->dwnmix_instructions_count; n++) {
+ ia_downmix_instructions_struct* dwnmix_instructions =
+ &(pstr_drc_config->dwnmix_instructions[n]);
+
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.active_downmix_id ==
+ dwnmix_instructions->downmix_id) {
+ pstr_drc_uni_sel_proc->downmix_inst_index_sel = n;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.target_channel_count =
+ dwnmix_instructions->target_channel_count;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.target_layout =
+ dwnmix_instructions->target_layout;
+ if (dwnmix_instructions->downmix_coefficients_present) {
+ for (i = 0; i < pstr_drc_uni_sel_proc->uni_drc_sel_proc_output
+ .base_channel_count;
+ i++) {
+ for (j = 0; j < pstr_drc_uni_sel_proc->uni_drc_sel_proc_output
+ .target_channel_count;
+ j++) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output
+ .downmix_matrix[i][j] =
+ dwnmix_instructions->downmix_coefficient
+ [i +
+ j *
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output
+ .base_channel_count];
}
+ }
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output
+ .downmix_matrix_present = 1;
}
+ break;
+ }
}
- return;
+ }
+ return;
}
-
WORD32 impd_get_selected_eq_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- WORD32 eq_set_id_selected)
-{
- WORD32 n;
-
- pstr_drc_uni_sel_proc->eq_inst_index_sel = -1;
-
- if (eq_set_id_selected > 0)
- {
- for(n=0; n<pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext.eq_instructions_count; n++)
- {
- if (pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext.str_eq_instructions[n].eq_set_id == eq_set_id_selected) break;
- }
- if (n == pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext.eq_instructions_count)
- {
- return(EXTERNAL_ERROR);
- }
- pstr_drc_uni_sel_proc->eq_inst_index_sel = n;
- if (pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext.str_eq_instructions[n].eq_apply_to_downmix == 1)
- {
- pstr_drc_uni_sel_proc->eq_inst_index[1] = pstr_drc_uni_sel_proc->eq_inst_index_sel;
- }
- else
- {
- pstr_drc_uni_sel_proc->eq_inst_index[0] = pstr_drc_uni_sel_proc->eq_inst_index_sel;
- }
+ WORD32 eq_set_id_selected) {
+ WORD32 n;
+
+ pstr_drc_uni_sel_proc->eq_inst_index_sel = -1;
+
+ if (eq_set_id_selected > 0) {
+ for (n = 0; n < pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext
+ .eq_instructions_count;
+ n++) {
+ if (pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext
+ .str_eq_instructions[n]
+ .eq_set_id == eq_set_id_selected)
+ break;
}
- return (0);
+ if (n ==
+ pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext
+ .eq_instructions_count) {
+ return (EXTERNAL_ERROR);
+ }
+ pstr_drc_uni_sel_proc->eq_inst_index_sel = n;
+ if (pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext
+ .str_eq_instructions[n]
+ .eq_apply_to_downmix == 1) {
+ pstr_drc_uni_sel_proc->eq_inst_index[1] =
+ pstr_drc_uni_sel_proc->eq_inst_index_sel;
+ } else {
+ pstr_drc_uni_sel_proc->eq_inst_index[0] =
+ pstr_drc_uni_sel_proc->eq_inst_index_sel;
+ }
+ }
+ return (0);
}
-WORD32 impd_get_dependent_eq_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc)
-{
- ia_eq_instructions_struct* str_eq_instructions = NULL;
-
- if (pstr_drc_uni_sel_proc->eq_inst_index_sel >= 0)
- {
- str_eq_instructions = &(pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext.str_eq_instructions[pstr_drc_uni_sel_proc->eq_inst_index_sel]);
-
- if (str_eq_instructions->depends_on_eq_set_present == 1)
- {
- WORD32 n;
- WORD32 dependsOnEqSetID = str_eq_instructions->depends_on_eq_set;
-
- for(n=0; n<pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext.eq_instructions_count; n++)
- {
- if (pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext.str_eq_instructions[n].eq_set_id == dependsOnEqSetID) break;
- }
- if (n == pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext.eq_instructions_count)
- {
- return(UNEXPECTED_ERROR);
- }
- if (pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext.str_eq_instructions[n].eq_apply_to_downmix == 1)
- {
- pstr_drc_uni_sel_proc->eq_inst_index[1] = n;
- }
- else
- {
- pstr_drc_uni_sel_proc->eq_inst_index[0] = n;
- }
- }
+WORD32 impd_get_dependent_eq_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc) {
+ ia_eq_instructions_struct* str_eq_instructions = NULL;
+
+ if (pstr_drc_uni_sel_proc->eq_inst_index_sel >= 0) {
+ str_eq_instructions =
+ &(pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext
+ .str_eq_instructions[pstr_drc_uni_sel_proc->eq_inst_index_sel]);
+
+ if (str_eq_instructions->depends_on_eq_set_present == 1) {
+ WORD32 n;
+ WORD32 dependsOnEqSetID = str_eq_instructions->depends_on_eq_set;
+
+ for (n = 0; n < pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext
+ .eq_instructions_count;
+ n++) {
+ if (pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext
+ .str_eq_instructions[n]
+ .eq_set_id == dependsOnEqSetID)
+ break;
+ }
+ if (n ==
+ pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext
+ .eq_instructions_count) {
+ return (UNEXPECTED_ERROR);
+ }
+ if (pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext
+ .str_eq_instructions[n]
+ .eq_apply_to_downmix == 1) {
+ pstr_drc_uni_sel_proc->eq_inst_index[1] = n;
+ } else {
+ pstr_drc_uni_sel_proc->eq_inst_index[0] = n;
+ }
}
- return (0);
+ }
+ return (0);
}
-WORD32 impd_get_selected_loud_eq_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- WORD32 loudEqSetIdSelected)
-{
- WORD32 n;
+WORD32 impd_get_selected_loud_eq_set(
+ ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc, WORD32 loudEqSetIdSelected) {
+ WORD32 n;
- pstr_drc_uni_sel_proc->loud_eq_inst_index_sel = -1;
+ pstr_drc_uni_sel_proc->loud_eq_inst_index_sel = -1;
- if (loudEqSetIdSelected > 0)
- {
- for(n=0; n<pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext.loud_eq_instructions_count; n++)
- {
- if (pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext.loud_eq_instructions[n].loud_eq_set_id == loudEqSetIdSelected) break;
- }
- if (n == pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext.loud_eq_instructions_count)
- {
- return(EXTERNAL_ERROR);
- }
- pstr_drc_uni_sel_proc->loud_eq_inst_index_sel = n;
+ if (loudEqSetIdSelected > 0) {
+ for (n = 0; n < pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext
+ .loud_eq_instructions_count;
+ n++) {
+ if (pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext
+ .loud_eq_instructions[n]
+ .loud_eq_set_id == loudEqSetIdSelected)
+ break;
}
- return (0);
+ if (n ==
+ pstr_drc_uni_sel_proc->drc_config.str_drc_config_ext
+ .loud_eq_instructions_count) {
+ return (EXTERNAL_ERROR);
+ }
+ pstr_drc_uni_sel_proc->loud_eq_inst_index_sel = n;
+ }
+ return (0);
}
WORD32 impd_select_loud_eq(ia_drc_config* pstr_drc_config,
- WORD32 requested_dwnmix_id,
- WORD32 drc_set_id_requested,
- WORD32 eq_set_id_requested,
- WORD32* loud_eq_id_sel)
-{
- WORD32 i, c, d, e;
-
- *loud_eq_id_sel = 0;
- for (i=0; i<pstr_drc_config->str_drc_config_ext.loud_eq_instructions_count; i++)
- {
- ia_loud_eq_instructions_struct* loud_eq_instructions = &pstr_drc_config->str_drc_config_ext.loud_eq_instructions[i];
- if (loud_eq_instructions->drc_location == LOCATION_SELECTED) {
- for (d=0; d<loud_eq_instructions->dwnmix_id_count; d++)
- {
- if ((loud_eq_instructions->downmix_id[d] == requested_dwnmix_id) || (loud_eq_instructions->downmix_id[d] == ID_FOR_ANY_DOWNMIX)) {
- for (c=0; c<loud_eq_instructions->drc_set_id_count; c++)
- {
- if ((loud_eq_instructions->drc_set_id[c] == drc_set_id_requested) || (loud_eq_instructions->drc_set_id[c] == ID_FOR_ANY_DRC)) {
- for (e=0; e<loud_eq_instructions->eq_set_id_count; e++)
- {
- if ((loud_eq_instructions->eq_set_id[e] == eq_set_id_requested) || (loud_eq_instructions->eq_set_id[e] == ID_FOR_ANY_EQ)) {
- *loud_eq_id_sel = loud_eq_instructions->loud_eq_set_id;
- }
- }
- }
- }
+ WORD32 requested_dwnmix_id,
+ WORD32 drc_set_id_requested,
+ WORD32 eq_set_id_requested, WORD32* loud_eq_id_sel) {
+ WORD32 i, c, d, e;
+
+ *loud_eq_id_sel = 0;
+ for (i = 0;
+ i < pstr_drc_config->str_drc_config_ext.loud_eq_instructions_count;
+ i++) {
+ ia_loud_eq_instructions_struct* loud_eq_instructions =
+ &pstr_drc_config->str_drc_config_ext.loud_eq_instructions[i];
+ if (loud_eq_instructions->drc_location == LOCATION_SELECTED) {
+ for (d = 0; d < loud_eq_instructions->dwnmix_id_count; d++) {
+ if ((loud_eq_instructions->downmix_id[d] == requested_dwnmix_id) ||
+ (loud_eq_instructions->downmix_id[d] == ID_FOR_ANY_DOWNMIX)) {
+ for (c = 0; c < loud_eq_instructions->drc_set_id_count; c++) {
+ if ((loud_eq_instructions->drc_set_id[c] == drc_set_id_requested) ||
+ (loud_eq_instructions->drc_set_id[c] == ID_FOR_ANY_DRC)) {
+ for (e = 0; e < loud_eq_instructions->eq_set_id_count; e++) {
+ if ((loud_eq_instructions->eq_set_id[e] ==
+ eq_set_id_requested) ||
+ (loud_eq_instructions->eq_set_id[e] == ID_FOR_ANY_EQ)) {
+ *loud_eq_id_sel = loud_eq_instructions->loud_eq_set_id;
}
+ }
}
+ }
}
+ }
}
- return (0);
+ }
+ return (0);
}
-WORD32 impd_match_eq_set(ia_drc_config* drc_config,
- WORD32 downmix_id,
- WORD32 drc_set_id,
- WORD32* eq_set_id_valid_flag,
- WORD32* matching_eq_set_count,
- WORD32* matching_eq_set_idx)
-{
- ia_eq_instructions_struct* str_eq_instructions = NULL;
- WORD32 i, k, n;
- WORD32 match = 0;
- *matching_eq_set_count = 0;
- for (i=0; i<drc_config->str_drc_config_ext.eq_instructions_count; i++)
- {
- str_eq_instructions = &drc_config->str_drc_config_ext.str_eq_instructions[i];
-
- if (str_eq_instructions->depends_on_eq_set_present == 0) {
- if (str_eq_instructions->no_independent_eq_use == 1) continue;
- }
- if (eq_set_id_valid_flag[str_eq_instructions->eq_set_id] == 0) continue;
- for (k=0; k<str_eq_instructions->dwnmix_id_count; k++) {
- if ((str_eq_instructions->downmix_id[k] == ID_FOR_ANY_DOWNMIX) || (downmix_id == str_eq_instructions->downmix_id[k])) {
- for (n=0; n<str_eq_instructions->drc_set_id_count; n++) {
- if ((str_eq_instructions->drc_set_id[n] == ID_FOR_ANY_DRC) || (drc_set_id == str_eq_instructions->drc_set_id[n])) {
- match = 1;
- matching_eq_set_idx[*matching_eq_set_count] = i;
- (*matching_eq_set_count)++;
- }
- }
- }
+WORD32 impd_match_eq_set(ia_drc_config* drc_config, WORD32 downmix_id,
+ WORD32 drc_set_id, WORD32* eq_set_id_valid_flag,
+ WORD32* matching_eq_set_count,
+ WORD32* matching_eq_set_idx) {
+ ia_eq_instructions_struct* str_eq_instructions = NULL;
+ WORD32 i, k, n;
+ WORD32 match = 0;
+ *matching_eq_set_count = 0;
+ for (i = 0; i < drc_config->str_drc_config_ext.eq_instructions_count; i++) {
+ str_eq_instructions =
+ &drc_config->str_drc_config_ext.str_eq_instructions[i];
+
+ if (str_eq_instructions->depends_on_eq_set_present == 0) {
+ if (str_eq_instructions->no_independent_eq_use == 1) continue;
+ }
+ if (eq_set_id_valid_flag[str_eq_instructions->eq_set_id] == 0) continue;
+ for (k = 0; k < str_eq_instructions->dwnmix_id_count; k++) {
+ if ((str_eq_instructions->downmix_id[k] == ID_FOR_ANY_DOWNMIX) ||
+ (downmix_id == str_eq_instructions->downmix_id[k])) {
+ for (n = 0; n < str_eq_instructions->drc_set_id_count; n++) {
+ if ((str_eq_instructions->drc_set_id[n] == ID_FOR_ANY_DRC) ||
+ (drc_set_id == str_eq_instructions->drc_set_id[n])) {
+ match = 1;
+ matching_eq_set_idx[*matching_eq_set_count] = i;
+ (*matching_eq_set_count)++;
+ }
}
+ }
}
- return(0);
+ }
+ return (0);
}
-WORD32 impd_match_eq_set_purpose(ia_drc_config* drc_config,
- WORD32 eq_set_purpose_requested,
- WORD32* eq_set_id_valid_flag,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info,
- ia_selection_candidate_info_struct* selection_candidate_info_step_2
- )
-{
- WORD32 i,j,k;
- WORD32 match_found_flag;
- WORD32 loop_cnt = 0;
- ia_eq_instructions_struct* str_eq_instructions = NULL;
- match_found_flag = 0;
-
- k = 0;
- while ((k==0) && (loop_cnt < 2))
- {
- for (j=0; j < *selection_candidate_count; j++)
- {
- WORD32 eq_set_id_requested = selection_candidate_info[j].eq_set_id;
-
- for (i=0; i<drc_config->str_drc_config_ext.eq_instructions_count; i++)
- {
- str_eq_instructions = &drc_config->str_drc_config_ext.str_eq_instructions[i];
-
- if (str_eq_instructions->depends_on_eq_set_present == 0) {
- if (eq_set_id_valid_flag[str_eq_instructions->eq_set_id] == 0) continue;
- }
- if (eq_set_id_valid_flag[str_eq_instructions->eq_set_id] == 0) continue;
- if ((str_eq_instructions->eq_set_id == eq_set_id_requested) && (str_eq_instructions->eq_set_purpose & eq_set_purpose_requested))
- {
- match_found_flag = 1;
- }
- }
+WORD32 impd_match_eq_set_purpose(
+ ia_drc_config* drc_config, WORD32 eq_set_purpose_requested,
+ WORD32* eq_set_id_valid_flag, WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info,
+ ia_selection_candidate_info_struct* selection_candidate_info_step_2) {
+ WORD32 i, j, k;
+ WORD32 match_found_flag;
+ WORD32 loop_cnt = 0;
+ ia_eq_instructions_struct* str_eq_instructions = NULL;
+ match_found_flag = 0;
+
+ k = 0;
+ while ((k == 0) && (loop_cnt < 2)) {
+ for (j = 0; j < *selection_candidate_count; j++) {
+ WORD32 eq_set_id_requested = selection_candidate_info[j].eq_set_id;
+
+ for (i = 0; i < drc_config->str_drc_config_ext.eq_instructions_count;
+ i++) {
+ str_eq_instructions =
+ &drc_config->str_drc_config_ext.str_eq_instructions[i];
- if (match_found_flag > 0)
- {
- memcpy(&selection_candidate_info_step_2[k], &selection_candidate_info[j], sizeof(ia_selection_candidate_info_struct));
- k++;
- }
+ if (str_eq_instructions->depends_on_eq_set_present == 0) {
+ if (eq_set_id_valid_flag[str_eq_instructions->eq_set_id] == 0)
+ continue;
}
- eq_set_purpose_requested = EQ_PURPOSE_DEFAULT;
- loop_cnt++;
+ if (eq_set_id_valid_flag[str_eq_instructions->eq_set_id] == 0) continue;
+ if ((str_eq_instructions->eq_set_id == eq_set_id_requested) &&
+ (str_eq_instructions->eq_set_purpose & eq_set_purpose_requested)) {
+ match_found_flag = 1;
+ }
+ }
+
+ if (match_found_flag > 0) {
+ memcpy(&selection_candidate_info_step_2[k],
+ &selection_candidate_info[j],
+ sizeof(ia_selection_candidate_info_struct));
+ k++;
+ }
}
+ eq_set_purpose_requested = EQ_PURPOSE_DEFAULT;
+ loop_cnt++;
+ }
- if (k>0) {
- memcpy(&selection_candidate_info[0], &selection_candidate_info_step_2[0], k * sizeof(ia_selection_candidate_info_struct));
- *selection_candidate_count = k;
- }
+ if (k > 0) {
+ memcpy(&selection_candidate_info[0], &selection_candidate_info_step_2[0],
+ k * sizeof(ia_selection_candidate_info_struct));
+ *selection_candidate_count = k;
+ }
- return(0);
+ return (0);
}
WORD32 impd_find_eq_set_no_compression(ia_drc_config* pstr_drc_config,
- WORD32 requested_dwnmix_id,
- WORD32* num_compression_eq_count,
- WORD32* num_compression_eq_id)
-{
- WORD32 i, d, k, c;
- k=0;
- for (i=0; i<pstr_drc_config->str_drc_config_ext.eq_instructions_count; i++)
- {
- ia_eq_instructions_struct* str_eq_instructions = &pstr_drc_config->str_drc_config_ext.str_eq_instructions[i];
- for (d=0; d<str_eq_instructions->dwnmix_id_count; d++)
- {
- if (requested_dwnmix_id == str_eq_instructions->downmix_id[d])
- {
- for (c=0; c<str_eq_instructions->drc_set_id_count; c++)
- {
- if ((str_eq_instructions->drc_set_id[c] == ID_FOR_ANY_DRC) || (str_eq_instructions->drc_set_id[c] == 0))
- {
- num_compression_eq_id[k] = str_eq_instructions->eq_set_id;
- k++;
- }
- }
- }
+ WORD32 requested_dwnmix_id,
+ WORD32* num_compression_eq_count,
+ WORD32* num_compression_eq_id) {
+ WORD32 i, d, k, c;
+ k = 0;
+ for (i = 0; i < pstr_drc_config->str_drc_config_ext.eq_instructions_count;
+ i++) {
+ ia_eq_instructions_struct* str_eq_instructions =
+ &pstr_drc_config->str_drc_config_ext.str_eq_instructions[i];
+ for (d = 0; d < str_eq_instructions->dwnmix_id_count; d++) {
+ if (requested_dwnmix_id == str_eq_instructions->downmix_id[d]) {
+ for (c = 0; c < str_eq_instructions->drc_set_id_count; c++) {
+ if ((str_eq_instructions->drc_set_id[c] == ID_FOR_ANY_DRC) ||
+ (str_eq_instructions->drc_set_id[c] == 0)) {
+ num_compression_eq_id[k] = str_eq_instructions->eq_set_id;
+ k++;
+ }
}
+ }
}
- *num_compression_eq_count = k;
- return (0);
+ }
+ *num_compression_eq_count = k;
+ return (0);
}
-
-VOID impd_select_drc_coeff3(ia_drc_config* drc_config,
- ia_uni_drc_coeffs_struct** str_p_loc_drc_coefficients_uni_drc)
-{
- WORD32 n;
- WORD32 cV1 = -1;
- WORD32 cV0 = -1;
- for(n=0; n<drc_config->drc_coefficients_drc_count; n++)
- {
- if (drc_config->str_p_loc_drc_coefficients_uni_drc[n].drc_location == 1)
- {
- if (drc_config->str_p_loc_drc_coefficients_uni_drc[n].version == 0)
- {
- cV0 = n;
- }
- else
- {
- cV1 = n;
- }
- }
+VOID impd_select_drc_coeff3(
+ ia_drc_config* drc_config,
+ ia_uni_drc_coeffs_struct** str_p_loc_drc_coefficients_uni_drc) {
+ WORD32 n;
+ WORD32 cV1 = -1;
+ WORD32 cV0 = -1;
+ for (n = 0; n < drc_config->drc_coefficients_drc_count; n++) {
+ if (drc_config->str_p_loc_drc_coefficients_uni_drc[n].drc_location == 1) {
+ if (drc_config->str_p_loc_drc_coefficients_uni_drc[n].version == 0) {
+ cV0 = n;
+ } else {
+ cV1 = n;
+ }
}
- if (cV1 >= 0) {
- *str_p_loc_drc_coefficients_uni_drc = &(drc_config->str_p_loc_drc_coefficients_uni_drc[cV1]);
- }
- else if (cV0 >= 0) {
- *str_p_loc_drc_coefficients_uni_drc = &(drc_config->str_p_loc_drc_coefficients_uni_drc[cV0]);
- }
- else {
- *str_p_loc_drc_coefficients_uni_drc = NULL;
- }
- return;
+ }
+ if (cV1 >= 0) {
+ *str_p_loc_drc_coefficients_uni_drc =
+ &(drc_config->str_p_loc_drc_coefficients_uni_drc[cV1]);
+ } else if (cV0 >= 0) {
+ *str_p_loc_drc_coefficients_uni_drc =
+ &(drc_config->str_p_loc_drc_coefficients_uni_drc[cV0]);
+ } else {
+ *str_p_loc_drc_coefficients_uni_drc = NULL;
+ }
+ return;
}
-
-
-WORD32 impd_manage_drc_complexity (ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- ia_drc_config* pstr_drc_config)
-{
- WORD32 i, j, err, channel_count;
- WORD32 numBandsTooLarge = 0;
- FLOAT32 complexityDrcPrelim;
- ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc;
- FLOAT32 complexitySupportedTotal = (FLOAT32)(pow(2.0f, pstr_drc_uni_sel_proc->compl_level_supported_total));
- ia_drc_instructions_struct* str_drc_instruction_str;
- ia_drc_instructions_struct* drc_inst_uni_drc_dependent;
- ia_drc_sel_proc_output_struct* uni_drc_sel_proc_output = &pstr_drc_uni_sel_proc->uni_drc_sel_proc_output;
- ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct = &pstr_drc_uni_sel_proc->uni_drc_sel_proc_params;
-
- impd_select_drc_coeff3(pstr_drc_config, &str_p_loc_drc_coefficients_uni_drc);
-
- for (i=0; i<pstr_drc_config->drc_instructions_uni_drc_count; i++)
- {
- str_drc_instruction_str = &pstr_drc_config->str_drc_instruction_str[i];
- if (str_drc_instruction_str->no_independent_use) continue;
-
- numBandsTooLarge = 0;
- if (str_drc_instruction_str->drc_apply_to_dwnmix == 1)
- {
- channel_count = uni_drc_sel_proc_output->target_channel_count;
- }
- else
- {
- channel_count = uni_drc_sel_proc_output->base_channel_count;
- }
- if (pstr_drc_uni_sel_proc->subband_domain_mode == SUBBAND_DOMAIN_MODE_OFF)
- {
- for (j=0; j<str_drc_instruction_str->num_drc_ch_groups; j++)
- {
- ia_gain_set_params_struct* gain_set_params = &(str_p_loc_drc_coefficients_uni_drc->gain_set_params[str_drc_instruction_str->gain_set_index_for_channel_group[j]]);
- if (gain_set_params->band_count > pstr_drc_sel_proc_params_struct->num_bands_supported)
- {
- numBandsTooLarge = 1;
- }
- else
- {
- if (gain_set_params->band_count > 4)
- {
- /* Add complexity for analysis and synthesis QMF bank here, if supported */
- }
- }
- }
+WORD32 impd_manage_drc_complexity(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
+ ia_drc_config* pstr_drc_config) {
+ WORD32 i, j, err, channel_count;
+ WORD32 numBandsTooLarge = 0;
+ FLOAT32 complexityDrcPrelim;
+ ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc;
+ FLOAT32 complexitySupportedTotal =
+ (FLOAT32)(pow(2.0f, pstr_drc_uni_sel_proc->compl_level_supported_total));
+ ia_drc_instructions_struct* str_drc_instruction_str;
+ ia_drc_instructions_struct* drc_inst_uni_drc_dependent;
+ ia_drc_sel_proc_output_struct* uni_drc_sel_proc_output =
+ &pstr_drc_uni_sel_proc->uni_drc_sel_proc_output;
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct =
+ &pstr_drc_uni_sel_proc->uni_drc_sel_proc_params;
+
+ impd_select_drc_coeff3(pstr_drc_config, &str_p_loc_drc_coefficients_uni_drc);
+
+ for (i = 0; i < pstr_drc_config->drc_instructions_uni_drc_count; i++) {
+ str_drc_instruction_str = &pstr_drc_config->str_drc_instruction_str[i];
+ if (str_drc_instruction_str->no_independent_use) continue;
+
+ numBandsTooLarge = 0;
+ if (str_drc_instruction_str->drc_apply_to_dwnmix == 1) {
+ channel_count = uni_drc_sel_proc_output->target_channel_count;
+ } else {
+ channel_count = uni_drc_sel_proc_output->base_channel_count;
+ }
+ if (pstr_drc_uni_sel_proc->subband_domain_mode == SUBBAND_DOMAIN_MODE_OFF) {
+ for (j = 0; j < str_drc_instruction_str->num_drc_ch_groups; j++) {
+ ia_gain_set_params_struct* gain_set_params = &(
+ str_p_loc_drc_coefficients_uni_drc->gain_set_params
+ [str_drc_instruction_str->gain_set_index_for_channel_group[j]]);
+ if (gain_set_params->band_count >
+ pstr_drc_sel_proc_params_struct->num_bands_supported) {
+ numBandsTooLarge = 1;
+ } else {
+ if (gain_set_params->band_count > 4) {
+ /* Add complexity for analysis and synthesis QMF bank here, if
+ * supported */
+ }
}
- complexityDrcPrelim =(FLOAT32)( channel_count * (1 << str_drc_instruction_str->drc_set_complexity_level));
-
- if (str_drc_instruction_str->depends_on_drc_set > 0)
- {
- err = impd_find_drc_instructions_uni_drc(pstr_drc_config, str_drc_instruction_str->depends_on_drc_set, &drc_inst_uni_drc_dependent);
- if (err) return (err);
- if (drc_inst_uni_drc_dependent->drc_apply_to_dwnmix == 1)
- {
- channel_count = uni_drc_sel_proc_output->target_channel_count;
- }
- else
- {
- channel_count = uni_drc_sel_proc_output->base_channel_count;
- }
- if (pstr_drc_uni_sel_proc->subband_domain_mode == SUBBAND_DOMAIN_MODE_OFF)
- {
- for (j=0; j<str_drc_instruction_str->num_drc_ch_groups; j++)
- {
- ia_gain_set_params_struct* gain_set_params = &(str_p_loc_drc_coefficients_uni_drc->gain_set_params[drc_inst_uni_drc_dependent->gain_set_index_for_channel_group[j]]);
- if (gain_set_params->band_count > pstr_drc_sel_proc_params_struct->num_bands_supported)
- {
- numBandsTooLarge = 1;
- }
- else
- {
- if (gain_set_params->band_count > 4)
- {
- /* Add complexity for analysis and synthesis QMF bank here, if supported */
- }
- }
- }
+ }
+ }
+ complexityDrcPrelim =
+ (FLOAT32)(channel_count *
+ (1 << str_drc_instruction_str->drc_set_complexity_level));
+
+ if (str_drc_instruction_str->depends_on_drc_set > 0) {
+ err = impd_find_drc_instructions_uni_drc(
+ pstr_drc_config, str_drc_instruction_str->depends_on_drc_set,
+ &drc_inst_uni_drc_dependent);
+ if (err) return (err);
+ if (drc_inst_uni_drc_dependent->drc_apply_to_dwnmix == 1) {
+ channel_count = uni_drc_sel_proc_output->target_channel_count;
+ } else {
+ channel_count = uni_drc_sel_proc_output->base_channel_count;
+ }
+ if (pstr_drc_uni_sel_proc->subband_domain_mode ==
+ SUBBAND_DOMAIN_MODE_OFF) {
+ for (j = 0; j < str_drc_instruction_str->num_drc_ch_groups; j++) {
+ ia_gain_set_params_struct* gain_set_params = &(
+ str_p_loc_drc_coefficients_uni_drc
+ ->gain_set_params[drc_inst_uni_drc_dependent
+ ->gain_set_index_for_channel_group[j]]);
+ if (gain_set_params->band_count >
+ pstr_drc_sel_proc_params_struct->num_bands_supported) {
+ numBandsTooLarge = 1;
+ } else {
+ if (gain_set_params->band_count > 4) {
+ /* Add complexity for analysis and synthesis QMF bank here, if
+ * supported */
}
- complexityDrcPrelim += channel_count * (1 << drc_inst_uni_drc_dependent->drc_set_complexity_level);
+ }
}
+ }
+ complexityDrcPrelim +=
+ channel_count *
+ (1 << drc_inst_uni_drc_dependent->drc_set_complexity_level);
+ }
- complexityDrcPrelim *= pstr_drc_config->sampling_rate / 48000.0f;
+ complexityDrcPrelim *= pstr_drc_config->sampling_rate / 48000.0f;
- if ((complexityDrcPrelim <= complexitySupportedTotal) && (numBandsTooLarge == 0))
- {
- pstr_drc_uni_sel_proc->drc_set_id_valid_flag[str_drc_instruction_str->drc_set_id] = 1;
- }
+ if ((complexityDrcPrelim <= complexitySupportedTotal) &&
+ (numBandsTooLarge == 0)) {
+ pstr_drc_uni_sel_proc
+ ->drc_set_id_valid_flag[str_drc_instruction_str->drc_set_id] = 1;
}
- return (0);
+ }
+ return (0);
}
-WORD32 impd_manage_eq_complexity (ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- ia_drc_config* pstr_drc_config)
-{
- WORD32 k, n, m, err;
- WORD32 eqComplexityPrimary = 0;
- WORD32 eqComplexityDependent = 0;
- WORD32 eqChannelCountPrimary = 0, eqChannelCountDependent = 0;
- FLOAT32 complexityTotalEq;
- ia_drc_config* drc_config = &pstr_drc_uni_sel_proc->drc_config;
- ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct = &pstr_drc_uni_sel_proc->uni_drc_sel_proc_params;
- FLOAT32 complexitySupportedTotal =(FLOAT32)( pow(2.0f, pstr_drc_uni_sel_proc->compl_level_supported_total));
-
- for (n=0; n<drc_config->str_drc_config_ext.eq_instructions_count; n++)
- {
- ia_eq_instructions_struct* str_eq_instructions = &pstr_drc_config->str_drc_config_ext.str_eq_instructions[n];
-
- eqChannelCountPrimary = pstr_drc_sel_proc_params_struct->base_channel_count;
- eqChannelCountDependent = pstr_drc_sel_proc_params_struct->base_channel_count;
-
- eqComplexityPrimary = 1 << str_eq_instructions->eq_set_complexity_level;
- if (pstr_drc_uni_sel_proc->subband_domain_mode == SUBBAND_DOMAIN_MODE_OFF)
- {
- if (str_eq_instructions->td_filter_cascade_present == 0)
- {
- eqComplexityPrimary = 0;
+WORD32 impd_manage_eq_complexity(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
+ ia_drc_config* pstr_drc_config) {
+ WORD32 k, n, m, err;
+ WORD32 eqComplexityPrimary = 0;
+ WORD32 eqComplexityDependent = 0;
+ WORD32 eqChannelCountPrimary = 0, eqChannelCountDependent = 0;
+ FLOAT32 complexityTotalEq;
+ ia_drc_config* drc_config = &pstr_drc_uni_sel_proc->drc_config;
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct =
+ &pstr_drc_uni_sel_proc->uni_drc_sel_proc_params;
+ FLOAT32 complexitySupportedTotal =
+ (FLOAT32)(pow(2.0f, pstr_drc_uni_sel_proc->compl_level_supported_total));
+
+ for (n = 0; n < drc_config->str_drc_config_ext.eq_instructions_count; n++) {
+ ia_eq_instructions_struct* str_eq_instructions =
+ &pstr_drc_config->str_drc_config_ext.str_eq_instructions[n];
+
+ eqChannelCountPrimary = pstr_drc_sel_proc_params_struct->base_channel_count;
+ eqChannelCountDependent =
+ pstr_drc_sel_proc_params_struct->base_channel_count;
+
+ eqComplexityPrimary = 1 << str_eq_instructions->eq_set_complexity_level;
+ if (pstr_drc_uni_sel_proc->subband_domain_mode == SUBBAND_DOMAIN_MODE_OFF) {
+ if (str_eq_instructions->td_filter_cascade_present == 0) {
+ eqComplexityPrimary = 0;
+ }
+ } else {
+ if (str_eq_instructions->td_filter_cascade_present == 1) {
+ eqComplexityPrimary = (WORD32)2.5f;
+ }
+ }
+ if (str_eq_instructions->eq_apply_to_downmix == 1) {
+ if (str_eq_instructions->downmix_id[0] == ID_FOR_ANY_DOWNMIX) {
+ eqChannelCountPrimary =
+ pstr_drc_sel_proc_params_struct->target_ch_count_prelim;
+ } else {
+ for (k = 0; k < pstr_drc_config->dwnmix_instructions_count; k++) {
+ for (m = 0; m < str_eq_instructions->dwnmix_id_count; m++) {
+ if (pstr_drc_config->dwnmix_instructions[k].downmix_id ==
+ str_eq_instructions->downmix_id[m]) {
+ if (eqChannelCountPrimary >
+ pstr_drc_config->dwnmix_instructions[k]
+ .target_channel_count) {
+ eqChannelCountPrimary = pstr_drc_config->dwnmix_instructions[k]
+ .target_channel_count;
+ }
}
+ }
}
- else
- {
- if (str_eq_instructions->td_filter_cascade_present == 1)
- {
- eqComplexityPrimary =(WORD32) 2.5f;
- }
+ }
+ }
+ complexityTotalEq = (FLOAT32)(eqChannelCountPrimary * eqComplexityPrimary);
+
+ if (str_eq_instructions->depends_on_eq_set_present > 0) {
+ ia_eq_instructions_struct* eq_instructionsDependent;
+ err = impd_find_eq_instructions(drc_config,
+ str_eq_instructions->depends_on_eq_set,
+ &eq_instructionsDependent);
+ if (err) return (err);
+ eqComplexityDependent =
+ 1 << eq_instructionsDependent->eq_set_complexity_level;
+ if (pstr_drc_uni_sel_proc->subband_domain_mode ==
+ SUBBAND_DOMAIN_MODE_OFF) {
+ if (str_eq_instructions->td_filter_cascade_present == 0) {
+ eqComplexityDependent = 0;
}
- if (str_eq_instructions->eq_apply_to_downmix == 1)
- {
- if (str_eq_instructions->downmix_id[0] == ID_FOR_ANY_DOWNMIX)
- {
- eqChannelCountPrimary = pstr_drc_sel_proc_params_struct->target_ch_count_prelim;
- }
- else
- {
- for (k=0; k<pstr_drc_config->dwnmix_instructions_count; k++)
- {
- for (m=0; m<str_eq_instructions->dwnmix_id_count; m++)
- {
- if (pstr_drc_config->dwnmix_instructions[k].downmix_id == str_eq_instructions->downmix_id[m])
- {
- if (eqChannelCountPrimary > pstr_drc_config->dwnmix_instructions[k].target_channel_count) {
- eqChannelCountPrimary = pstr_drc_config->dwnmix_instructions[k].target_channel_count;
- }
- }
- }
- }
- }
+ } else {
+ if (str_eq_instructions->td_filter_cascade_present == 1) {
+ eqComplexityDependent = (WORD32)2.5f;
}
- complexityTotalEq = (FLOAT32)(eqChannelCountPrimary * eqComplexityPrimary);
-
- if (str_eq_instructions->depends_on_eq_set_present > 0)
- {
- ia_eq_instructions_struct* eq_instructionsDependent;
- err = impd_find_eq_instructions(drc_config, str_eq_instructions->depends_on_eq_set, &eq_instructionsDependent);
- if (err) return (err);
- eqComplexityDependent = 1 << eq_instructionsDependent->eq_set_complexity_level;
- if (pstr_drc_uni_sel_proc->subband_domain_mode == SUBBAND_DOMAIN_MODE_OFF)
- {
- if (str_eq_instructions->td_filter_cascade_present == 0)
- {
- eqComplexityDependent = 0;
+ }
+ if (eq_instructionsDependent->eq_apply_to_downmix == 1) {
+ if (eq_instructionsDependent->downmix_id[0] == ID_FOR_ANY_DOWNMIX) {
+ eqChannelCountDependent =
+ pstr_drc_sel_proc_params_struct->target_ch_count_prelim;
+ } else {
+ for (k = 0; k < pstr_drc_config->dwnmix_instructions_count; k++) {
+ for (m = 0; m < str_eq_instructions->dwnmix_id_count; m++) {
+ if (pstr_drc_config->dwnmix_instructions[k].downmix_id ==
+ eq_instructionsDependent->downmix_id[m]) {
+ if (eqChannelCountDependent >
+ pstr_drc_config->dwnmix_instructions[k]
+ .target_channel_count) {
+ eqChannelCountDependent =
+ pstr_drc_config->dwnmix_instructions[k]
+ .target_channel_count;
}
+ }
}
- else
- {
- if (str_eq_instructions->td_filter_cascade_present == 1)
- {
- eqComplexityDependent =(WORD32) 2.5f;
- }
- }
- if (eq_instructionsDependent->eq_apply_to_downmix == 1)
- {
- if (eq_instructionsDependent->downmix_id[0] == ID_FOR_ANY_DOWNMIX)
- {
- eqChannelCountDependent = pstr_drc_sel_proc_params_struct->target_ch_count_prelim;
- }
- else
- {
- for (k=0; k<pstr_drc_config->dwnmix_instructions_count; k++)
- {
- for (m=0; m<str_eq_instructions->dwnmix_id_count; m++)
- {
- if (pstr_drc_config->dwnmix_instructions[k].downmix_id == eq_instructionsDependent->downmix_id[m])
- {
- if (eqChannelCountDependent > pstr_drc_config->dwnmix_instructions[k].target_channel_count) {
- eqChannelCountDependent = pstr_drc_config->dwnmix_instructions[k].target_channel_count;
- }
- }
- }
- }
- }
- }
- complexityTotalEq += eqChannelCountDependent * eqComplexityDependent;
+ }
}
+ }
+ complexityTotalEq += eqChannelCountDependent * eqComplexityDependent;
+ }
- pstr_drc_uni_sel_proc->eq_set_id_valid_flag[str_eq_instructions->eq_set_id] = 0;
- complexityTotalEq *= pstr_drc_config->sampling_rate / 48000.0f;
+ pstr_drc_uni_sel_proc
+ ->eq_set_id_valid_flag[str_eq_instructions->eq_set_id] = 0;
+ complexityTotalEq *= pstr_drc_config->sampling_rate / 48000.0f;
- if (complexityTotalEq <= complexitySupportedTotal)
- {
- pstr_drc_uni_sel_proc->eq_set_id_valid_flag[str_eq_instructions->eq_set_id] = 1;
- }
+ if (complexityTotalEq <= complexitySupportedTotal) {
+ pstr_drc_uni_sel_proc
+ ->eq_set_id_valid_flag[str_eq_instructions->eq_set_id] = 1;
}
- return 0;
+ }
+ return 0;
}
+WORD32 impd_manage_complexity(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
+ ia_drc_config* pstr_drc_config,
+ WORD32* repeat_selection) {
+ WORD32 i, j, p, err;
+ WORD32 channel_count;
+ WORD32 numBandsTooLarge = 0;
+ WORD32 drcRequiresEq;
+ FLOAT32 complexityEq;
+ FLOAT32 complexityDrcTotal = 0.0f;
+ FLOAT32 complexityEqTotal = 0.0f;
+ FLOAT32 freqNorm = pstr_drc_config->sampling_rate / 48000.0f;
+ ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc;
+ ia_drc_instructions_struct* str_drc_instruction_str =
+ &pstr_drc_config->str_drc_instruction_str[0];
+ ia_drc_sel_proc_output_struct* uni_drc_sel_proc_output =
+ &pstr_drc_uni_sel_proc->uni_drc_sel_proc_output;
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct =
+ &pstr_drc_uni_sel_proc->uni_drc_sel_proc_params;
+ FLOAT32 complexitySupportedTotal =
+ (FLOAT32)(pow(2.0f, pstr_drc_uni_sel_proc->compl_level_supported_total));
+
+ impd_select_drc_coeff3(pstr_drc_config, &str_p_loc_drc_coefficients_uni_drc);
+
+ for (p = 0; p < 4; p++) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_drc_set_ids[p] <= 0)
+ continue;
+ err = impd_find_drc_instructions_uni_drc(
+ pstr_drc_config,
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_drc_set_ids[p],
+ &str_drc_instruction_str);
+ if (err) return (err);
-WORD32 impd_manage_complexity (ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- ia_drc_config* pstr_drc_config,
- WORD32* repeat_selection)
-{
- WORD32 i, j, p, err;
- WORD32 channel_count;
- WORD32 numBandsTooLarge = 0;
- WORD32 drcRequiresEq;
- FLOAT32 complexityEq;
- FLOAT32 complexityDrcTotal = 0.0f;
- FLOAT32 complexityEqTotal = 0.0f;
- FLOAT32 freqNorm = pstr_drc_config->sampling_rate / 48000.0f;
- ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc;
- ia_drc_instructions_struct* str_drc_instruction_str = &pstr_drc_config->str_drc_instruction_str[0];
- ia_drc_sel_proc_output_struct* uni_drc_sel_proc_output = &pstr_drc_uni_sel_proc->uni_drc_sel_proc_output;
- ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct = &pstr_drc_uni_sel_proc->uni_drc_sel_proc_params;
- FLOAT32 complexitySupportedTotal =(FLOAT32)( pow(2.0f, pstr_drc_uni_sel_proc->compl_level_supported_total));
-
- impd_select_drc_coeff3(pstr_drc_config, &str_p_loc_drc_coefficients_uni_drc);
-
- for (p=0; p<4; p++)
- {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_drc_set_ids[p] <= 0) continue;
- err = impd_find_drc_instructions_uni_drc(pstr_drc_config, pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_drc_set_ids[p], &str_drc_instruction_str);
- if (err) return (err);
-
- if (str_drc_instruction_str->drc_apply_to_dwnmix == 1)
- {
- channel_count = uni_drc_sel_proc_output->target_channel_count;
- }
- else
- {
- channel_count = uni_drc_sel_proc_output->base_channel_count;
- }
- if (pstr_drc_uni_sel_proc->subband_domain_mode == SUBBAND_DOMAIN_MODE_OFF)
- {
- for (j=0; j<str_drc_instruction_str->num_drc_ch_groups; j++)
- {
- ia_gain_set_params_struct* gain_set_params = &(str_p_loc_drc_coefficients_uni_drc->gain_set_params[str_drc_instruction_str->gain_set_index_for_channel_group[j]]);
- if (gain_set_params->band_count > pstr_drc_sel_proc_params_struct->num_bands_supported)
- {
- if (p<2)
- {
- numBandsTooLarge = 1;
- }
- else
- {
- pstr_drc_uni_sel_proc->drc_set_id_valid_flag[str_drc_instruction_str->drc_set_id] = 0;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_drc_set_ids[p] = 0;
- }
- }
- else
- {
- if (gain_set_params->band_count > 4)
- {
- /* Add complexity for analysis and synthesis QMF bank here, if supported */
- }
- }
- }
- }
- complexityDrcTotal += channel_count * (1 << str_drc_instruction_str->drc_set_complexity_level);
+ if (str_drc_instruction_str->drc_apply_to_dwnmix == 1) {
+ channel_count = uni_drc_sel_proc_output->target_channel_count;
+ } else {
+ channel_count = uni_drc_sel_proc_output->base_channel_count;
}
-
- if (uni_drc_sel_proc_output->active_downmix_id > 0)
- {
- FLOAT32 complexityPerCoeff;
- ia_downmix_instructions_struct* dwnmix_instructions;
-
- if (pstr_drc_uni_sel_proc->subband_domain_mode == SUBBAND_DOMAIN_MODE_OFF)
- {
- complexityPerCoeff = 1.0f;
- }
- else
- {
- complexityPerCoeff = 2.0f;
- }
- impd_find_downmix(pstr_drc_config, uni_drc_sel_proc_output->active_downmix_id, &dwnmix_instructions);
- if (dwnmix_instructions->downmix_coefficients_present == 1)
- {
- for (i=0; i<uni_drc_sel_proc_output->base_channel_count; i++)
- {
- for (j=0; j<uni_drc_sel_proc_output->target_channel_count; j++)
- {
- if (uni_drc_sel_proc_output->downmix_matrix[i][j] != 0.0f)
- {
- complexityDrcTotal += complexityPerCoeff;
- }
- }
- }
- }
- else
- {
- /* add standard downmix here */
+ if (pstr_drc_uni_sel_proc->subband_domain_mode == SUBBAND_DOMAIN_MODE_OFF) {
+ for (j = 0; j < str_drc_instruction_str->num_drc_ch_groups; j++) {
+ ia_gain_set_params_struct* gain_set_params = &(
+ str_p_loc_drc_coefficients_uni_drc->gain_set_params
+ [str_drc_instruction_str->gain_set_index_for_channel_group[j]]);
+ if (gain_set_params->band_count >
+ pstr_drc_sel_proc_params_struct->num_bands_supported) {
+ if (p < 2) {
+ numBandsTooLarge = 1;
+ } else {
+ pstr_drc_uni_sel_proc
+ ->drc_set_id_valid_flag[str_drc_instruction_str->drc_set_id] =
+ 0;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_drc_set_ids[p] =
+ 0;
+ }
+ } else {
+ if (gain_set_params->band_count > 4) {
+ /* Add complexity for analysis and synthesis QMF bank here, if
+ * supported */
+ }
}
+ }
}
-
- for (p=0; p<2; p++)
- {
- if(pstr_drc_uni_sel_proc->eq_inst_index[p] >= 0)
- {
- ia_eq_instructions_struct* str_eq_instructions = &pstr_drc_config->str_drc_config_ext.str_eq_instructions[pstr_drc_uni_sel_proc->eq_inst_index[p]];
- if (p==0)
- {
- channel_count = uni_drc_sel_proc_output->base_channel_count;
- }
- else
- {
- channel_count = uni_drc_sel_proc_output->target_channel_count;
- }
-
- complexityEq =(FLOAT32)(1 << str_eq_instructions->eq_set_complexity_level);
- if (pstr_drc_uni_sel_proc->subband_domain_mode == SUBBAND_DOMAIN_MODE_OFF)
- {
- if (str_eq_instructions->td_filter_cascade_present == 0)
- {
- complexityEq = 0.0;
- }
- }
- else
- {
- if (str_eq_instructions->td_filter_cascade_present == 1)
- {
- complexityEq = 2.5;
- }
- }
-
- complexityEqTotal += channel_count * complexityEq;
- }
+ complexityDrcTotal +=
+ channel_count *
+ (1 << str_drc_instruction_str->drc_set_complexity_level);
+ }
+
+ if (uni_drc_sel_proc_output->active_downmix_id > 0) {
+ FLOAT32 complexityPerCoeff;
+ ia_downmix_instructions_struct* dwnmix_instructions;
+
+ if (pstr_drc_uni_sel_proc->subband_domain_mode == SUBBAND_DOMAIN_MODE_OFF) {
+ complexityPerCoeff = 1.0f;
+ } else {
+ complexityPerCoeff = 2.0f;
}
-
- complexityDrcTotal *= freqNorm;
- complexityEqTotal *= freqNorm;
-
- if (numBandsTooLarge == 1)
- {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_drc_set_ids[0] > 0)
- {
- err = impd_find_drc_instructions_uni_drc(pstr_drc_config, pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_drc_set_ids[0], &str_drc_instruction_str);
- if (err) return (err);
-
- pstr_drc_uni_sel_proc->drc_set_id_valid_flag[str_drc_instruction_str->drc_set_id] = 0;
+ impd_find_downmix(pstr_drc_config,
+ uni_drc_sel_proc_output->active_downmix_id,
+ &dwnmix_instructions);
+ if (dwnmix_instructions->downmix_coefficients_present == 1) {
+ for (i = 0; i < uni_drc_sel_proc_output->base_channel_count; i++) {
+ for (j = 0; j < uni_drc_sel_proc_output->target_channel_count; j++) {
+ if (uni_drc_sel_proc_output->downmix_matrix[i][j] != 0.0f) {
+ complexityDrcTotal += complexityPerCoeff;
+ }
}
- *repeat_selection = 1;
+ }
+ } else {
+ /* add standard downmix here */
}
- else
- {
- if (complexityDrcTotal + complexityEqTotal <= complexitySupportedTotal)
- {
- *repeat_selection = 0;
+ }
+
+ for (p = 0; p < 2; p++) {
+ if (pstr_drc_uni_sel_proc->eq_inst_index[p] >= 0) {
+ ia_eq_instructions_struct* str_eq_instructions =
+ &pstr_drc_config->str_drc_config_ext
+ .str_eq_instructions[pstr_drc_uni_sel_proc->eq_inst_index[p]];
+ if (p == 0) {
+ channel_count = uni_drc_sel_proc_output->base_channel_count;
+ } else {
+ channel_count = uni_drc_sel_proc_output->target_channel_count;
+ }
+
+ complexityEq =
+ (FLOAT32)(1 << str_eq_instructions->eq_set_complexity_level);
+ if (pstr_drc_uni_sel_proc->subband_domain_mode ==
+ SUBBAND_DOMAIN_MODE_OFF) {
+ if (str_eq_instructions->td_filter_cascade_present == 0) {
+ complexityEq = 0.0;
}
- else
- {
- drcRequiresEq = 0;
- for (p=0; p<2; p++)
- {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_drc_set_ids[p] <= 0) continue;
- err = impd_find_drc_instructions_uni_drc(pstr_drc_config, pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_drc_set_ids[p], &str_drc_instruction_str);
- if (err) return (err);
- if (str_drc_instruction_str->requires_eq == 1)
- {
- drcRequiresEq = 1;
- }
- }
- if ((drcRequiresEq == 0) && (complexityDrcTotal <= complexitySupportedTotal))
- {
- for (p=0; p<2; p++)
- {
- pstr_drc_uni_sel_proc->eq_inst_index[p] = 0;
- }
- *repeat_selection = 0;
- }
- else
- {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_drc_set_ids[0] > 0)
- {
- err = impd_find_drc_instructions_uni_drc(pstr_drc_config, pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_drc_set_ids[0], &str_drc_instruction_str);
- if (err) return (err);
-
- pstr_drc_uni_sel_proc->drc_set_id_valid_flag[str_drc_instruction_str->drc_set_id] = 0;
- }
- else
- {
- for (p=2; p<4; p++)
- {
- pstr_drc_uni_sel_proc->drc_set_id_valid_flag[str_drc_instruction_str->drc_set_id] = 0;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_drc_set_ids[p] = 0;
- }
- }
- *repeat_selection = 1;
- }
+ } else {
+ if (str_eq_instructions->td_filter_cascade_present == 1) {
+ complexityEq = 2.5;
}
- }
+ }
- if (*repeat_selection == 1)
- {
- memset (&pstr_drc_uni_sel_proc->uni_drc_sel_proc_output, 0, sizeof(ia_drc_sel_proc_output_struct));
+ complexityEqTotal += channel_count * complexityEq;
}
- return (0);
-}
+ }
+ complexityDrcTotal *= freqNorm;
+ complexityEqTotal *= freqNorm;
+ if (numBandsTooLarge == 1) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_drc_set_ids[0] > 0) {
+ err = impd_find_drc_instructions_uni_drc(
+ pstr_drc_config,
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_drc_set_ids[0],
+ &str_drc_instruction_str);
+ if (err) return (err);
-WORD32 impd_find_loud_eq_instructions_idx_for_id(ia_drc_config* drc_config,
- WORD32 loud_eq_set_id_requested,
- WORD32* instructions_idx)
-{
- WORD32 i;
- if (loud_eq_set_id_requested > 0)
- {
- for (i=0; i<drc_config->str_drc_config_ext.loud_eq_instructions_count; i++)
- {
- if (drc_config->str_drc_config_ext.loud_eq_instructions[i].loud_eq_set_id == loud_eq_set_id_requested) break;
+ pstr_drc_uni_sel_proc
+ ->drc_set_id_valid_flag[str_drc_instruction_str->drc_set_id] = 0;
+ }
+ *repeat_selection = 1;
+ } else {
+ if (complexityDrcTotal + complexityEqTotal <= complexitySupportedTotal) {
+ *repeat_selection = 0;
+ } else {
+ drcRequiresEq = 0;
+ for (p = 0; p < 2; p++) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_drc_set_ids[p] <=
+ 0)
+ continue;
+ err = impd_find_drc_instructions_uni_drc(
+ pstr_drc_config,
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_drc_set_ids[p],
+ &str_drc_instruction_str);
+ if (err) return (err);
+ if (str_drc_instruction_str->requires_eq == 1) {
+ drcRequiresEq = 1;
}
- if (i == drc_config->str_drc_config_ext.loud_eq_instructions_count)
- {
- return (UNEXPECTED_ERROR);
+ }
+ if ((drcRequiresEq == 0) &&
+ (complexityDrcTotal <= complexitySupportedTotal)) {
+ for (p = 0; p < 2; p++) {
+ pstr_drc_uni_sel_proc->eq_inst_index[p] = 0;
}
- *instructions_idx = i;
- }
- else
- {
- *instructions_idx = -1;
+ *repeat_selection = 0;
+ } else {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_drc_set_ids[0] >
+ 0) {
+ err = impd_find_drc_instructions_uni_drc(
+ pstr_drc_config,
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_drc_set_ids[0],
+ &str_drc_instruction_str);
+ if (err) return (err);
+
+ pstr_drc_uni_sel_proc
+ ->drc_set_id_valid_flag[str_drc_instruction_str->drc_set_id] = 0;
+ } else {
+ for (p = 2; p < 4; p++) {
+ pstr_drc_uni_sel_proc
+ ->drc_set_id_valid_flag[str_drc_instruction_str->drc_set_id] =
+ 0;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.sel_drc_set_ids[p] =
+ 0;
+ }
+ }
+ *repeat_selection = 1;
+ }
}
- return (0);
-}
+ }
+ if (*repeat_selection == 1) {
+ memset(&pstr_drc_uni_sel_proc->uni_drc_sel_proc_output, 0,
+ sizeof(ia_drc_sel_proc_output_struct));
+ }
+ return (0);
+}
-WORD32 impd_find_eq_instructions(ia_drc_config* drc_config,
- WORD32 eq_set_id_requested,
- ia_eq_instructions_struct** str_eq_instructions)
-{
- WORD32 i;
- for (i=0; i<drc_config->str_drc_config_ext.eq_instructions_count; i++)
- {
- if (eq_set_id_requested == drc_config->str_drc_config_ext.str_eq_instructions[i].eq_set_id) break;
+WORD32 impd_find_loud_eq_instructions_idx_for_id(
+ ia_drc_config* drc_config, WORD32 loud_eq_set_id_requested,
+ WORD32* instructions_idx) {
+ WORD32 i;
+ if (loud_eq_set_id_requested > 0) {
+ for (i = 0; i < drc_config->str_drc_config_ext.loud_eq_instructions_count;
+ i++) {
+ if (drc_config->str_drc_config_ext.loud_eq_instructions[i]
+ .loud_eq_set_id == loud_eq_set_id_requested)
+ break;
}
- if (i == drc_config->str_drc_config_ext.eq_instructions_count)
- {
- return (UNEXPECTED_ERROR);
+ if (i == drc_config->str_drc_config_ext.loud_eq_instructions_count) {
+ return (UNEXPECTED_ERROR);
}
- *str_eq_instructions = &drc_config->str_drc_config_ext.str_eq_instructions[i];
- return (0);
+ *instructions_idx = i;
+ } else {
+ *instructions_idx = -1;
+ }
+ return (0);
}
-WORD32 impd_find_downmix(ia_drc_config* drc_config,
- WORD32 requested_dwnmix_id,
- ia_downmix_instructions_struct** dwnmix_instructions)
-{
- WORD32 i;
- for (i=0; i<drc_config->dwnmix_instructions_count; i++)
- {
- if (requested_dwnmix_id == drc_config->dwnmix_instructions[i].downmix_id) break;
- }
- if (i == drc_config->dwnmix_instructions_count)
- {
+WORD32 impd_find_eq_instructions(
+ ia_drc_config* drc_config, WORD32 eq_set_id_requested,
+ ia_eq_instructions_struct** str_eq_instructions) {
+ WORD32 i;
+ for (i = 0; i < drc_config->str_drc_config_ext.eq_instructions_count; i++) {
+ if (eq_set_id_requested ==
+ drc_config->str_drc_config_ext.str_eq_instructions[i].eq_set_id)
+ break;
+ }
+ if (i == drc_config->str_drc_config_ext.eq_instructions_count) {
+ return (UNEXPECTED_ERROR);
+ }
+ *str_eq_instructions = &drc_config->str_drc_config_ext.str_eq_instructions[i];
+ return (0);
+}
- return (UNEXPECTED_ERROR);
- }
- *dwnmix_instructions = &drc_config->dwnmix_instructions[i];
- return (0);
+WORD32 impd_find_downmix(ia_drc_config* drc_config, WORD32 requested_dwnmix_id,
+ ia_downmix_instructions_struct** dwnmix_instructions) {
+ WORD32 i;
+ for (i = 0; i < drc_config->dwnmix_instructions_count; i++) {
+ if (requested_dwnmix_id == drc_config->dwnmix_instructions[i].downmix_id)
+ break;
+ }
+ if (i == drc_config->dwnmix_instructions_count) {
+ return (UNEXPECTED_ERROR);
+ }
+ *dwnmix_instructions = &drc_config->dwnmix_instructions[i];
+ return (0);
}
diff --git a/decoder/drc_src/impd_drc_selection_process.h b/decoder/drc_src/impd_drc_selection_process.h
index 9061cec..4fdabe3 100644
--- a/decoder/drc_src/impd_drc_selection_process.h
+++ b/decoder/drc_src/impd_drc_selection_process.h
@@ -20,168 +20,153 @@
#ifndef IMPD_DRC_SECLECTION_PROCESS_H
#define IMPD_DRC_SECLECTION_PROCESS_H
-
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
-#define EFFECT_TYPE_REQUESTED_NONE 0
-#define EFFECT_TYPE_REQUESTED_NIGHT 1
-#define EFFECT_TYPE_REQUESTED_NOISY 2
-#define EFFECT_TYPE_REQUESTED_LIMITED 3
-#define EFFECT_TYPE_REQUESTED_LOWLEVEL 4
-#define EFFECT_TYPE_REQUESTED_DIALOG 5
-#define EFFECT_TYPE_REQUESTED_GENERAL_COMPR 6
-#define EFFECT_TYPE_REQUESTED_EXPAND 7
-#define EFFECT_TYPE_REQUESTED_ARTISTIC 8
-#define EFFECT_TYPE_REQUESTED_COUNT 9
-
-#define MATCH_EFFECT_TYPE 0
-#define MATCH_DYNAMIC_RANGE 1
-#define MATCH_DRC_CHARACTERISTIC 2
-
-
-typedef struct ia_drc_sel_proc_params_struct
-{
- WORD32 base_channel_count;
- WORD32 base_layout;
- WORD32 target_config_request_type;
- WORD32 num_downmix_id_requests;
- WORD32 requested_dwnmix_id[MAX_NUM_DOWNMIX_ID_REQUESTS];
- WORD32 requested_target_layout;
- WORD32 requested_target_ch_count;
- WORD32 target_ch_count_prelim;
-
- WORD32 loudness_normalization_on;
- FLOAT32 target_loudness;
- WORD32 album_mode;
- WORD32 peak_limiter;
- WORD32 loudness_deviation_max;
- WORD32 loudness_measurement_method;
- WORD32 loudness_measurement_system;
- WORD32 loudness_measurement_pre_proc;
- WORD32 device_cut_off_frequency;
- FLOAT32 loudness_norm_gain_db_max;
- FLOAT32 loudness_norm_gain_modification_db;
- FLOAT32 output_peak_level_max;
-
- WORD32 num_bands_supported;
- WORD32 dynamic_range_control_on;
- WORD32 num_drc_feature_requests;
- WORD32 drc_feature_req_type[MAX_NUM_DRC_FEATURE_REQUESTS];
- WORD32 requested_num_drc_effects[MAX_NUM_DRC_FEATURE_REQUESTS];
- WORD32 desired_num_drc_effects_of_requested[MAX_NUM_DRC_FEATURE_REQUESTS];
- WORD32 requested_drc_effect_type[MAX_NUM_DRC_FEATURE_REQUESTS][MAX_NUM_DRC_EFFECT_TYPE_REQUESTS];
- WORD32 requested_dyn_range_measur_type[MAX_NUM_DRC_FEATURE_REQUESTS];
- WORD32 requested_dyn_range_range_flag[MAX_NUM_DRC_FEATURE_REQUESTS];
- FLOAT32 requested_dyn_range_value[MAX_NUM_DRC_FEATURE_REQUESTS];
- FLOAT32 requested_dyn_range_min_val[MAX_NUM_DRC_FEATURE_REQUESTS];
- FLOAT32 requested_dyn_range_max_val[MAX_NUM_DRC_FEATURE_REQUESTS];
- WORD32 requested_drc_characteristic[MAX_NUM_DRC_FEATURE_REQUESTS];
-
-
- WORD32 loudness_eq_request;
- FLOAT32 sensitivity;
- FLOAT32 playback_gain;
- WORD32 eq_set_purpose_request;
-
- FLOAT32 boost;
- FLOAT32 compress;
- WORD32 drc_characteristic_target;
+#define EFFECT_TYPE_REQUESTED_NONE 0
+#define EFFECT_TYPE_REQUESTED_NIGHT 1
+#define EFFECT_TYPE_REQUESTED_NOISY 2
+#define EFFECT_TYPE_REQUESTED_LIMITED 3
+#define EFFECT_TYPE_REQUESTED_LOWLEVEL 4
+#define EFFECT_TYPE_REQUESTED_DIALOG 5
+#define EFFECT_TYPE_REQUESTED_GENERAL_COMPR 6
+#define EFFECT_TYPE_REQUESTED_EXPAND 7
+#define EFFECT_TYPE_REQUESTED_ARTISTIC 8
+#define EFFECT_TYPE_REQUESTED_COUNT 9
+
+#define MATCH_EFFECT_TYPE 0
+#define MATCH_DYNAMIC_RANGE 1
+#define MATCH_DRC_CHARACTERISTIC 2
+
+typedef struct ia_drc_sel_proc_params_struct {
+ WORD32 base_channel_count;
+ WORD32 base_layout;
+ WORD32 target_config_request_type;
+ WORD32 num_downmix_id_requests;
+ WORD32 requested_dwnmix_id[MAX_NUM_DOWNMIX_ID_REQUESTS];
+ WORD32 requested_target_layout;
+ WORD32 requested_target_ch_count;
+ WORD32 target_ch_count_prelim;
+
+ WORD32 loudness_normalization_on;
+ FLOAT32 target_loudness;
+ WORD32 album_mode;
+ WORD32 peak_limiter;
+ WORD32 loudness_deviation_max;
+ WORD32 loudness_measurement_method;
+ WORD32 loudness_measurement_system;
+ WORD32 loudness_measurement_pre_proc;
+ WORD32 device_cut_off_frequency;
+ FLOAT32 loudness_norm_gain_db_max;
+ FLOAT32 loudness_norm_gain_modification_db;
+ FLOAT32 output_peak_level_max;
+
+ WORD32 num_bands_supported;
+ WORD32 dynamic_range_control_on;
+ WORD32 num_drc_feature_requests;
+ WORD32 drc_feature_req_type[MAX_NUM_DRC_FEATURE_REQUESTS];
+ WORD32 requested_num_drc_effects[MAX_NUM_DRC_FEATURE_REQUESTS];
+ WORD32 desired_num_drc_effects_of_requested[MAX_NUM_DRC_FEATURE_REQUESTS];
+ WORD32 requested_drc_effect_type[MAX_NUM_DRC_FEATURE_REQUESTS]
+ [MAX_NUM_DRC_EFFECT_TYPE_REQUESTS];
+ WORD32 requested_dyn_range_measur_type[MAX_NUM_DRC_FEATURE_REQUESTS];
+ WORD32 requested_dyn_range_range_flag[MAX_NUM_DRC_FEATURE_REQUESTS];
+ FLOAT32 requested_dyn_range_value[MAX_NUM_DRC_FEATURE_REQUESTS];
+ FLOAT32 requested_dyn_range_min_val[MAX_NUM_DRC_FEATURE_REQUESTS];
+ FLOAT32 requested_dyn_range_max_val[MAX_NUM_DRC_FEATURE_REQUESTS];
+ WORD32 requested_drc_characteristic[MAX_NUM_DRC_FEATURE_REQUESTS];
+
+ WORD32 loudness_eq_request;
+ FLOAT32 sensitivity;
+ FLOAT32 playback_gain;
+ WORD32 eq_set_purpose_request;
+
+ FLOAT32 boost;
+ FLOAT32 compress;
+ WORD32 drc_characteristic_target;
} ia_drc_sel_proc_params_struct;
-typedef struct ia_drc_sel_pro_struct
-{
-
- WORD32 first_frame;
- WORD32 drc_config_flag;
- WORD32 loudness_info_set_flag;
- WORD32 sel_proc_request_flag;
- WORD32 subband_domain_mode;
- WORD32 eq_inst_index[SUB_EQ_COUNT];
- WORD32 drc_instructions_index[SUB_DRC_COUNT];
+typedef struct ia_drc_sel_pro_struct {
+ WORD32 first_frame;
+ WORD32 drc_config_flag;
+ WORD32 loudness_info_set_flag;
+ WORD32 sel_proc_request_flag;
+ WORD32 subband_domain_mode;
+ WORD32 eq_inst_index[SUB_EQ_COUNT];
+ WORD32 drc_instructions_index[SUB_DRC_COUNT];
- ia_drc_sel_proc_params_struct uni_drc_sel_proc_params;
+ ia_drc_sel_proc_params_struct uni_drc_sel_proc_params;
- ia_drc_config drc_config;
- ia_drc_loudness_info_set_struct loudness_info_set;
+ ia_drc_config drc_config;
+ ia_drc_loudness_info_set_struct loudness_info_set;
- WORD32 drc_inst_index_sel;
- WORD32 drc_coef_index_sel;
- WORD32 downmix_inst_index_sel;
+ WORD32 drc_inst_index_sel;
+ WORD32 drc_coef_index_sel;
+ WORD32 downmix_inst_index_sel;
- WORD32 drc_set_id_valid_flag[DRC_INSTRUCTIONS_COUNT_MAX];
- WORD32 eq_set_id_valid_flag[EQ_INSTRUCTIONS_COUNT_MAX];
+ WORD32 drc_set_id_valid_flag[DRC_INSTRUCTIONS_COUNT_MAX];
+ WORD32 eq_set_id_valid_flag[EQ_INSTRUCTIONS_COUNT_MAX];
- WORD32 eq_inst_index_sel;
- WORD32 loud_eq_inst_index_sel;
+ WORD32 eq_inst_index_sel;
+ WORD32 loud_eq_inst_index_sel;
- FLOAT32 compl_level_supported_total;
+ FLOAT32 compl_level_supported_total;
- ia_drc_sel_proc_output_struct uni_drc_sel_proc_output;
+ ia_drc_sel_proc_output_struct uni_drc_sel_proc_output;
} ia_drc_sel_pro_struct;
-WORD32 impd_map_target_config_req_downmix_id(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- ia_drc_config* pstr_drc_config);
+WORD32 impd_map_target_config_req_downmix_id(
+ ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
+ ia_drc_config* pstr_drc_config);
VOID impd_sel_downmix_matrix(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- ia_drc_config* pstr_drc_config);
+ ia_drc_config* pstr_drc_config);
WORD32
-impd_find_drc_instructions_uni_drc(ia_drc_config* drc_config,
- WORD32 drc_set_id_requested,
- ia_drc_instructions_struct** str_drc_instruction_str);
+impd_find_drc_instructions_uni_drc(
+ ia_drc_config* drc_config, WORD32 drc_set_id_requested,
+ ia_drc_instructions_struct** str_drc_instruction_str);
WORD32
-impd_find_eq_instructions(ia_drc_config* drc_config,
- WORD32 eq_set_id_requested,
- ia_eq_instructions_struct** str_eq_instructions);
+impd_find_eq_instructions(ia_drc_config* drc_config, WORD32 eq_set_id_requested,
+ ia_eq_instructions_struct** str_eq_instructions);
WORD32
-impd_find_downmix(ia_drc_config* drc_config,
- WORD32 requested_dwnmix_id,
- ia_downmix_instructions_struct** dwnmix_instructions);
-
+impd_find_downmix(ia_drc_config* drc_config, WORD32 requested_dwnmix_id,
+ ia_downmix_instructions_struct** dwnmix_instructions);
- WORD32
+WORD32
impd_find_eq_set_no_compression(ia_drc_config* pstr_drc_config,
- WORD32 requested_dwnmix_id,
- WORD32* no_compression_eq_cnt,
- WORD32* no_compression_eq_id);
- WORD32
-impd_match_eq_set(ia_drc_config* drc_config,
- WORD32 downmix_id,
- WORD32 drc_set_id,
- WORD32* eq_set_id_valid_flag,
- WORD32* matching_eq_set_cnt,
- WORD32* matching_eq_set_idx);
-
-
-
- WORD32
-impd_select_loud_eq(ia_drc_config* pstr_drc_config,
- WORD32 requested_dwnmix_id,
- WORD32 drc_set_id_requested,
- WORD32 eq_set_id_requested,
- WORD32* loud_eq_id_selected);
-
+ WORD32 requested_dwnmix_id,
+ WORD32* no_compression_eq_cnt,
+ WORD32* no_compression_eq_id);
WORD32
-impd_drc_uni_selction_proc_init(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- ia_drc_sel_proc_params_struct * pstr_drc_sel_proc_params_struct,
- ia_drc_interface_struct* pstr_drc_interface,
- WORD32 sub_band_domain_mode);
+impd_match_eq_set(ia_drc_config* drc_config, WORD32 downmix_id,
+ WORD32 drc_set_id, WORD32* eq_set_id_valid_flag,
+ WORD32* matching_eq_set_cnt, WORD32* matching_eq_set_idx);
WORD32
-impd_drc_uni_sel_proc_process(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- ia_drc_config* pstr_drc_config,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- ia_drc_sel_proc_output_struct* hia_drc_sel_proc_output_struct);
+impd_select_loud_eq(ia_drc_config* pstr_drc_config, WORD32 requested_dwnmix_id,
+ WORD32 drc_set_id_requested, WORD32 eq_set_id_requested,
+ WORD32* loud_eq_id_selected);
WORD32
-impd_find_loud_eq_instructions_idx_for_id(ia_drc_config* drc_config,
- WORD32 loud_eq_set_id_requested,
- WORD32* instructions_idx);
+impd_drc_uni_selction_proc_init(
+ ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
+ ia_drc_interface_struct* pstr_drc_interface, WORD32 sub_band_domain_mode);
+WORD32
+impd_drc_uni_sel_proc_process(
+ ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
+ ia_drc_config* pstr_drc_config,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ ia_drc_sel_proc_output_struct* hia_drc_sel_proc_output_struct);
+WORD32
+impd_find_loud_eq_instructions_idx_for_id(ia_drc_config* drc_config,
+ WORD32 loud_eq_set_id_requested,
+ WORD32* instructions_idx);
#ifdef __cplusplus
}
diff --git a/decoder/drc_src/impd_drc_selection_process_drcset_selection.c b/decoder/drc_src/impd_drc_selection_process_drcset_selection.c
index f09e7ea..7ca8aec 100644
--- a/decoder/drc_src/impd_drc_selection_process_drcset_selection.c
+++ b/decoder/drc_src/impd_drc_selection_process_drcset_selection.c
@@ -32,1506 +32,1506 @@
#include "impd_drc_rom.h"
static WORD32 effect_types_request_table[] = {
- EFFECT_BIT_NIGHT,
- EFFECT_BIT_NOISY,
- EFFECT_BIT_LIMITED,
- EFFECT_BIT_LOWLEVEL,
- EFFECT_BIT_DIALOG,
- EFFECT_BIT_GENERAL_COMPR,
- EFFECT_BIT_EXPAND,
- EFFECT_BIT_ARTISTIC
-};
-
-
-WORD32 impd_validate_requested_drc_feature(ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct)
-{
- WORD32 i,j;
-
- for (i=0; i<pstr_drc_sel_proc_params_struct->num_drc_feature_requests; i++)
- {
- switch (pstr_drc_sel_proc_params_struct->drc_feature_req_type[i]) {
- case MATCH_EFFECT_TYPE:
- for (j=0; j<pstr_drc_sel_proc_params_struct->desired_num_drc_effects_of_requested[i]; j++)
- {
- if (pstr_drc_sel_proc_params_struct->requested_drc_effect_type[i][j] == EFFECT_TYPE_REQUESTED_NONE)
- {
- if (pstr_drc_sel_proc_params_struct->desired_num_drc_effects_of_requested[i] > 1)
- {
- return (UNEXPECTED_ERROR);
- }
- }
+ EFFECT_BIT_NIGHT, EFFECT_BIT_NOISY, EFFECT_BIT_LIMITED,
+ EFFECT_BIT_LOWLEVEL, EFFECT_BIT_DIALOG, EFFECT_BIT_GENERAL_COMPR,
+ EFFECT_BIT_EXPAND, EFFECT_BIT_ARTISTIC};
+
+WORD32 impd_validate_requested_drc_feature(
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct) {
+ WORD32 i, j;
+
+ for (i = 0; i < pstr_drc_sel_proc_params_struct->num_drc_feature_requests;
+ i++) {
+ switch (pstr_drc_sel_proc_params_struct->drc_feature_req_type[i]) {
+ case MATCH_EFFECT_TYPE:
+ for (j = 0; j < pstr_drc_sel_proc_params_struct
+ ->desired_num_drc_effects_of_requested[i];
+ j++) {
+ if (pstr_drc_sel_proc_params_struct
+ ->requested_drc_effect_type[i][j] ==
+ EFFECT_TYPE_REQUESTED_NONE) {
+ if (pstr_drc_sel_proc_params_struct
+ ->desired_num_drc_effects_of_requested[i] > 1) {
+ return (UNEXPECTED_ERROR);
}
- break;
- case MATCH_DYNAMIC_RANGE:
- break;
- case MATCH_DRC_CHARACTERISTIC:
- break;
- default:
- return (UNEXPECTED_ERROR);
- break;
+ }
}
+ break;
+ case MATCH_DYNAMIC_RANGE:
+ break;
+ case MATCH_DRC_CHARACTERISTIC:
+ break;
+ default:
+ return (UNEXPECTED_ERROR);
+ break;
}
- return (0);
+ }
+ return (0);
}
-WORD32 impd_find_drc_instructions_uni_drc(ia_drc_config* drc_config,
- WORD32 drc_set_id_requested,
- ia_drc_instructions_struct** str_drc_instruction_str)
-{
- WORD32 i;
- for (i=0; i<drc_config->drc_instructions_uni_drc_count; i++)
- {
- if (drc_set_id_requested == drc_config->str_drc_instruction_str[i].drc_set_id) break;
- }
- if (i == drc_config->drc_instructions_uni_drc_count) {
- return (UNEXPECTED_ERROR);
- }
- *str_drc_instruction_str = &drc_config->str_drc_instruction_str[i];
- return (0);
+WORD32 impd_find_drc_instructions_uni_drc(
+ ia_drc_config* drc_config, WORD32 drc_set_id_requested,
+ ia_drc_instructions_struct** str_drc_instruction_str) {
+ WORD32 i;
+ for (i = 0; i < drc_config->drc_instructions_uni_drc_count; i++) {
+ if (drc_set_id_requested ==
+ drc_config->str_drc_instruction_str[i].drc_set_id)
+ break;
+ }
+ if (i == drc_config->drc_instructions_uni_drc_count) {
+ return (UNEXPECTED_ERROR);
+ }
+ *str_drc_instruction_str = &drc_config->str_drc_instruction_str[i];
+ return (0);
}
-WORD32 impd_map_requested_effect_bit_idx( WORD32 requested_effect_type,
- WORD32* effect_bit_idx)
-{
- switch (requested_effect_type) {
+WORD32 impd_map_requested_effect_bit_idx(WORD32 requested_effect_type,
+ WORD32* effect_bit_idx) {
+ switch (requested_effect_type) {
case EFFECT_TYPE_REQUESTED_NONE:
- *effect_bit_idx = EFFECT_BIT_NONE;
- break;
+ *effect_bit_idx = EFFECT_BIT_NONE;
+ break;
case EFFECT_TYPE_REQUESTED_NIGHT:
- *effect_bit_idx = EFFECT_BIT_NIGHT;
- break;
+ *effect_bit_idx = EFFECT_BIT_NIGHT;
+ break;
case EFFECT_TYPE_REQUESTED_NOISY:
- *effect_bit_idx = EFFECT_BIT_NOISY;
- break;
+ *effect_bit_idx = EFFECT_BIT_NOISY;
+ break;
case EFFECT_TYPE_REQUESTED_LIMITED:
- *effect_bit_idx = EFFECT_BIT_LIMITED;
- break;
+ *effect_bit_idx = EFFECT_BIT_LIMITED;
+ break;
case EFFECT_TYPE_REQUESTED_LOWLEVEL:
- *effect_bit_idx = EFFECT_BIT_LOWLEVEL;
- break;
+ *effect_bit_idx = EFFECT_BIT_LOWLEVEL;
+ break;
case EFFECT_TYPE_REQUESTED_DIALOG:
- *effect_bit_idx = EFFECT_BIT_DIALOG;
- break;
+ *effect_bit_idx = EFFECT_BIT_DIALOG;
+ break;
case EFFECT_TYPE_REQUESTED_GENERAL_COMPR:
- *effect_bit_idx = EFFECT_BIT_GENERAL_COMPR;
- break;
+ *effect_bit_idx = EFFECT_BIT_GENERAL_COMPR;
+ break;
case EFFECT_TYPE_REQUESTED_EXPAND:
- *effect_bit_idx = EFFECT_BIT_EXPAND;
- break;
+ *effect_bit_idx = EFFECT_BIT_EXPAND;
+ break;
case EFFECT_TYPE_REQUESTED_ARTISTIC:
- *effect_bit_idx = EFFECT_BIT_ARTISTIC;
- break;
+ *effect_bit_idx = EFFECT_BIT_ARTISTIC;
+ break;
default:
- return (UNEXPECTED_ERROR);
+ return (UNEXPECTED_ERROR);
- break;
- }
- return (0);
+ break;
+ }
+ return (0);
}
-
-WORD32 impd_get_fading_drc_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc)
-{
- pstr_drc_uni_sel_proc->drc_instructions_index[2] = -1;
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.album_mode == 0)
- {
- WORD32 n;
- ia_drc_instructions_struct* str_drc_instruction_str = NULL;
- for (n=0; n<pstr_drc_uni_sel_proc->drc_config.drc_instructions_uni_drc_count; n++)
- {
- str_drc_instruction_str = &(pstr_drc_uni_sel_proc->drc_config.str_drc_instruction_str[n]);
-
- if (str_drc_instruction_str->drc_set_effect & EFFECT_BIT_FADE)
- {
- if (str_drc_instruction_str->downmix_id[0] == ID_FOR_ANY_DOWNMIX)
- {
- pstr_drc_uni_sel_proc->drc_instructions_index[2] = n;
-
- }
- else
- {
- return (UNEXPECTED_ERROR);
- }
- }
+WORD32 impd_get_fading_drc_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc) {
+ pstr_drc_uni_sel_proc->drc_instructions_index[2] = -1;
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.album_mode == 0) {
+ WORD32 n;
+ ia_drc_instructions_struct* str_drc_instruction_str = NULL;
+ for (n = 0;
+ n < pstr_drc_uni_sel_proc->drc_config.drc_instructions_uni_drc_count;
+ n++) {
+ str_drc_instruction_str =
+ &(pstr_drc_uni_sel_proc->drc_config.str_drc_instruction_str[n]);
+
+ if (str_drc_instruction_str->drc_set_effect & EFFECT_BIT_FADE) {
+ if (str_drc_instruction_str->downmix_id[0] == ID_FOR_ANY_DOWNMIX) {
+ pstr_drc_uni_sel_proc->drc_instructions_index[2] = n;
+
+ } else {
+ return (UNEXPECTED_ERROR);
}
+ }
}
- return (0);
+ }
+ return (0);
}
-WORD32 impd_get_ducking_drc_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc)
-{
- WORD32 drc_instructions_index;
- WORD32 n, k;
- ia_drc_instructions_struct* str_drc_instruction_str;
-
- WORD32 requested_dwnmix_id = pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.active_downmix_id;
-
- pstr_drc_uni_sel_proc->drc_instructions_index[3] = -1;
- drc_instructions_index = -1;
- str_drc_instruction_str = NULL;
-
- for (n=0; n<pstr_drc_uni_sel_proc->drc_config.drc_instructions_uni_drc_count; n++)
- {
- str_drc_instruction_str = &(pstr_drc_uni_sel_proc->drc_config.str_drc_instruction_str[n]);
-
- if (str_drc_instruction_str->drc_set_effect & (EFFECT_BIT_DUCK_OTHER | EFFECT_BIT_DUCK_SELF))
- {
- for (k=0; k<str_drc_instruction_str->dwnmix_id_count; k++) {
- if (str_drc_instruction_str->downmix_id[k] == requested_dwnmix_id)
- {
-
- drc_instructions_index = n;
-
- }
- }
+WORD32 impd_get_ducking_drc_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc) {
+ WORD32 drc_instructions_index;
+ WORD32 n, k;
+ ia_drc_instructions_struct* str_drc_instruction_str;
+
+ WORD32 requested_dwnmix_id =
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.active_downmix_id;
+
+ pstr_drc_uni_sel_proc->drc_instructions_index[3] = -1;
+ drc_instructions_index = -1;
+ str_drc_instruction_str = NULL;
+
+ for (n = 0;
+ n < pstr_drc_uni_sel_proc->drc_config.drc_instructions_uni_drc_count;
+ n++) {
+ str_drc_instruction_str =
+ &(pstr_drc_uni_sel_proc->drc_config.str_drc_instruction_str[n]);
+
+ if (str_drc_instruction_str->drc_set_effect &
+ (EFFECT_BIT_DUCK_OTHER | EFFECT_BIT_DUCK_SELF)) {
+ for (k = 0; k < str_drc_instruction_str->dwnmix_id_count; k++) {
+ if (str_drc_instruction_str->downmix_id[k] == requested_dwnmix_id) {
+ drc_instructions_index = n;
}
+ }
}
- if (drc_instructions_index == -1)
- {
- for (n=0; n<pstr_drc_uni_sel_proc->drc_config.drc_instructions_uni_drc_count; n++)
- {
- str_drc_instruction_str = &(pstr_drc_uni_sel_proc->drc_config.str_drc_instruction_str[n]);
-
- if (str_drc_instruction_str->drc_set_effect & (EFFECT_BIT_DUCK_OTHER | EFFECT_BIT_DUCK_SELF))
- {
- for (k=0; k<str_drc_instruction_str->dwnmix_id_count; k++) {
- if (str_drc_instruction_str->downmix_id[k] == ID_FOR_BASE_LAYOUT)
- {
- drc_instructions_index = n;
- }
- }
- }
+ }
+ if (drc_instructions_index == -1) {
+ for (n = 0;
+ n < pstr_drc_uni_sel_proc->drc_config.drc_instructions_uni_drc_count;
+ n++) {
+ str_drc_instruction_str =
+ &(pstr_drc_uni_sel_proc->drc_config.str_drc_instruction_str[n]);
+
+ if (str_drc_instruction_str->drc_set_effect &
+ (EFFECT_BIT_DUCK_OTHER | EFFECT_BIT_DUCK_SELF)) {
+ for (k = 0; k < str_drc_instruction_str->dwnmix_id_count; k++) {
+ if (str_drc_instruction_str->downmix_id[k] == ID_FOR_BASE_LAYOUT) {
+ drc_instructions_index = n;
+ }
}
+ }
}
- if (drc_instructions_index > -1)
- {
- pstr_drc_uni_sel_proc->drc_instructions_index[2] = -1;
- pstr_drc_uni_sel_proc->drc_instructions_index[3] = drc_instructions_index;
- }
- return (0);
+ }
+ if (drc_instructions_index > -1) {
+ pstr_drc_uni_sel_proc->drc_instructions_index[2] = -1;
+ pstr_drc_uni_sel_proc->drc_instructions_index[3] = drc_instructions_index;
+ }
+ return (0);
}
WORD32 impd_get_selected_drc_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- WORD32 drc_set_id_selected)
-{
- WORD32 n;
-
- ia_drc_instructions_struct* str_drc_instruction_str = NULL;
-
- for(n=0; n<pstr_drc_uni_sel_proc->drc_config.drc_instructions_count_plus; n++)
- {
- if (pstr_drc_uni_sel_proc->drc_config.str_drc_instruction_str[n].drc_set_id == drc_set_id_selected) break;
- }
- if (n == pstr_drc_uni_sel_proc->drc_config.drc_instructions_count_plus)
- {
- return(EXTERNAL_ERROR);
- }
- pstr_drc_uni_sel_proc->drc_inst_index_sel = n;
- str_drc_instruction_str = &(pstr_drc_uni_sel_proc->drc_config.str_drc_instruction_str[pstr_drc_uni_sel_proc->drc_inst_index_sel]);
-
- pstr_drc_uni_sel_proc->drc_instructions_index[0] = pstr_drc_uni_sel_proc->drc_inst_index_sel;
- return (0);
+ WORD32 drc_set_id_selected) {
+ WORD32 n;
+
+ ia_drc_instructions_struct* str_drc_instruction_str = NULL;
+
+ for (n = 0; n < pstr_drc_uni_sel_proc->drc_config.drc_instructions_count_plus;
+ n++) {
+ if (pstr_drc_uni_sel_proc->drc_config.str_drc_instruction_str[n]
+ .drc_set_id == drc_set_id_selected)
+ break;
+ }
+ if (n == pstr_drc_uni_sel_proc->drc_config.drc_instructions_count_plus) {
+ return (EXTERNAL_ERROR);
+ }
+ pstr_drc_uni_sel_proc->drc_inst_index_sel = n;
+ str_drc_instruction_str = &(
+ pstr_drc_uni_sel_proc->drc_config
+ .str_drc_instruction_str[pstr_drc_uni_sel_proc->drc_inst_index_sel]);
+
+ pstr_drc_uni_sel_proc->drc_instructions_index[0] =
+ pstr_drc_uni_sel_proc->drc_inst_index_sel;
+ return (0);
}
+WORD32 impd_get_dependent_drc_set(
+ ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc) {
+ ia_drc_instructions_struct* str_drc_instruction_str = NULL;
+ str_drc_instruction_str = &(
+ pstr_drc_uni_sel_proc->drc_config
+ .str_drc_instruction_str[pstr_drc_uni_sel_proc->drc_inst_index_sel]);
-WORD32 impd_get_dependent_drc_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc)
-{
- ia_drc_instructions_struct* str_drc_instruction_str = NULL;
- str_drc_instruction_str = &(pstr_drc_uni_sel_proc->drc_config.str_drc_instruction_str[pstr_drc_uni_sel_proc->drc_inst_index_sel]);
-
- if (str_drc_instruction_str->depends_on_drc_set_present == 1)
- {
- WORD32 n;
- WORD32 drc_dependent_set_id = str_drc_instruction_str->depends_on_drc_set;
+ if (str_drc_instruction_str->depends_on_drc_set_present == 1) {
+ WORD32 n;
+ WORD32 drc_dependent_set_id = str_drc_instruction_str->depends_on_drc_set;
- for (n=0; n<pstr_drc_uni_sel_proc->drc_config.drc_instructions_count_plus; n++)
- {
- if (pstr_drc_uni_sel_proc->drc_config.str_drc_instruction_str[n].drc_set_id == drc_dependent_set_id) break;
- }
- if (n == pstr_drc_uni_sel_proc->drc_config.drc_instructions_count_plus)
- {
- return(UNEXPECTED_ERROR);
- }
- pstr_drc_uni_sel_proc->drc_instructions_index[1] = n;
+ for (n = 0;
+ n < pstr_drc_uni_sel_proc->drc_config.drc_instructions_count_plus;
+ n++) {
+ if (pstr_drc_uni_sel_proc->drc_config.str_drc_instruction_str[n]
+ .drc_set_id == drc_dependent_set_id)
+ break;
}
- else
- {
- pstr_drc_uni_sel_proc->drc_instructions_index[1] = -1;
+ if (n == pstr_drc_uni_sel_proc->drc_config.drc_instructions_count_plus) {
+ return (UNEXPECTED_ERROR);
}
- return (0);
+ pstr_drc_uni_sel_proc->drc_instructions_index[1] = n;
+ } else {
+ pstr_drc_uni_sel_proc->drc_instructions_index[1] = -1;
+ }
+ return (0);
}
-WORD32 impd_get_dependent_drc_instructions(const ia_drc_config* drc_config,
- const ia_drc_instructions_struct* str_drc_instruction_str,
- ia_drc_instructions_struct** drc_instructions_dependent)
-{
- WORD32 j;
- ia_drc_instructions_struct* dependent_drc = NULL;
- for (j=0; j<drc_config->drc_instructions_uni_drc_count; j++)
- {
- dependent_drc = (ia_drc_instructions_struct*) &(drc_config->str_drc_instruction_str[j]);
- if (dependent_drc->drc_set_id == str_drc_instruction_str->depends_on_drc_set)
- {
- break;
- }
+WORD32 impd_get_dependent_drc_instructions(
+ const ia_drc_config* drc_config,
+ const ia_drc_instructions_struct* str_drc_instruction_str,
+ ia_drc_instructions_struct** drc_instructions_dependent) {
+ WORD32 j;
+ ia_drc_instructions_struct* dependent_drc = NULL;
+ for (j = 0; j < drc_config->drc_instructions_uni_drc_count; j++) {
+ dependent_drc =
+ (ia_drc_instructions_struct*)&(drc_config->str_drc_instruction_str[j]);
+ if (dependent_drc->drc_set_id ==
+ str_drc_instruction_str->depends_on_drc_set) {
+ break;
}
- if (j == drc_config->drc_instructions_uni_drc_count)
- {
- return (UNEXPECTED_ERROR);
- }
- if (dependent_drc->depends_on_drc_set_present == 1)
- {
- return (UNEXPECTED_ERROR);
- }
- *drc_instructions_dependent = dependent_drc;
- return(0);
+ }
+ if (j == drc_config->drc_instructions_uni_drc_count) {
+ return (UNEXPECTED_ERROR);
+ }
+ if (dependent_drc->depends_on_drc_set_present == 1) {
+ return (UNEXPECTED_ERROR);
+ }
+ *drc_instructions_dependent = dependent_drc;
+ return (0);
}
-WORD32 impd_select_drcs_without_compr_effects (ia_drc_config* pstr_drc_config,
- WORD32* match_found_flag,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info)
-{
- WORD32 i, k, n;
- WORD32 selection_candidate_step_2_count=0;
- ia_selection_candidate_info_struct selection_candidate_info_step_2[SELECTION_CANDIDATE_COUNT_MAX];
- WORD32 effect_types_request_table_size;
- WORD32 match;
- ia_drc_instructions_struct* str_drc_instruction_str;
-
- effect_types_request_table_size = sizeof(effect_types_request_table) / sizeof(WORD32);
-
- k=0;
- for (i=0; i < *selection_candidate_count; i++)
- {
- str_drc_instruction_str = &(pstr_drc_config->str_drc_instruction_str[selection_candidate_info[i].drc_instructions_index]);
-
- match = 1;
- for (n=0; n<effect_types_request_table_size; n++)
- {
- if ((str_drc_instruction_str->drc_set_effect & effect_types_request_table[n]) != 0x0)
- {
- match = 0;
- }
- }
- if (match == 1)
- {
- memcpy(&selection_candidate_info_step_2[k], &selection_candidate_info[i], sizeof(ia_selection_candidate_info_struct));
- k++;
- }
+WORD32 impd_select_drcs_without_compr_effects(
+ ia_drc_config* pstr_drc_config, WORD32* match_found_flag,
+ WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info) {
+ WORD32 i, k, n;
+ WORD32 selection_candidate_step_2_count = 0;
+ ia_selection_candidate_info_struct
+ selection_candidate_info_step_2[SELECTION_CANDIDATE_COUNT_MAX];
+ WORD32 effect_types_request_table_size;
+ WORD32 match;
+ ia_drc_instructions_struct* str_drc_instruction_str;
+
+ effect_types_request_table_size =
+ sizeof(effect_types_request_table) / sizeof(WORD32);
+
+ k = 0;
+ for (i = 0; i < *selection_candidate_count; i++) {
+ str_drc_instruction_str = &(
+ pstr_drc_config->str_drc_instruction_str[selection_candidate_info[i]
+ .drc_instructions_index]);
+
+ match = 1;
+ for (n = 0; n < effect_types_request_table_size; n++) {
+ if ((str_drc_instruction_str->drc_set_effect &
+ effect_types_request_table[n]) != 0x0) {
+ match = 0;
+ }
}
- selection_candidate_step_2_count = k;
-
- if (selection_candidate_step_2_count > 0)
- {
- *match_found_flag = 1;
- for (i=0; i<selection_candidate_step_2_count; i++)
- {
- memcpy(&selection_candidate_info[i], &selection_candidate_info_step_2[i], sizeof(ia_selection_candidate_info_struct));
- *selection_candidate_count = selection_candidate_step_2_count;
- }
+ if (match == 1) {
+ memcpy(&selection_candidate_info_step_2[k], &selection_candidate_info[i],
+ sizeof(ia_selection_candidate_info_struct));
+ k++;
}
- else
- {
- *match_found_flag = 0;
+ }
+ selection_candidate_step_2_count = k;
+
+ if (selection_candidate_step_2_count > 0) {
+ *match_found_flag = 1;
+ for (i = 0; i < selection_candidate_step_2_count; i++) {
+ memcpy(&selection_candidate_info[i], &selection_candidate_info_step_2[i],
+ sizeof(ia_selection_candidate_info_struct));
+ *selection_candidate_count = selection_candidate_step_2_count;
}
+ } else {
+ *match_found_flag = 0;
+ }
- return (0);
+ return (0);
}
-WORD32 impd_match_effect_type_attempt(ia_drc_config* pstr_drc_config,
- WORD32 requested_effect_type,
- WORD32 state_requested,
- WORD32* match_found_flag,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info)
-{
- WORD32 i, k, err;
- WORD32 selection_candidate_step_2_count=0;
- ia_selection_candidate_info_struct selection_candidate_info_step_2[SELECTION_CANDIDATE_COUNT_MAX];
- ia_drc_instructions_struct* str_drc_instruction_str;
- ia_drc_instructions_struct* drc_instructions_dependent;
- WORD32 effect_bit_idx;
-
- err = impd_map_requested_effect_bit_idx(requested_effect_type, &effect_bit_idx);
+WORD32 impd_match_effect_type_attempt(
+ ia_drc_config* pstr_drc_config, WORD32 requested_effect_type,
+ WORD32 state_requested, WORD32* match_found_flag,
+ WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info) {
+ WORD32 i, k, err;
+ WORD32 selection_candidate_step_2_count = 0;
+ ia_selection_candidate_info_struct
+ selection_candidate_info_step_2[SELECTION_CANDIDATE_COUNT_MAX];
+ ia_drc_instructions_struct* str_drc_instruction_str;
+ ia_drc_instructions_struct* drc_instructions_dependent;
+ WORD32 effect_bit_idx;
+
+ err =
+ impd_map_requested_effect_bit_idx(requested_effect_type, &effect_bit_idx);
+ if (err) return (err);
+
+ if (effect_bit_idx == EFFECT_BIT_NONE) {
+ err = impd_select_drcs_without_compr_effects(
+ pstr_drc_config, match_found_flag, selection_candidate_count,
+ selection_candidate_info);
if (err) return (err);
-
- if (effect_bit_idx == EFFECT_BIT_NONE)
- {
- err = impd_select_drcs_without_compr_effects (pstr_drc_config, match_found_flag, selection_candidate_count, selection_candidate_info);
+ } else {
+ k = 0;
+ for (i = 0; i < *selection_candidate_count; i++) {
+ str_drc_instruction_str =
+ &(pstr_drc_config->str_drc_instruction_str
+ [selection_candidate_info[i].drc_instructions_index]);
+ if (str_drc_instruction_str->depends_on_drc_set_present == 1) {
+ err = impd_get_dependent_drc_instructions(pstr_drc_config,
+ str_drc_instruction_str,
+ &drc_instructions_dependent);
if (err) return (err);
- }
- else
- {
- k=0;
- for (i=0; i < *selection_candidate_count; i++)
- {
- str_drc_instruction_str = &(pstr_drc_config->str_drc_instruction_str[selection_candidate_info[i].drc_instructions_index]);
- if (str_drc_instruction_str->depends_on_drc_set_present == 1)
- {
- err = impd_get_dependent_drc_instructions(pstr_drc_config, str_drc_instruction_str, &drc_instructions_dependent);
- if (err) return (err);
-
- if (state_requested == 1)
- {
- if (((str_drc_instruction_str->drc_set_effect & effect_bit_idx) != 0x0) ||
- ((drc_instructions_dependent->drc_set_effect & effect_bit_idx) != 0x0))
- {
- memcpy(&selection_candidate_info_step_2[k], &selection_candidate_info[i], sizeof(ia_selection_candidate_info_struct));
- k++;
- }
- }
- else
- {
- if (((str_drc_instruction_str->drc_set_effect & effect_bit_idx) == 0x0) &&
- ((drc_instructions_dependent->drc_set_effect & effect_bit_idx) == 0x0))
- {
- memcpy(&selection_candidate_info_step_2[k], &selection_candidate_info[i], sizeof(ia_selection_candidate_info_struct));
- k++;
- }
- }
- }
- else
- {
- if (state_requested == 1)
- {
- if ((str_drc_instruction_str->drc_set_effect & effect_bit_idx) != 0x0)
- {
- memcpy(&selection_candidate_info_step_2[k], &selection_candidate_info[i], sizeof(ia_selection_candidate_info_struct));
- k++;
- }
- }
- else
- {
- if ((str_drc_instruction_str->drc_set_effect & effect_bit_idx) == 0x0)
- {
- memcpy(&selection_candidate_info_step_2[k], &selection_candidate_info[i], sizeof(ia_selection_candidate_info_struct));
- k++;
- }
- }
- }
- }
- selection_candidate_step_2_count = k;
-
- if (selection_candidate_step_2_count > 0)
- {
- *match_found_flag = 1;
- for (i=0; i<selection_candidate_step_2_count; i++)
- {
- *selection_candidate_count = selection_candidate_step_2_count;
- memcpy(&selection_candidate_info[i], &selection_candidate_info_step_2[i], sizeof(ia_selection_candidate_info_struct));
- }
+
+ if (state_requested == 1) {
+ if (((str_drc_instruction_str->drc_set_effect & effect_bit_idx) !=
+ 0x0) ||
+ ((drc_instructions_dependent->drc_set_effect & effect_bit_idx) !=
+ 0x0)) {
+ memcpy(&selection_candidate_info_step_2[k],
+ &selection_candidate_info[i],
+ sizeof(ia_selection_candidate_info_struct));
+ k++;
+ }
+ } else {
+ if (((str_drc_instruction_str->drc_set_effect & effect_bit_idx) ==
+ 0x0) &&
+ ((drc_instructions_dependent->drc_set_effect & effect_bit_idx) ==
+ 0x0)) {
+ memcpy(&selection_candidate_info_step_2[k],
+ &selection_candidate_info[i],
+ sizeof(ia_selection_candidate_info_struct));
+ k++;
+ }
}
- else
- {
- *match_found_flag = 0;
+ } else {
+ if (state_requested == 1) {
+ if ((str_drc_instruction_str->drc_set_effect & effect_bit_idx) !=
+ 0x0) {
+ memcpy(&selection_candidate_info_step_2[k],
+ &selection_candidate_info[i],
+ sizeof(ia_selection_candidate_info_struct));
+ k++;
+ }
+ } else {
+ if ((str_drc_instruction_str->drc_set_effect & effect_bit_idx) ==
+ 0x0) {
+ memcpy(&selection_candidate_info_step_2[k],
+ &selection_candidate_info[i],
+ sizeof(ia_selection_candidate_info_struct));
+ k++;
+ }
}
+ }
}
- return(0);
-}
+ selection_candidate_step_2_count = k;
-WORD32 impd_match_effect_types(ia_drc_config* pstr_drc_config,
- WORD32 effect_type_requested_total_count,
- WORD32 effect_type_requested_desired_count,
- WORD32* requested_effect_type,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info)
-{
- WORD32 k, err;
- WORD32 match_found_flag = 0;
- WORD32 state_requested;
- WORD32 desired_effect_type_found, fallback_effect_type_found;
-
- desired_effect_type_found = 0;
- fallback_effect_type_found = 0;
- k = 0;
- while (k<effect_type_requested_desired_count)
- {
- state_requested = 1;
- err = impd_match_effect_type_attempt(pstr_drc_config, requested_effect_type[k], state_requested, &match_found_flag, selection_candidate_count, selection_candidate_info);
- if (err) return (err);
- if (match_found_flag) desired_effect_type_found = 1;
- k++;
+ if (selection_candidate_step_2_count > 0) {
+ *match_found_flag = 1;
+ for (i = 0; i < selection_candidate_step_2_count; i++) {
+ *selection_candidate_count = selection_candidate_step_2_count;
+ memcpy(&selection_candidate_info[i],
+ &selection_candidate_info_step_2[i],
+ sizeof(ia_selection_candidate_info_struct));
+ }
+ } else {
+ *match_found_flag = 0;
}
- if (desired_effect_type_found == 0)
- {
- while ((k<effect_type_requested_total_count) && (match_found_flag == 0))
- {
- state_requested = 1;
- err = impd_match_effect_type_attempt(pstr_drc_config, requested_effect_type[k], state_requested, &match_found_flag, selection_candidate_count, selection_candidate_info);
- if (err) return (err);
- if (match_found_flag) fallback_effect_type_found = 1;
- k++;
- }
+ }
+ return (0);
+}
+
+WORD32 impd_match_effect_types(
+ ia_drc_config* pstr_drc_config, WORD32 effect_type_requested_total_count,
+ WORD32 effect_type_requested_desired_count, WORD32* requested_effect_type,
+ WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info) {
+ WORD32 k, err;
+ WORD32 match_found_flag = 0;
+ WORD32 state_requested;
+ WORD32 desired_effect_type_found, fallback_effect_type_found;
+
+ desired_effect_type_found = 0;
+ fallback_effect_type_found = 0;
+ k = 0;
+ while (k < effect_type_requested_desired_count) {
+ state_requested = 1;
+ err = impd_match_effect_type_attempt(
+ pstr_drc_config, requested_effect_type[k], state_requested,
+ &match_found_flag, selection_candidate_count, selection_candidate_info);
+ if (err) return (err);
+ if (match_found_flag) desired_effect_type_found = 1;
+ k++;
+ }
+ if (desired_effect_type_found == 0) {
+ while ((k < effect_type_requested_total_count) && (match_found_flag == 0)) {
+ state_requested = 1;
+ err = impd_match_effect_type_attempt(
+ pstr_drc_config, requested_effect_type[k], state_requested,
+ &match_found_flag, selection_candidate_count,
+ selection_candidate_info);
+ if (err) return (err);
+ if (match_found_flag) fallback_effect_type_found = 1;
+ k++;
}
+ }
- return(0);
+ return (0);
}
-WORD32 impd_match_dynamic_range(ia_drc_config* pstr_drc_config,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
- WORD32 num_drc_requests,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info)
-{
- ia_drc_instructions_struct* str_drc_instruction_str;
- WORD32 err, i, k;
- WORD32 lp_avg_present_val;
- FLOAT32 lp_avg_val;
- FLOAT32 deviation_min = 1000.0f;
- WORD32 selected[DRC_INSTRUCTIONS_COUNT_MAX];
- WORD32 dynamic_range_measurement_type = pstr_drc_sel_proc_params_struct->
- requested_dyn_range_measur_type[num_drc_requests];
-
- WORD32 requested_dyn_range_range_flag = pstr_drc_sel_proc_params_struct->
- requested_dyn_range_range_flag[num_drc_requests];
-
- FLOAT32 dynamic_range_requested = pstr_drc_sel_proc_params_struct->
- requested_dyn_range_value[num_drc_requests];
-
- FLOAT32 dynamic_range_min_requested = pstr_drc_sel_proc_params_struct->
- requested_dyn_range_min_val[num_drc_requests];
-
- FLOAT32 dynamic_range_max_requested = pstr_drc_sel_proc_params_struct->
- requested_dyn_range_max_val[num_drc_requests];
-
- WORD32* requested_dwnmix_id = pstr_drc_sel_proc_params_struct->requested_dwnmix_id;
-
- WORD32 album_mode = pstr_drc_sel_proc_params_struct->album_mode;
-
- k=0;
- for (i=0; i < *selection_candidate_count; i++)
- {
- str_drc_instruction_str = &(pstr_drc_config->str_drc_instruction_str[selection_candidate_info[i].drc_instructions_index]);
-
- err = impd_loudness_peak_to_average_info(
- pstr_loudness_info,
- str_drc_instruction_str,
- requested_dwnmix_id[selection_candidate_info[i].downmix_id_request_index],
- dynamic_range_measurement_type,
- album_mode,
- &lp_avg_present_val,
- &lp_avg_val);
- if (err) return (err);
+WORD32 impd_match_dynamic_range(
+ ia_drc_config* pstr_drc_config,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
+ WORD32 num_drc_requests, WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info) {
+ ia_drc_instructions_struct* str_drc_instruction_str;
+ WORD32 err, i, k;
+ WORD32 lp_avg_present_val;
+ FLOAT32 lp_avg_val;
+ FLOAT32 deviation_min = 1000.0f;
+ WORD32 selected[DRC_INSTRUCTIONS_COUNT_MAX];
+ WORD32 dynamic_range_measurement_type =
+ pstr_drc_sel_proc_params_struct
+ ->requested_dyn_range_measur_type[num_drc_requests];
+
+ WORD32 requested_dyn_range_range_flag =
+ pstr_drc_sel_proc_params_struct
+ ->requested_dyn_range_range_flag[num_drc_requests];
+
+ FLOAT32 dynamic_range_requested =
+ pstr_drc_sel_proc_params_struct
+ ->requested_dyn_range_value[num_drc_requests];
+
+ FLOAT32 dynamic_range_min_requested =
+ pstr_drc_sel_proc_params_struct
+ ->requested_dyn_range_min_val[num_drc_requests];
+
+ FLOAT32 dynamic_range_max_requested =
+ pstr_drc_sel_proc_params_struct
+ ->requested_dyn_range_max_val[num_drc_requests];
+
+ WORD32* requested_dwnmix_id =
+ pstr_drc_sel_proc_params_struct->requested_dwnmix_id;
+
+ WORD32 album_mode = pstr_drc_sel_proc_params_struct->album_mode;
+
+ k = 0;
+ for (i = 0; i < *selection_candidate_count; i++) {
+ str_drc_instruction_str = &(
+ pstr_drc_config->str_drc_instruction_str[selection_candidate_info[i]
+ .drc_instructions_index]);
+
+ err = impd_loudness_peak_to_average_info(
+ pstr_loudness_info, str_drc_instruction_str,
+ requested_dwnmix_id[selection_candidate_info[i]
+ .downmix_id_request_index],
+ dynamic_range_measurement_type, album_mode, &lp_avg_present_val,
+ &lp_avg_val);
+ if (err) return (err);
- if (lp_avg_present_val == 1)
- {
- if (requested_dyn_range_range_flag == 1)
- {
- if ((lp_avg_val >= dynamic_range_min_requested) && (lp_avg_val <= dynamic_range_max_requested))
- {
- selected[k] = i;
- k++;
- }
- }
- else
- {
- FLOAT32 deviation = (FLOAT32)fabs((FLOAT64)(dynamic_range_requested - lp_avg_val));
- if (deviation_min >= deviation)
- {
- if (deviation_min > deviation)
- {
- deviation_min = deviation;
- k = 0;
- }
- selected[k] = i;
- k++;
- }
- }
+ if (lp_avg_present_val == 1) {
+ if (requested_dyn_range_range_flag == 1) {
+ if ((lp_avg_val >= dynamic_range_min_requested) &&
+ (lp_avg_val <= dynamic_range_max_requested)) {
+ selected[k] = i;
+ k++;
}
- }
- if (k>0)
- {
- for (i=0; i<k; i++)
- {
- memcpy(&selection_candidate_info[i], &selection_candidate_info[selected[i]], sizeof(ia_selection_candidate_info_struct));
+ } else {
+ FLOAT32 deviation =
+ (FLOAT32)fabs((FLOAT64)(dynamic_range_requested - lp_avg_val));
+ if (deviation_min >= deviation) {
+ if (deviation_min > deviation) {
+ deviation_min = deviation;
+ k = 0;
+ }
+ selected[k] = i;
+ k++;
}
- *selection_candidate_count = k;
+ }
}
+ }
+ if (k > 0) {
+ for (i = 0; i < k; i++) {
+ memcpy(&selection_candidate_info[i],
+ &selection_candidate_info[selected[i]],
+ sizeof(ia_selection_candidate_info_struct));
+ }
+ *selection_candidate_count = k;
+ }
- return(0);
+ return (0);
}
-
-WORD32 impd_match_drc_characteristic_attempt(ia_drc_config* pstr_drc_config,
- WORD32 requested_drc_characteristic,
- WORD32* match_found_flag,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info)
-{
- WORD32 i, k, n, b, m;
- WORD32 ref_count;
- WORD32 drc_characteristic;
- FLOAT32 match_count;
- WORD32 drc_characteristic_request_1;
- WORD32 drc_characteristic_request_2;
- WORD32 drc_characteristic_request_3;
-
- ia_drc_instructions_struct* str_drc_instruction_str = NULL;
- ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc = NULL;
- ia_gain_set_params_struct* gain_set_params = NULL;
- *match_found_flag = 0;
-
- if (requested_drc_characteristic < 1)
- {
- return(UNEXPECTED_ERROR);
- }
- if(requested_drc_characteristic < 12)
- {
- drc_characteristic_request_1 = drc_characteristic_order_default[requested_drc_characteristic-1][0];
- drc_characteristic_request_2 = drc_characteristic_order_default[requested_drc_characteristic-1][1];
- drc_characteristic_request_3 = drc_characteristic_order_default[requested_drc_characteristic-1][2];
- }
- else
- {
- drc_characteristic_request_1 = requested_drc_characteristic;
- drc_characteristic_request_2 = -1;
- drc_characteristic_request_3 = -1;
+WORD32 impd_match_drc_characteristic_attempt(
+ ia_drc_config* pstr_drc_config, WORD32 requested_drc_characteristic,
+ WORD32* match_found_flag, WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info) {
+ WORD32 i, k, n, b, m;
+ WORD32 ref_count;
+ WORD32 drc_characteristic;
+ FLOAT32 match_count;
+ WORD32 drc_characteristic_request_1;
+ WORD32 drc_characteristic_request_2;
+ WORD32 drc_characteristic_request_3;
+
+ ia_drc_instructions_struct* str_drc_instruction_str = NULL;
+ ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc = NULL;
+ ia_gain_set_params_struct* gain_set_params = NULL;
+ *match_found_flag = 0;
+
+ if (requested_drc_characteristic < 1) {
+ return (UNEXPECTED_ERROR);
+ }
+ if (requested_drc_characteristic < 12) {
+ drc_characteristic_request_1 =
+ drc_characteristic_order_default[requested_drc_characteristic - 1][0];
+ drc_characteristic_request_2 =
+ drc_characteristic_order_default[requested_drc_characteristic - 1][1];
+ drc_characteristic_request_3 =
+ drc_characteristic_order_default[requested_drc_characteristic - 1][2];
+ } else {
+ drc_characteristic_request_1 = requested_drc_characteristic;
+ drc_characteristic_request_2 = -1;
+ drc_characteristic_request_3 = -1;
+ }
+
+ if (pstr_drc_config->drc_coefficients_drc_count) {
+ for (i = 0; i < pstr_drc_config->drc_coefficients_drc_count; i++) {
+ str_p_loc_drc_coefficients_uni_drc =
+ &(pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[i]);
+ if (str_p_loc_drc_coefficients_uni_drc->drc_location == LOCATION_SELECTED)
+ break;
}
- if (pstr_drc_config->drc_coefficients_drc_count) {
- for (i=0; i<pstr_drc_config->drc_coefficients_drc_count; i++)
- {
- str_p_loc_drc_coefficients_uni_drc = &(pstr_drc_config->str_p_loc_drc_coefficients_uni_drc[i]);
- if (str_p_loc_drc_coefficients_uni_drc->drc_location == LOCATION_SELECTED) break;
- }
-
- if (i == pstr_drc_config->drc_coefficients_drc_count)
- {
- return (UNEXPECTED_ERROR);
- }
+ if (i == pstr_drc_config->drc_coefficients_drc_count) {
+ return (UNEXPECTED_ERROR);
}
-
- n = 0;
- for (i=0; i < *selection_candidate_count; i++)
- {
- ref_count = 0;
- match_count = 0;
-
- str_drc_instruction_str = &(pstr_drc_config->str_drc_instruction_str[selection_candidate_info[i].drc_instructions_index]);
- for (k=0; k<str_drc_instruction_str->num_drc_ch_groups; k++)
- {
- gain_set_params = &(str_p_loc_drc_coefficients_uni_drc->gain_set_params[str_drc_instruction_str->gain_set_index_for_channel_group[k]]);
- for (b=0; b<gain_set_params->band_count; b++)
- {
- ref_count++;
- drc_characteristic = gain_set_params->gain_params[b].drc_characteristic;
- if ( drc_characteristic == drc_characteristic_request_1) match_count += 1.0f;
- else if ( drc_characteristic == drc_characteristic_request_2) match_count += 0.75f;
- else if ( drc_characteristic == drc_characteristic_request_3) match_count += 0.5f;
- }
- }
- if (str_drc_instruction_str->depends_on_drc_set_present == 1)
- {
- WORD32 depends_on_drc_set = str_drc_instruction_str->depends_on_drc_set;
- for (m=0; m<pstr_drc_config->drc_instructions_uni_drc_count; m++)
- {
- if (pstr_drc_config->str_drc_instruction_str[m].drc_set_id == depends_on_drc_set) break;
- }
- if (m == pstr_drc_config->drc_instructions_uni_drc_count)
- {
- return (UNEXPECTED_ERROR);
- }
- str_drc_instruction_str = &(pstr_drc_config->str_drc_instruction_str[m]);
- if ((str_drc_instruction_str->drc_set_effect & (EFFECT_BIT_FADE | EFFECT_BIT_DUCK_OTHER | EFFECT_BIT_DUCK_SELF)) == 0)
- {
- if (str_drc_instruction_str->drc_set_effect != EFFECT_BIT_CLIPPING) {
- for (k=0; k<str_drc_instruction_str->num_drc_ch_groups; k++)
- {
- gain_set_params = &(str_p_loc_drc_coefficients_uni_drc->gain_set_params[str_drc_instruction_str->gain_set_index_for_channel_group[k]]);
- for (b=0; b<gain_set_params->band_count; b++)
- {
- ref_count++;
- drc_characteristic = gain_set_params->gain_params[b].drc_characteristic;
- if ( drc_characteristic == drc_characteristic_request_1) match_count += 1.0f;
- else if ( drc_characteristic == drc_characteristic_request_2) match_count += 0.75f;
- else if ( drc_characteristic == drc_characteristic_request_3) match_count += 0.5;
- }
- }
- }
+ }
+
+ n = 0;
+ for (i = 0; i < *selection_candidate_count; i++) {
+ ref_count = 0;
+ match_count = 0;
+
+ str_drc_instruction_str = &(
+ pstr_drc_config->str_drc_instruction_str[selection_candidate_info[i]
+ .drc_instructions_index]);
+ for (k = 0; k < str_drc_instruction_str->num_drc_ch_groups; k++) {
+ gain_set_params =
+ &(str_p_loc_drc_coefficients_uni_drc->gain_set_params
+ [str_drc_instruction_str->gain_set_index_for_channel_group[k]]);
+ for (b = 0; b < gain_set_params->band_count; b++) {
+ ref_count++;
+ drc_characteristic = gain_set_params->gain_params[b].drc_characteristic;
+ if (drc_characteristic == drc_characteristic_request_1)
+ match_count += 1.0f;
+ else if (drc_characteristic == drc_characteristic_request_2)
+ match_count += 0.75f;
+ else if (drc_characteristic == drc_characteristic_request_3)
+ match_count += 0.5f;
+ }
+ }
+ if (str_drc_instruction_str->depends_on_drc_set_present == 1) {
+ WORD32 depends_on_drc_set = str_drc_instruction_str->depends_on_drc_set;
+ for (m = 0; m < pstr_drc_config->drc_instructions_uni_drc_count; m++) {
+ if (pstr_drc_config->str_drc_instruction_str[m].drc_set_id ==
+ depends_on_drc_set)
+ break;
+ }
+ if (m == pstr_drc_config->drc_instructions_uni_drc_count) {
+ return (UNEXPECTED_ERROR);
+ }
+ str_drc_instruction_str = &(pstr_drc_config->str_drc_instruction_str[m]);
+ if ((str_drc_instruction_str->drc_set_effect &
+ (EFFECT_BIT_FADE | EFFECT_BIT_DUCK_OTHER | EFFECT_BIT_DUCK_SELF)) ==
+ 0) {
+ if (str_drc_instruction_str->drc_set_effect != EFFECT_BIT_CLIPPING) {
+ for (k = 0; k < str_drc_instruction_str->num_drc_ch_groups; k++) {
+ gain_set_params =
+ &(str_p_loc_drc_coefficients_uni_drc->gain_set_params
+ [str_drc_instruction_str
+ ->gain_set_index_for_channel_group[k]]);
+ for (b = 0; b < gain_set_params->band_count; b++) {
+ ref_count++;
+ drc_characteristic =
+ gain_set_params->gain_params[b].drc_characteristic;
+ if (drc_characteristic == drc_characteristic_request_1)
+ match_count += 1.0f;
+ else if (drc_characteristic == drc_characteristic_request_2)
+ match_count += 0.75f;
+ else if (drc_characteristic == drc_characteristic_request_3)
+ match_count += 0.5;
}
+ }
}
- if ((ref_count > 0) && (((FLOAT32)match_count) > 0.5f * ref_count))
- {
- memcpy(&selection_candidate_info[n], &selection_candidate_info[i], sizeof(ia_selection_candidate_info_struct));
- n++;
- }
+ }
}
- if (n > 0)
- {
- *selection_candidate_count = n;
- *match_found_flag = 1;
+ if ((ref_count > 0) && (((FLOAT32)match_count) > 0.5f * ref_count)) {
+ memcpy(&selection_candidate_info[n], &selection_candidate_info[i],
+ sizeof(ia_selection_candidate_info_struct));
+ n++;
}
+ }
+ if (n > 0) {
+ *selection_candidate_count = n;
+ *match_found_flag = 1;
+ }
- return(0);
+ return (0);
}
-
-
-WORD32 impd_match_drc_characteristic(ia_drc_config* pstr_drc_config,
- WORD32 requested_drc_characteristic,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info)
-{
- WORD32 k, err;
- WORD32 match_found_flag = 0;
-
- WORD32* drc_characteristic_order = drc_characteristic_order_default[requested_drc_characteristic-1];
- WORD32 drc_characteristic_order_count = sizeof(drc_characteristic_order_default[requested_drc_characteristic]) / sizeof(WORD32);
- k = 0;
- while ((k<drc_characteristic_order_count) && (match_found_flag == 0) && (drc_characteristic_order[k] > 0))
- {
- err = impd_match_drc_characteristic_attempt(pstr_drc_config,
- drc_characteristic_order[k],
- &match_found_flag,
- selection_candidate_count,
- selection_candidate_info);
- if (err) return (err);
- k++;
- }
- return (0);
+WORD32 impd_match_drc_characteristic(
+ ia_drc_config* pstr_drc_config, WORD32 requested_drc_characteristic,
+ WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info) {
+ WORD32 k, err;
+ WORD32 match_found_flag = 0;
+
+ WORD32* drc_characteristic_order =
+ drc_characteristic_order_default[requested_drc_characteristic - 1];
+ WORD32 drc_characteristic_order_count =
+ sizeof(drc_characteristic_order_default[requested_drc_characteristic]) /
+ sizeof(WORD32);
+ k = 0;
+ while ((k < drc_characteristic_order_count) && (match_found_flag == 0) &&
+ (drc_characteristic_order[k] > 0)) {
+ err = impd_match_drc_characteristic_attempt(
+ pstr_drc_config, drc_characteristic_order[k], &match_found_flag,
+ selection_candidate_count, selection_candidate_info);
+ if (err) return (err);
+ k++;
+ }
+ return (0);
}
+WORD32 impd_drc_set_preselection(
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
+ ia_drc_config* pstr_drc_config,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ WORD32 restrict_to_drc_with_album_loudness,
+ ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
+ WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info) {
+ WORD32 i, j, k, l, d, n, err;
+ WORD32 downmix_id_match = 0;
+
+ WORD32 selection_candidate_step_2_count;
+ ia_selection_candidate_info_struct
+ selection_candidate_info_step_2[SELECTION_CANDIDATE_COUNT_MAX];
+
+ WORD32 num_downmix_id_requests =
+ pstr_drc_sel_proc_params_struct->num_downmix_id_requests;
+ WORD32* requested_dwnmix_id =
+ pstr_drc_sel_proc_params_struct->requested_dwnmix_id;
+ FLOAT32 output_peak_level_max =
+ pstr_drc_sel_proc_params_struct->output_peak_level_max;
+ WORD32 loudness_deviation_max =
+ pstr_drc_sel_proc_params_struct->loudness_deviation_max;
+ WORD32* drc_set_id_valid_flag = pstr_drc_uni_sel_proc->drc_set_id_valid_flag;
+ WORD32* eq_set_id_valid_flag = pstr_drc_uni_sel_proc->eq_set_id_valid_flag;
+
+ FLOAT32 output_peak_level_min = 1000.0f;
+ FLOAT32 adjustment;
+ WORD32 loudness_drc_set_id_requested;
+
+ WORD32 num_compression_eq_count = 0;
+ WORD32 num_compression_eq_id[16];
+
+ WORD32 loudness_info_count = 0;
+ WORD32 eq_set_id_loudness[16];
+ FLOAT32 loudness_normalization_gain_db[16];
+ FLOAT32 loudness[16];
+ WORD32 peak_info_count;
+ WORD32 eq_set_id_Peak[16];
+ FLOAT32 signal_peak_level[16];
+ WORD32 explicit_peak_information_present[16];
+
+ ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc = NULL;
+ ia_drc_instructions_struct* str_drc_instruction_str = NULL;
+
+ impd_select_drc_coeff3(pstr_drc_config, &str_p_loc_drc_coefficients_uni_drc);
+
+ k = 0;
+ for (d = 0; d < num_downmix_id_requests; d++) {
+ err = impd_find_eq_set_no_compression(
+ pstr_drc_config, requested_dwnmix_id[d], &num_compression_eq_count,
+ num_compression_eq_id);
+ if (err) return (err);
+ for (i = 0; i < pstr_drc_config->drc_instructions_count_plus; i++) {
+ downmix_id_match = 0;
+ str_drc_instruction_str = &(pstr_drc_config->str_drc_instruction_str[i]);
+
+ for (j = 0; j < str_drc_instruction_str->dwnmix_id_count; j++) {
+ if ((str_drc_instruction_str->downmix_id[j] ==
+ requested_dwnmix_id[d]) ||
+ ((str_drc_instruction_str->downmix_id[j] == ID_FOR_BASE_LAYOUT) &&
+ (str_drc_instruction_str->drc_set_id > 0)) ||
+ (str_drc_instruction_str->downmix_id[j] == ID_FOR_ANY_DOWNMIX)) {
+ downmix_id_match = 1;
+ }
+ }
+ if (downmix_id_match == 1) {
+ if (pstr_drc_sel_proc_params_struct->dynamic_range_control_on == 1) {
+ if ((str_drc_instruction_str->drc_set_effect != EFFECT_BIT_FADE) &&
+ (str_drc_instruction_str->drc_set_effect !=
+ EFFECT_BIT_DUCK_OTHER) &&
+ (str_drc_instruction_str->drc_set_effect !=
+ EFFECT_BIT_DUCK_SELF) &&
+ (str_drc_instruction_str->drc_set_effect != 0 ||
+ str_drc_instruction_str->drc_set_id < 0) &&
+ (((str_drc_instruction_str->depends_on_drc_set_present == 0) &&
+ (str_drc_instruction_str->no_independent_use == 0)) ||
+ (str_drc_instruction_str->depends_on_drc_set_present == 1))) {
+ WORD32 drc_is_permitted = 1;
+ if (str_drc_instruction_str->drc_set_id > 0) {
+ drc_is_permitted =
+ drc_set_id_valid_flag[str_drc_instruction_str->drc_set_id];
+ }
+ if (drc_is_permitted == 1) {
+ err = impd_init_loudness_control(
+ pstr_drc_sel_proc_params_struct, pstr_loudness_info,
+ requested_dwnmix_id[d], str_drc_instruction_str->drc_set_id,
+
+ num_compression_eq_count, num_compression_eq_id,
+ &loudness_info_count, eq_set_id_loudness,
+ loudness_normalization_gain_db, loudness);
+ if (err) return (err);
+
+ err = impd_signal_peak_level_info(
+ pstr_drc_config, pstr_loudness_info, str_drc_instruction_str,
+ requested_dwnmix_id[d],
+ pstr_drc_sel_proc_params_struct->album_mode,
+ num_compression_eq_count, num_compression_eq_id,
+ &peak_info_count, eq_set_id_Peak, signal_peak_level,
+ explicit_peak_information_present);
+ if (err) return (err);
+
+ for (l = 0; l < loudness_info_count; l++) {
+ WORD32 match_found_flag = 0;
+ WORD32 p;
+ selection_candidate_info[k].loudness_norm_db_gain_adjusted =
+ loudness_normalization_gain_db[l];
+
+ selection_candidate_info[k]
+ .loudness_norm_db_gain_adjusted = min(
+ selection_candidate_info[k].loudness_norm_db_gain_adjusted,
+ pstr_drc_sel_proc_params_struct->loudness_norm_gain_db_max);
+
+ if (loudness[l] != UNDEFINED_LOUDNESS_VALUE) {
+ selection_candidate_info[k].output_loudness =
+ loudness[l] +
+ selection_candidate_info[k]
+ .loudness_norm_db_gain_adjusted;
+ } else {
+ selection_candidate_info[k].output_loudness =
+ UNDEFINED_LOUDNESS_VALUE;
+ }
-WORD32 impd_drc_set_preselection(ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
- ia_drc_config* pstr_drc_config,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- WORD32 restrict_to_drc_with_album_loudness,
- ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info)
-{
- WORD32 i, j, k, l, d, n, err;
- WORD32 downmix_id_match = 0;
-
-
- WORD32 selection_candidate_step_2_count;
- ia_selection_candidate_info_struct selection_candidate_info_step_2[SELECTION_CANDIDATE_COUNT_MAX];
-
- WORD32 num_downmix_id_requests = pstr_drc_sel_proc_params_struct->num_downmix_id_requests;
- WORD32* requested_dwnmix_id = pstr_drc_sel_proc_params_struct->requested_dwnmix_id;
- FLOAT32 output_peak_level_max = pstr_drc_sel_proc_params_struct->output_peak_level_max;
- WORD32 loudness_deviation_max = pstr_drc_sel_proc_params_struct->loudness_deviation_max;
- WORD32* drc_set_id_valid_flag = pstr_drc_uni_sel_proc->drc_set_id_valid_flag;
- WORD32* eq_set_id_valid_flag = pstr_drc_uni_sel_proc->eq_set_id_valid_flag;
-
- FLOAT32 output_peak_level_min = 1000.0f;
- FLOAT32 adjustment;
- WORD32 loudness_drc_set_id_requested;
-
- WORD32 num_compression_eq_count = 0;
- WORD32 num_compression_eq_id[16];
-
- WORD32 loudness_info_count = 0;
- WORD32 eq_set_id_loudness[16];
- FLOAT32 loudness_normalization_gain_db[16];
- FLOAT32 loudness[16];
- WORD32 peak_info_count;
- WORD32 eq_set_id_Peak[16];
- FLOAT32 signal_peak_level[16];
- WORD32 explicit_peak_information_present[16];
-
- ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc = NULL;
- ia_drc_instructions_struct* str_drc_instruction_str = NULL;
-
- impd_select_drc_coeff3(pstr_drc_config, &str_p_loc_drc_coefficients_uni_drc);
+ for (p = 0; p < peak_info_count; p++) {
+ if (eq_set_id_Peak[p] == eq_set_id_loudness[l]) {
+ if (eq_set_id_valid_flag[eq_set_id_Peak[p]] == 1)
- k=0;
- for (d=0; d<num_downmix_id_requests; d++)
- {
- err = impd_find_eq_set_no_compression(pstr_drc_config,
- requested_dwnmix_id[d],
- &num_compression_eq_count,
- num_compression_eq_id);
- if (err) return (err);
- for (i=0; i<pstr_drc_config->drc_instructions_count_plus; i++)
- {
- downmix_id_match = 0;
- str_drc_instruction_str = &(pstr_drc_config->str_drc_instruction_str[i]);
-
- for (j=0; j<str_drc_instruction_str->dwnmix_id_count; j++)
- {
- if ((str_drc_instruction_str->downmix_id[j] == requested_dwnmix_id[d]) ||
- ((str_drc_instruction_str->downmix_id[j] == ID_FOR_BASE_LAYOUT) && (str_drc_instruction_str->drc_set_id > 0)) ||
- (str_drc_instruction_str->downmix_id[j] == ID_FOR_ANY_DOWNMIX))
- {
- downmix_id_match = 1;
- }
- }
- if (downmix_id_match == 1)
- {
- if (pstr_drc_sel_proc_params_struct->dynamic_range_control_on == 1)
- {
- if ((str_drc_instruction_str->drc_set_effect != EFFECT_BIT_FADE) &&
- (str_drc_instruction_str->drc_set_effect != EFFECT_BIT_DUCK_OTHER) &&
- (str_drc_instruction_str->drc_set_effect != EFFECT_BIT_DUCK_SELF) &&
- (str_drc_instruction_str->drc_set_effect != 0 || str_drc_instruction_str->drc_set_id < 0) &&
- (((str_drc_instruction_str->depends_on_drc_set_present == 0) && (str_drc_instruction_str->no_independent_use == 0)) ||
- (str_drc_instruction_str->depends_on_drc_set_present == 1)) )
{
- WORD32 drc_is_permitted = 1;
- if (str_drc_instruction_str->drc_set_id > 0)
- {
- drc_is_permitted = drc_set_id_valid_flag[str_drc_instruction_str->drc_set_id];
- }
- if (drc_is_permitted == 1)
- {
-
- err = impd_init_loudness_control (pstr_drc_sel_proc_params_struct,
- pstr_loudness_info,
- requested_dwnmix_id[d],
- str_drc_instruction_str->drc_set_id,
-
- num_compression_eq_count,
- num_compression_eq_id,
- &loudness_info_count,
- eq_set_id_loudness,
- loudness_normalization_gain_db,
- loudness);
- if (err) return (err);
-
- err = impd_signal_peak_level_info(pstr_drc_config,
- pstr_loudness_info,
- str_drc_instruction_str,
- requested_dwnmix_id[d],
- pstr_drc_sel_proc_params_struct->album_mode,
- num_compression_eq_count,
- num_compression_eq_id,
- &peak_info_count,
- eq_set_id_Peak,
- signal_peak_level,
- explicit_peak_information_present);
- if (err) return (err);
-
- for (l=0; l<loudness_info_count; l++)
- {
- WORD32 match_found_flag = 0;
- WORD32 p;
- selection_candidate_info[k].loudness_norm_db_gain_adjusted = loudness_normalization_gain_db[l];
-
- selection_candidate_info[k].loudness_norm_db_gain_adjusted = min(selection_candidate_info[k].loudness_norm_db_gain_adjusted, pstr_drc_sel_proc_params_struct->loudness_norm_gain_db_max);
-
- if (loudness[l] != UNDEFINED_LOUDNESS_VALUE)
- {
- selection_candidate_info[k].output_loudness = loudness[l] + selection_candidate_info[k].loudness_norm_db_gain_adjusted;
- }
- else
- {
- selection_candidate_info[k].output_loudness = UNDEFINED_LOUDNESS_VALUE;
- }
-
- for (p=0; p<peak_info_count; p++)
- {
- if (eq_set_id_Peak[p] == eq_set_id_loudness[l])
- {
- if (eq_set_id_valid_flag[eq_set_id_Peak[p]] == 1)
-
-
- {
- match_found_flag = 1;
- break;
- }
- }
- }
- if (match_found_flag == 1)
- {
- selection_candidate_info[k].output_peak_level = signal_peak_level[p] + selection_candidate_info[k].loudness_norm_db_gain_adjusted;
- }
- else
- {
- selection_candidate_info[k].output_peak_level = selection_candidate_info[k].loudness_norm_db_gain_adjusted;
- }
- if ((str_drc_instruction_str->requires_eq == 1) && (eq_set_id_valid_flag[eq_set_id_loudness[l]] == 0)) continue;
- selection_candidate_info[k].drc_instructions_index = i;
- selection_candidate_info[k].downmix_id_request_index = d;
- selection_candidate_info[k].eq_set_id = eq_set_id_loudness[l];
- if (explicit_peak_information_present[p] == 1)
- {
- selection_candidate_info[k].selection_flags = SELECTION_FLAG_EXPLICIT_PEAK_INFO_PRESENT;
- }
- else
- {
- selection_candidate_info[k].selection_flags = 0;
- }
- impd_mixing_level_info(pstr_drc_sel_proc_params_struct,
- pstr_loudness_info,
- requested_dwnmix_id[d],
- str_drc_instruction_str->drc_set_id,
- eq_set_id_loudness[l],
- &selection_candidate_info[k].mixing_level);
- if (str_drc_instruction_str->drc_set_target_loudness_present &&
- ((pstr_drc_sel_proc_params_struct->loudness_normalization_on &&
- str_drc_instruction_str->drc_set_target_loudness_value_upper >= pstr_drc_sel_proc_params_struct->target_loudness &&
- str_drc_instruction_str->drc_set_target_loudness_value_lower < pstr_drc_sel_proc_params_struct->target_loudness) ||
- !pstr_drc_sel_proc_params_struct->loudness_normalization_on)) {
- selection_candidate_info[k].selection_flags |= SELECTION_FLAG_DRC_TARGET_LOUDNESS_MATCH;
- if (!explicit_peak_information_present[p])
- {
- if (pstr_drc_sel_proc_params_struct->loudness_normalization_on) {
- selection_candidate_info[k].output_peak_level = pstr_drc_sel_proc_params_struct->target_loudness - str_drc_instruction_str->drc_set_target_loudness_value_upper;
- }
- else {
- selection_candidate_info[k].output_peak_level = 0.0f;
- }
- }
- }
- if ((selection_candidate_info[k].selection_flags & (SELECTION_FLAG_DRC_TARGET_LOUDNESS_MATCH | SELECTION_FLAG_EXPLICIT_PEAK_INFO_PRESENT) || !str_drc_instruction_str->drc_set_target_loudness_present))
- {
- k++;
- } else {
- }
- }
- }
+ match_found_flag = 1;
+ break;
}
+ }
}
- else
- {
- if (str_drc_instruction_str->drc_set_id < 0)
- {
-
-
-
- err = impd_init_loudness_control (pstr_drc_sel_proc_params_struct,
- pstr_loudness_info,
- requested_dwnmix_id[d],
- str_drc_instruction_str->drc_set_id,
- num_compression_eq_count,
- num_compression_eq_id,
- &loudness_info_count,
- eq_set_id_loudness,
- loudness_normalization_gain_db,
- loudness);
- if (err) return (err);
-
- err = impd_signal_peak_level_info(pstr_drc_config,
- pstr_loudness_info,
- str_drc_instruction_str,
- requested_dwnmix_id[d],
- pstr_drc_sel_proc_params_struct->album_mode,
- num_compression_eq_count,
- num_compression_eq_id,
- &peak_info_count,
- eq_set_id_Peak,
- signal_peak_level,
- explicit_peak_information_present);
- if (err) return (err);
- for (l=0; l<loudness_info_count; l++)
- {
- WORD32 match_found_flag = 0;
- WORD32 p;
- for (p=0; p<peak_info_count; p++)
- {
- if (eq_set_id_Peak[p] == eq_set_id_loudness[l])
- {
- if (eq_set_id_valid_flag[eq_set_id_Peak[p]] == 1)
- {
- match_found_flag = 1;
- break;
- }
- }
- }
- if (match_found_flag == 1)
- {
- adjustment = max(0.0f, signal_peak_level[p] + loudness_normalization_gain_db[l] - pstr_drc_sel_proc_params_struct->output_peak_level_max);
- adjustment = min(adjustment, max(0.0f, loudness_deviation_max));
- selection_candidate_info[k].loudness_norm_db_gain_adjusted = loudness_normalization_gain_db[l] - adjustment;
-
- selection_candidate_info[k].loudness_norm_db_gain_adjusted = min(selection_candidate_info[k].loudness_norm_db_gain_adjusted, pstr_drc_sel_proc_params_struct->loudness_norm_gain_db_max);
-
- selection_candidate_info[k].output_peak_level = signal_peak_level[p] + selection_candidate_info[k].loudness_norm_db_gain_adjusted;
- if (loudness[l] != UNDEFINED_LOUDNESS_VALUE)
- {
- selection_candidate_info[k].output_loudness = loudness[l] + selection_candidate_info[k].loudness_norm_db_gain_adjusted;
- }
- else
- {
- selection_candidate_info[k].output_loudness = UNDEFINED_LOUDNESS_VALUE;
- }
- selection_candidate_info[k].drc_instructions_index = i;
- selection_candidate_info[k].downmix_id_request_index = d;
- selection_candidate_info[k].eq_set_id = eq_set_id_loudness[l];
- if (explicit_peak_information_present[p]==1)
- {
- selection_candidate_info[k].selection_flags = SELECTION_FLAG_EXPLICIT_PEAK_INFO_PRESENT;
- }
- else
- {
- selection_candidate_info[k].selection_flags = 0;
- }
- impd_mixing_level_info(pstr_drc_sel_proc_params_struct,
- pstr_loudness_info,
- requested_dwnmix_id[d],
- str_drc_instruction_str->drc_set_id,
- eq_set_id_loudness[l],
- &selection_candidate_info[k].mixing_level);
- k++;
- }
- }
+ if (match_found_flag == 1) {
+ selection_candidate_info[k].output_peak_level =
+ signal_peak_level[p] +
+ selection_candidate_info[k]
+ .loudness_norm_db_gain_adjusted;
+ } else {
+ selection_candidate_info[k].output_peak_level =
+ selection_candidate_info[k]
+ .loudness_norm_db_gain_adjusted;
+ }
+ if ((str_drc_instruction_str->requires_eq == 1) &&
+ (eq_set_id_valid_flag[eq_set_id_loudness[l]] == 0))
+ continue;
+ selection_candidate_info[k].drc_instructions_index = i;
+ selection_candidate_info[k].downmix_id_request_index = d;
+ selection_candidate_info[k].eq_set_id = eq_set_id_loudness[l];
+ if (explicit_peak_information_present[p] == 1) {
+ selection_candidate_info[k].selection_flags =
+ SELECTION_FLAG_EXPLICIT_PEAK_INFO_PRESENT;
+ } else {
+ selection_candidate_info[k].selection_flags = 0;
+ }
+ impd_mixing_level_info(
+ pstr_drc_sel_proc_params_struct, pstr_loudness_info,
+ requested_dwnmix_id[d], str_drc_instruction_str->drc_set_id,
+ eq_set_id_loudness[l],
+ &selection_candidate_info[k].mixing_level);
+ if (str_drc_instruction_str->drc_set_target_loudness_present &&
+ ((pstr_drc_sel_proc_params_struct
+ ->loudness_normalization_on &&
+ str_drc_instruction_str
+ ->drc_set_target_loudness_value_upper >=
+ pstr_drc_sel_proc_params_struct->target_loudness &&
+ str_drc_instruction_str
+ ->drc_set_target_loudness_value_lower <
+ pstr_drc_sel_proc_params_struct->target_loudness) ||
+ !pstr_drc_sel_proc_params_struct
+ ->loudness_normalization_on)) {
+ selection_candidate_info[k].selection_flags |=
+ SELECTION_FLAG_DRC_TARGET_LOUDNESS_MATCH;
+ if (!explicit_peak_information_present[p]) {
+ if (pstr_drc_sel_proc_params_struct
+ ->loudness_normalization_on) {
+ selection_candidate_info[k].output_peak_level =
+ pstr_drc_sel_proc_params_struct->target_loudness -
+ str_drc_instruction_str
+ ->drc_set_target_loudness_value_upper;
+ } else {
+ selection_candidate_info[k].output_peak_level = 0.0f;
}
+ }
}
- }
- }
- }
- *selection_candidate_count = k;
-
- if (*selection_candidate_count > SELECTION_CANDIDATE_COUNT_MAX)
- {
- return UNEXPECTED_ERROR;
- }
- else if (pstr_drc_sel_proc_params_struct->dynamic_range_control_on == 1)
- {
- n = 0;
- for (k=0; k<*selection_candidate_count; k++)
- {
- str_drc_instruction_str = &(pstr_drc_config->str_drc_instruction_str[selection_candidate_info[k].drc_instructions_index]);
-
- if (pstr_drc_sel_proc_params_struct->eq_set_purpose_request != EQ_PURPOSE_EQ_OFF)
- {
- WORD32 matching_eq_set_count = 0;
- WORD32 matching_eq_instrucions_index[64];
- err = impd_match_eq_set(pstr_drc_config,
- requested_dwnmix_id[selection_candidate_info[k].downmix_id_request_index],
- str_drc_instruction_str->drc_set_id,
- eq_set_id_valid_flag,
- &matching_eq_set_count,
- matching_eq_instrucions_index);
- if (err) return(err);
- for (j=0; j<matching_eq_set_count; j++) {
- memcpy(&selection_candidate_info_step_2[n], &selection_candidate_info[k], sizeof(ia_selection_candidate_info_struct));
- selection_candidate_info_step_2[n].eq_set_id = pstr_drc_config->str_drc_config_ext.str_eq_instructions[matching_eq_instrucions_index[j]].eq_set_id;
- n++;
+ if ((selection_candidate_info[k].selection_flags &
+ (SELECTION_FLAG_DRC_TARGET_LOUDNESS_MATCH |
+ SELECTION_FLAG_EXPLICIT_PEAK_INFO_PRESENT) ||
+ !str_drc_instruction_str
+ ->drc_set_target_loudness_present)) {
+ k++;
+ } else {
}
+ }
}
- if (str_drc_instruction_str->requires_eq == 0) {
- memcpy(&selection_candidate_info_step_2[n], &selection_candidate_info[k], sizeof(ia_selection_candidate_info_struct));
- selection_candidate_info_step_2[n].eq_set_id = 0;
- n++;
- }
- }
- for (k=0; k<n; k++)
- {
- memcpy(&selection_candidate_info[k], &selection_candidate_info_step_2[k], sizeof(ia_selection_candidate_info_struct));
- }
- *selection_candidate_count = n;
- n = 0;
- for (k=0; k<*selection_candidate_count; k++)
- {
- if ((selection_candidate_info[k].selection_flags & SELECTION_FLAG_DRC_TARGET_LOUDNESS_MATCH) &&
- !(selection_candidate_info[k].selection_flags & SELECTION_FLAG_EXPLICIT_PEAK_INFO_PRESENT)) {
- memcpy(&selection_candidate_info_step_2[n], &selection_candidate_info[k], sizeof(ia_selection_candidate_info_struct));
- n++;
- } else {
- if (selection_candidate_info[k].output_peak_level <= output_peak_level_max) {
- memcpy(&selection_candidate_info_step_2[n], &selection_candidate_info[k], sizeof(ia_selection_candidate_info_struct));
- n++;
- }
- if (selection_candidate_info[k].output_peak_level < output_peak_level_min)
- {
- output_peak_level_min = selection_candidate_info[k].output_peak_level;
+ }
+ } else {
+ if (str_drc_instruction_str->drc_set_id < 0) {
+ err = impd_init_loudness_control(
+ pstr_drc_sel_proc_params_struct, pstr_loudness_info,
+ requested_dwnmix_id[d], str_drc_instruction_str->drc_set_id,
+ num_compression_eq_count, num_compression_eq_id,
+ &loudness_info_count, eq_set_id_loudness,
+ loudness_normalization_gain_db, loudness);
+ if (err) return (err);
+ err = impd_signal_peak_level_info(
+ pstr_drc_config, pstr_loudness_info, str_drc_instruction_str,
+ requested_dwnmix_id[d],
+ pstr_drc_sel_proc_params_struct->album_mode,
+ num_compression_eq_count, num_compression_eq_id,
+ &peak_info_count, eq_set_id_Peak, signal_peak_level,
+ explicit_peak_information_present);
+ if (err) return (err);
+ for (l = 0; l < loudness_info_count; l++) {
+ WORD32 match_found_flag = 0;
+ WORD32 p;
+ for (p = 0; p < peak_info_count; p++) {
+ if (eq_set_id_Peak[p] == eq_set_id_loudness[l]) {
+ if (eq_set_id_valid_flag[eq_set_id_Peak[p]] == 1) {
+ match_found_flag = 1;
+ break;
+ }
}
- }
- }
- selection_candidate_step_2_count = n;
- if (selection_candidate_step_2_count == 0)
- {
- n = 0;
- for (k=0; k<*selection_candidate_count; k++)
- {
- if ((selection_candidate_info[k].selection_flags & SELECTION_FLAG_DRC_TARGET_LOUDNESS_MATCH) &&
- (selection_candidate_info[k].selection_flags & SELECTION_FLAG_EXPLICIT_PEAK_INFO_PRESENT)) {
- memcpy(&selection_candidate_info_step_2[n], &selection_candidate_info[k], sizeof(ia_selection_candidate_info_struct));
- n++;
+ }
+ if (match_found_flag == 1) {
+ adjustment = max(
+ 0.0f,
+ signal_peak_level[p] + loudness_normalization_gain_db[l] -
+ pstr_drc_sel_proc_params_struct->output_peak_level_max);
+ adjustment = min(adjustment, max(0.0f, loudness_deviation_max));
+ selection_candidate_info[k].loudness_norm_db_gain_adjusted =
+ loudness_normalization_gain_db[l] - adjustment;
+
+ selection_candidate_info[k]
+ .loudness_norm_db_gain_adjusted = min(
+ selection_candidate_info[k].loudness_norm_db_gain_adjusted,
+ pstr_drc_sel_proc_params_struct->loudness_norm_gain_db_max);
+
+ selection_candidate_info[k].output_peak_level =
+ signal_peak_level[p] +
+ selection_candidate_info[k].loudness_norm_db_gain_adjusted;
+ if (loudness[l] != UNDEFINED_LOUDNESS_VALUE) {
+ selection_candidate_info[k].output_loudness =
+ loudness[l] +
+ selection_candidate_info[k]
+ .loudness_norm_db_gain_adjusted;
+ } else {
+ selection_candidate_info[k].output_loudness =
+ UNDEFINED_LOUDNESS_VALUE;
}
- }
- selection_candidate_step_2_count = n;
- }
- if (selection_candidate_step_2_count == 0)
- {
- n = 0;
- for (k=0; k<*selection_candidate_count; k++)
- {
- if (selection_candidate_info_step_2[k].output_peak_level < output_peak_level_min + 1.0f)
- {
- memcpy(&selection_candidate_info_step_2[n], &selection_candidate_info[k], sizeof(ia_selection_candidate_info_struct));
- adjustment = max(0.0f, selection_candidate_info_step_2[n].output_peak_level - output_peak_level_max);
- adjustment = min(adjustment, max(0.0f, loudness_deviation_max));
- selection_candidate_info_step_2[n].loudness_norm_db_gain_adjusted -= adjustment;
- selection_candidate_info_step_2[n].output_peak_level -= adjustment;
- selection_candidate_info_step_2[n].output_loudness -= adjustment;
- n++;
+ selection_candidate_info[k].drc_instructions_index = i;
+ selection_candidate_info[k].downmix_id_request_index = d;
+ selection_candidate_info[k].eq_set_id = eq_set_id_loudness[l];
+ if (explicit_peak_information_present[p] == 1) {
+ selection_candidate_info[k].selection_flags =
+ SELECTION_FLAG_EXPLICIT_PEAK_INFO_PRESENT;
+ } else {
+ selection_candidate_info[k].selection_flags = 0;
}
+ impd_mixing_level_info(
+ pstr_drc_sel_proc_params_struct, pstr_loudness_info,
+ requested_dwnmix_id[d], str_drc_instruction_str->drc_set_id,
+ eq_set_id_loudness[l],
+ &selection_candidate_info[k].mixing_level);
+ k++;
+ }
}
- selection_candidate_step_2_count = n;
+ }
}
+ }
+ }
+ }
+ *selection_candidate_count = k;
- for (n=0; n<selection_candidate_step_2_count; n++)
- {
- memcpy(&selection_candidate_info[n], &selection_candidate_info_step_2[n], sizeof(ia_selection_candidate_info_struct));
+ if (*selection_candidate_count > SELECTION_CANDIDATE_COUNT_MAX) {
+ return UNEXPECTED_ERROR;
+ } else if (pstr_drc_sel_proc_params_struct->dynamic_range_control_on == 1) {
+ n = 0;
+ for (k = 0; k < *selection_candidate_count; k++) {
+ str_drc_instruction_str =
+ &(pstr_drc_config->str_drc_instruction_str
+ [selection_candidate_info[k].drc_instructions_index]);
+
+ if (pstr_drc_sel_proc_params_struct->eq_set_purpose_request !=
+ EQ_PURPOSE_EQ_OFF) {
+ WORD32 matching_eq_set_count = 0;
+ WORD32 matching_eq_instrucions_index[64];
+ err = impd_match_eq_set(
+ pstr_drc_config, requested_dwnmix_id[selection_candidate_info[k]
+ .downmix_id_request_index],
+ str_drc_instruction_str->drc_set_id, eq_set_id_valid_flag,
+ &matching_eq_set_count, matching_eq_instrucions_index);
+ if (err) return (err);
+ for (j = 0; j < matching_eq_set_count; j++) {
+ memcpy(&selection_candidate_info_step_2[n],
+ &selection_candidate_info[k],
+ sizeof(ia_selection_candidate_info_struct));
+ selection_candidate_info_step_2[n].eq_set_id =
+ pstr_drc_config->str_drc_config_ext
+ .str_eq_instructions[matching_eq_instrucions_index[j]]
+ .eq_set_id;
+ n++;
}
- *selection_candidate_count = selection_candidate_step_2_count;
+ }
+ if (str_drc_instruction_str->requires_eq == 0) {
+ memcpy(&selection_candidate_info_step_2[n],
+ &selection_candidate_info[k],
+ sizeof(ia_selection_candidate_info_struct));
+ selection_candidate_info_step_2[n].eq_set_id = 0;
+ n++;
+ }
+ }
+ for (k = 0; k < n; k++) {
+ memcpy(&selection_candidate_info[k], &selection_candidate_info_step_2[k],
+ sizeof(ia_selection_candidate_info_struct));
+ }
+ *selection_candidate_count = n;
+ n = 0;
+ for (k = 0; k < *selection_candidate_count; k++) {
+ if ((selection_candidate_info[k].selection_flags &
+ SELECTION_FLAG_DRC_TARGET_LOUDNESS_MATCH) &&
+ !(selection_candidate_info[k].selection_flags &
+ SELECTION_FLAG_EXPLICIT_PEAK_INFO_PRESENT)) {
+ memcpy(&selection_candidate_info_step_2[n],
+ &selection_candidate_info[k],
+ sizeof(ia_selection_candidate_info_struct));
+ n++;
+ } else {
+ if (selection_candidate_info[k].output_peak_level <=
+ output_peak_level_max) {
+ memcpy(&selection_candidate_info_step_2[n],
+ &selection_candidate_info[k],
+ sizeof(ia_selection_candidate_info_struct));
+ n++;
+ }
+ if (selection_candidate_info[k].output_peak_level <
+ output_peak_level_min) {
+ output_peak_level_min = selection_candidate_info[k].output_peak_level;
+ }
+ }
+ }
+ selection_candidate_step_2_count = n;
+ if (selection_candidate_step_2_count == 0) {
+ n = 0;
+ for (k = 0; k < *selection_candidate_count; k++) {
+ if ((selection_candidate_info[k].selection_flags &
+ SELECTION_FLAG_DRC_TARGET_LOUDNESS_MATCH) &&
+ (selection_candidate_info[k].selection_flags &
+ SELECTION_FLAG_EXPLICIT_PEAK_INFO_PRESENT)) {
+ memcpy(&selection_candidate_info_step_2[n],
+ &selection_candidate_info[k],
+ sizeof(ia_selection_candidate_info_struct));
+ n++;
+ }
+ }
+ selection_candidate_step_2_count = n;
+ }
+ if (selection_candidate_step_2_count == 0) {
+ n = 0;
+ for (k = 0; k < *selection_candidate_count; k++) {
+ if (selection_candidate_info_step_2[k].output_peak_level <
+ output_peak_level_min + 1.0f) {
+ memcpy(&selection_candidate_info_step_2[n],
+ &selection_candidate_info[k],
+ sizeof(ia_selection_candidate_info_struct));
+ adjustment =
+ max(0.0f, selection_candidate_info_step_2[n].output_peak_level -
+ output_peak_level_max);
+ adjustment = min(adjustment, max(0.0f, loudness_deviation_max));
+ selection_candidate_info_step_2[n].loudness_norm_db_gain_adjusted -=
+ adjustment;
+ selection_candidate_info_step_2[n].output_peak_level -= adjustment;
+ selection_candidate_info_step_2[n].output_loudness -= adjustment;
+ n++;
+ }
+ }
+ selection_candidate_step_2_count = n;
}
- if (restrict_to_drc_with_album_loudness == 1)
- {
- j = 0;
- for (k=0; k<*selection_candidate_count; k++)
- {
- loudness_drc_set_id_requested = max(0, pstr_drc_config->str_drc_instruction_str[selection_candidate_info[k].drc_instructions_index].drc_set_id);
- for (n=0; n<pstr_loudness_info->loudness_info_album_count; n++)
- {
- if (loudness_drc_set_id_requested == pstr_loudness_info->str_loudness_info_album[n].drc_set_id)
- {
- memcpy(&selection_candidate_info[j], &selection_candidate_info[k], sizeof(ia_selection_candidate_info_struct));
- j++;
- break;
- }
- }
+ for (n = 0; n < selection_candidate_step_2_count; n++) {
+ memcpy(&selection_candidate_info[n], &selection_candidate_info_step_2[n],
+ sizeof(ia_selection_candidate_info_struct));
+ }
+ *selection_candidate_count = selection_candidate_step_2_count;
+ }
+
+ if (restrict_to_drc_with_album_loudness == 1) {
+ j = 0;
+ for (k = 0; k < *selection_candidate_count; k++) {
+ loudness_drc_set_id_requested =
+ max(0, pstr_drc_config
+ ->str_drc_instruction_str[selection_candidate_info[k]
+ .drc_instructions_index]
+ .drc_set_id);
+ for (n = 0; n < pstr_loudness_info->loudness_info_album_count; n++) {
+ if (loudness_drc_set_id_requested ==
+ pstr_loudness_info->str_loudness_info_album[n].drc_set_id) {
+ memcpy(&selection_candidate_info[j], &selection_candidate_info[k],
+ sizeof(ia_selection_candidate_info_struct));
+ j++;
+ break;
}
- *selection_candidate_count = j;
+ }
}
- return (0);
+ *selection_candidate_count = j;
+ }
+ return (0);
}
-WORD32 impd_drc_set_final_selection(ia_drc_config* pstr_drc_config,
- ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info
- , WORD32* eq_set_id_valid_flag
- )
-{
- WORD32 k, i, n, err;
- WORD32 selection_candidate_step_2_count;
- ia_selection_candidate_info_struct selection_candidate_info_step_2[SELECTION_CANDIDATE_COUNT_MAX];
- WORD32 drc_set_id_max;
- FLOAT32 output_level_max;
- FLOAT32 output_level_min;
- WORD32 effect_count, effect_count_min;
- WORD32 effect_types_request_table_size;
- WORD32 drc_set_target_loudness_val_upper_min;
- ia_drc_instructions_struct* str_drc_instruction_str;
- ia_drc_instructions_struct* drc_instructions_dependent;
-
-
- if (pstr_drc_sel_proc_params_struct->eq_set_purpose_request > 0)
- {
- WORD32 eq_purpose_requested = pstr_drc_sel_proc_params_struct->eq_set_purpose_request;
-
- impd_match_eq_set_purpose(pstr_drc_config,
- eq_purpose_requested,
- eq_set_id_valid_flag,
- selection_candidate_count,
- selection_candidate_info,
- selection_candidate_info_step_2);
- }
+WORD32 impd_drc_set_final_selection(
+ ia_drc_config* pstr_drc_config,
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
+ WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info,
+ WORD32* eq_set_id_valid_flag) {
+ WORD32 k, i, n, err;
+ WORD32 selection_candidate_step_2_count;
+ ia_selection_candidate_info_struct
+ selection_candidate_info_step_2[SELECTION_CANDIDATE_COUNT_MAX];
+ WORD32 drc_set_id_max;
+ FLOAT32 output_level_max;
+ FLOAT32 output_level_min;
+ WORD32 effect_count, effect_count_min;
+ WORD32 effect_types_request_table_size;
+ WORD32 drc_set_target_loudness_val_upper_min;
+ ia_drc_instructions_struct* str_drc_instruction_str;
+ ia_drc_instructions_struct* drc_instructions_dependent;
+
+ if (pstr_drc_sel_proc_params_struct->eq_set_purpose_request > 0) {
+ WORD32 eq_purpose_requested =
+ pstr_drc_sel_proc_params_struct->eq_set_purpose_request;
+
+ impd_match_eq_set_purpose(pstr_drc_config, eq_purpose_requested,
+ eq_set_id_valid_flag, selection_candidate_count,
+ selection_candidate_info,
+ selection_candidate_info_step_2);
+ }
+
+ output_level_min = 10000.0f;
+ k = 0;
+ for (i = 0; i < *selection_candidate_count; i++) {
+ if (output_level_min >= selection_candidate_info[i].output_peak_level) {
+ if (output_level_min > selection_candidate_info[i].output_peak_level) {
+ output_level_min = selection_candidate_info[i].output_peak_level;
+ k = 0;
+ }
+ memcpy(&selection_candidate_info_step_2[k], &selection_candidate_info[i],
+ sizeof(ia_selection_candidate_info_struct));
+ k++;
+ }
+ }
+ selection_candidate_step_2_count = k;
- output_level_min = 10000.0f;
+ if (output_level_min <= 0.0f) {
+ selection_candidate_step_2_count = *selection_candidate_count;
k = 0;
- for (i=0; i < *selection_candidate_count; i++)
- {
- if (output_level_min >= selection_candidate_info[i].output_peak_level)
- {
- if (output_level_min > selection_candidate_info[i].output_peak_level)
- {
- output_level_min = selection_candidate_info[i].output_peak_level;
- k = 0;
- }
- memcpy(&selection_candidate_info_step_2[k], &selection_candidate_info[i], sizeof(ia_selection_candidate_info_struct));
- k++;
- }
+ for (i = 0; i < selection_candidate_step_2_count; i++) {
+ if (selection_candidate_info[i].output_peak_level <= 0.0f) {
+ memcpy(&selection_candidate_info_step_2[k],
+ &selection_candidate_info[i],
+ sizeof(ia_selection_candidate_info_struct));
+ k++;
+ }
}
selection_candidate_step_2_count = k;
- if (output_level_min <= 0.0f )
- {
- selection_candidate_step_2_count = *selection_candidate_count;
- k = 0;
- for (i=0; i<selection_candidate_step_2_count; i++) {
- if (selection_candidate_info[i].output_peak_level <= 0.0f)
- {
- memcpy(&selection_candidate_info_step_2[k], &selection_candidate_info[i], sizeof(ia_selection_candidate_info_struct));
- k++;
- }
+ k = 0;
+ for (i = 0; i < selection_candidate_step_2_count; i++) {
+ str_drc_instruction_str =
+ &(pstr_drc_config->str_drc_instruction_str
+ [selection_candidate_info_step_2[i].drc_instructions_index]);
+ for (n = 0; n < str_drc_instruction_str->dwnmix_id_count; n++) {
+ if (pstr_drc_sel_proc_params_struct->requested_dwnmix_id
+ [selection_candidate_info_step_2[i].downmix_id_request_index] ==
+ str_drc_instruction_str->downmix_id[n]) {
+ memcpy(&selection_candidate_info_step_2[k],
+ &selection_candidate_info_step_2[i],
+ sizeof(ia_selection_candidate_info_struct));
+ k++;
}
- selection_candidate_step_2_count = k;
+ }
+ }
+ if (k > 0) {
+ selection_candidate_step_2_count = k;
+ }
- k = 0;
- for (i=0; i<selection_candidate_step_2_count; i++) {
- str_drc_instruction_str = &(pstr_drc_config->str_drc_instruction_str[selection_candidate_info_step_2[i].drc_instructions_index]);
- for (n=0; n<str_drc_instruction_str->dwnmix_id_count; n++) {
- if (pstr_drc_sel_proc_params_struct->requested_dwnmix_id[selection_candidate_info_step_2[i].downmix_id_request_index] == str_drc_instruction_str->downmix_id[n])
- {
- memcpy(&selection_candidate_info_step_2[k], &selection_candidate_info_step_2[i], sizeof(ia_selection_candidate_info_struct));
- k++;
- }
- }
- }
- if (k > 0)
- {
- selection_candidate_step_2_count = k;
- }
+ effect_types_request_table_size =
+ sizeof(effect_types_request_table) / sizeof(WORD32);
+ effect_count_min = 100;
+ k = 0;
+ for (i = 0; i < selection_candidate_step_2_count; i++) {
+ str_drc_instruction_str =
+ &(pstr_drc_config->str_drc_instruction_str
+ [selection_candidate_info_step_2[i].drc_instructions_index]);
+ effect_count = 0;
+ if (str_drc_instruction_str->depends_on_drc_set_present == 1) {
+ err = impd_get_dependent_drc_instructions(pstr_drc_config,
+ str_drc_instruction_str,
+ &drc_instructions_dependent);
+ if (err) return (err);
- effect_types_request_table_size = sizeof(effect_types_request_table) / sizeof(WORD32);
- effect_count_min = 100;
- k=0;
- for (i=0; i < selection_candidate_step_2_count; i++)
- {
- str_drc_instruction_str = &(pstr_drc_config->str_drc_instruction_str[selection_candidate_info_step_2[i].drc_instructions_index]);
- effect_count = 0;
- if (str_drc_instruction_str->depends_on_drc_set_present == 1)
- {
- err = impd_get_dependent_drc_instructions(pstr_drc_config, str_drc_instruction_str, &drc_instructions_dependent);
- if (err) return (err);
-
- for (n=0; n<effect_types_request_table_size; n++)
- {
- if (effect_types_request_table[n] != EFFECT_BIT_GENERAL_COMPR)
- {
- if (((str_drc_instruction_str->drc_set_effect & effect_types_request_table[n]) != 0x0) ||
- ((drc_instructions_dependent->drc_set_effect & effect_types_request_table[n]) != 0x0))
- {
- effect_count++;
- }
- }
- }
+ for (n = 0; n < effect_types_request_table_size; n++) {
+ if (effect_types_request_table[n] != EFFECT_BIT_GENERAL_COMPR) {
+ if (((str_drc_instruction_str->drc_set_effect &
+ effect_types_request_table[n]) != 0x0) ||
+ ((drc_instructions_dependent->drc_set_effect &
+ effect_types_request_table[n]) != 0x0)) {
+ effect_count++;
}
- else
- {
- for (n=0; n<effect_types_request_table_size; n++)
- {
- if (effect_types_request_table[n] != EFFECT_BIT_GENERAL_COMPR)
- {
- if ((str_drc_instruction_str->drc_set_effect & effect_types_request_table[n]) != 0x0)
- {
- effect_count++;
- }
- }
- }
- }
- if (effect_count_min >= effect_count)
- {
- if (effect_count_min > effect_count)
- {
- effect_count_min = effect_count;
- k = 0;
- }
- memcpy(&selection_candidate_info_step_2[k], &selection_candidate_info_step_2[i], sizeof(ia_selection_candidate_info_struct));
- k++;
+ }
+ }
+ } else {
+ for (n = 0; n < effect_types_request_table_size; n++) {
+ if (effect_types_request_table[n] != EFFECT_BIT_GENERAL_COMPR) {
+ if ((str_drc_instruction_str->drc_set_effect &
+ effect_types_request_table[n]) != 0x0) {
+ effect_count++;
}
+ }
}
- selection_candidate_step_2_count = k;
+ }
+ if (effect_count_min >= effect_count) {
+ if (effect_count_min > effect_count) {
+ effect_count_min = effect_count;
+ k = 0;
+ }
+ memcpy(&selection_candidate_info_step_2[k],
+ &selection_candidate_info_step_2[i],
+ sizeof(ia_selection_candidate_info_struct));
+ k++;
+ }
+ }
+ selection_candidate_step_2_count = k;
- drc_set_target_loudness_val_upper_min = 100;
- k = 0;
- for (i=0; i<selection_candidate_step_2_count; i++) {
- if (selection_candidate_info_step_2[i].selection_flags & SELECTION_FLAG_DRC_TARGET_LOUDNESS_MATCH) {
- k++;
- }
+ drc_set_target_loudness_val_upper_min = 100;
+ k = 0;
+ for (i = 0; i < selection_candidate_step_2_count; i++) {
+ if (selection_candidate_info_step_2[i].selection_flags &
+ SELECTION_FLAG_DRC_TARGET_LOUDNESS_MATCH) {
+ k++;
+ }
+ }
+ if (k != 0 && k != selection_candidate_step_2_count) {
+ k = 0;
+ for (i = 0; i < selection_candidate_step_2_count; i++) {
+ if (!(selection_candidate_info_step_2[i].selection_flags &
+ SELECTION_FLAG_DRC_TARGET_LOUDNESS_MATCH)) {
+ memcpy(&selection_candidate_info_step_2[k],
+ &selection_candidate_info_step_2[i],
+ sizeof(ia_selection_candidate_info_struct));
+ k++;
}
- if (k != 0 && k != selection_candidate_step_2_count)
- {
- k = 0;
- for (i=0; i<selection_candidate_step_2_count; i++) {
- if (!(selection_candidate_info_step_2[i].selection_flags & SELECTION_FLAG_DRC_TARGET_LOUDNESS_MATCH)) {
- memcpy(&selection_candidate_info_step_2[k], &selection_candidate_info_step_2[i], sizeof(ia_selection_candidate_info_struct));
- k++;
- }
- }
- selection_candidate_step_2_count = k;
+ }
+ selection_candidate_step_2_count = k;
+ } else if (k == selection_candidate_step_2_count) {
+ k = 0;
+ for (i = 0; i < selection_candidate_step_2_count; i++) {
+ str_drc_instruction_str =
+ &(pstr_drc_config->str_drc_instruction_str
+ [selection_candidate_info_step_2[i].drc_instructions_index]);
+ if (str_drc_instruction_str->drc_set_target_loudness_present != 1) {
+ return UNEXPECTED_ERROR;
}
- else if (k == selection_candidate_step_2_count)
- {
+ if (drc_set_target_loudness_val_upper_min >=
+ str_drc_instruction_str->drc_set_target_loudness_value_upper) {
+ if (drc_set_target_loudness_val_upper_min >
+ str_drc_instruction_str->drc_set_target_loudness_value_upper) {
+ drc_set_target_loudness_val_upper_min =
+ str_drc_instruction_str->drc_set_target_loudness_value_upper;
k = 0;
- for (i=0; i<selection_candidate_step_2_count; i++)
- {
- str_drc_instruction_str = &(pstr_drc_config->str_drc_instruction_str[selection_candidate_info_step_2[i].drc_instructions_index]);
- if (str_drc_instruction_str->drc_set_target_loudness_present != 1)
- {
- return UNEXPECTED_ERROR;
- }
- if (drc_set_target_loudness_val_upper_min >= str_drc_instruction_str->drc_set_target_loudness_value_upper)
- {
- if (drc_set_target_loudness_val_upper_min > str_drc_instruction_str->drc_set_target_loudness_value_upper)
- {
- drc_set_target_loudness_val_upper_min = str_drc_instruction_str->drc_set_target_loudness_value_upper;
- k = 0;
- }
- memcpy(&selection_candidate_info_step_2[k], &selection_candidate_info_step_2[i], sizeof(ia_selection_candidate_info_struct));
- k++;
- }
- }
- selection_candidate_step_2_count = k;
+ }
+ memcpy(&selection_candidate_info_step_2[k],
+ &selection_candidate_info_step_2[i],
+ sizeof(ia_selection_candidate_info_struct));
+ k++;
}
+ }
+ selection_candidate_step_2_count = k;
+ }
- k = 0;
- for (i=0; i<selection_candidate_step_2_count; i++) {
- str_drc_instruction_str = &(pstr_drc_config->str_drc_instruction_str[selection_candidate_info_step_2[i].drc_instructions_index]);
- if (str_drc_instruction_str->drc_set_target_loudness_present && pstr_drc_sel_proc_params_struct->loudness_normalization_on && str_drc_instruction_str->drc_set_target_loudness_value_upper >= pstr_drc_sel_proc_params_struct->target_loudness && str_drc_instruction_str->drc_set_target_loudness_value_lower < pstr_drc_sel_proc_params_struct->target_loudness) {
- k++;
- }
+ k = 0;
+ for (i = 0; i < selection_candidate_step_2_count; i++) {
+ str_drc_instruction_str =
+ &(pstr_drc_config->str_drc_instruction_str
+ [selection_candidate_info_step_2[i].drc_instructions_index]);
+ if (str_drc_instruction_str->drc_set_target_loudness_present &&
+ pstr_drc_sel_proc_params_struct->loudness_normalization_on &&
+ str_drc_instruction_str->drc_set_target_loudness_value_upper >=
+ pstr_drc_sel_proc_params_struct->target_loudness &&
+ str_drc_instruction_str->drc_set_target_loudness_value_lower <
+ pstr_drc_sel_proc_params_struct->target_loudness) {
+ k++;
+ }
+ }
+ if (k != 0 && k != selection_candidate_step_2_count) {
+ k = 0;
+ for (i = 0; i < selection_candidate_step_2_count; i++) {
+ str_drc_instruction_str =
+ &(pstr_drc_config->str_drc_instruction_str
+ [selection_candidate_info_step_2[i].drc_instructions_index]);
+ if (str_drc_instruction_str->drc_set_target_loudness_present &&
+ pstr_drc_sel_proc_params_struct->loudness_normalization_on &&
+ str_drc_instruction_str->drc_set_target_loudness_value_upper >=
+ pstr_drc_sel_proc_params_struct->target_loudness &&
+ str_drc_instruction_str->drc_set_target_loudness_value_lower <
+ pstr_drc_sel_proc_params_struct->target_loudness) {
+ memcpy(&selection_candidate_info_step_2[k],
+ &selection_candidate_info_step_2[i],
+ sizeof(ia_selection_candidate_info_struct));
+ k++;
}
- if (k != 0 && k != selection_candidate_step_2_count)
- {
- k = 0;
- for (i=0; i<selection_candidate_step_2_count; i++) {
- str_drc_instruction_str = &(pstr_drc_config->str_drc_instruction_str[selection_candidate_info_step_2[i].drc_instructions_index]);
- if (str_drc_instruction_str->drc_set_target_loudness_present && pstr_drc_sel_proc_params_struct->loudness_normalization_on && str_drc_instruction_str->drc_set_target_loudness_value_upper >= pstr_drc_sel_proc_params_struct->target_loudness && str_drc_instruction_str->drc_set_target_loudness_value_lower < pstr_drc_sel_proc_params_struct->target_loudness) {
- memcpy(&selection_candidate_info_step_2[k], &selection_candidate_info_step_2[i], sizeof(ia_selection_candidate_info_struct));
- k++;
- }
- }
- selection_candidate_step_2_count = k;
- drc_set_target_loudness_val_upper_min = 100;
- k = 0;
- for (i=0; i<selection_candidate_step_2_count; i++)
- {
- str_drc_instruction_str = &(pstr_drc_config->str_drc_instruction_str[selection_candidate_info_step_2[i].drc_instructions_index]);
- if (str_drc_instruction_str->drc_set_target_loudness_present != 1)
- {
- return UNEXPECTED_ERROR;
- }
- if (drc_set_target_loudness_val_upper_min >= str_drc_instruction_str->drc_set_target_loudness_value_upper)
- {
- if (drc_set_target_loudness_val_upper_min > str_drc_instruction_str->drc_set_target_loudness_value_upper)
- {
- drc_set_target_loudness_val_upper_min = str_drc_instruction_str->drc_set_target_loudness_value_upper;
- k = 0;
- }
- memcpy(&selection_candidate_info_step_2[k], &selection_candidate_info_step_2[i], sizeof(ia_selection_candidate_info_struct));
- k++;
- }
- }
- selection_candidate_step_2_count = k;
+ }
+ selection_candidate_step_2_count = k;
+ drc_set_target_loudness_val_upper_min = 100;
+ k = 0;
+ for (i = 0; i < selection_candidate_step_2_count; i++) {
+ str_drc_instruction_str =
+ &(pstr_drc_config->str_drc_instruction_str
+ [selection_candidate_info_step_2[i].drc_instructions_index]);
+ if (str_drc_instruction_str->drc_set_target_loudness_present != 1) {
+ return UNEXPECTED_ERROR;
}
- else if (k == selection_candidate_step_2_count)
- {
- drc_set_target_loudness_val_upper_min = 100;
+ if (drc_set_target_loudness_val_upper_min >=
+ str_drc_instruction_str->drc_set_target_loudness_value_upper) {
+ if (drc_set_target_loudness_val_upper_min >
+ str_drc_instruction_str->drc_set_target_loudness_value_upper) {
+ drc_set_target_loudness_val_upper_min =
+ str_drc_instruction_str->drc_set_target_loudness_value_upper;
k = 0;
- for (i=0; i<selection_candidate_step_2_count; i++)
- {
- str_drc_instruction_str = &(pstr_drc_config->str_drc_instruction_str[selection_candidate_info_step_2[i].drc_instructions_index]);
- if (str_drc_instruction_str->drc_set_target_loudness_present != 1)
- {
- return UNEXPECTED_ERROR;
- }
- if (drc_set_target_loudness_val_upper_min >= str_drc_instruction_str->drc_set_target_loudness_value_upper)
- {
- if (drc_set_target_loudness_val_upper_min > str_drc_instruction_str->drc_set_target_loudness_value_upper)
- {
- drc_set_target_loudness_val_upper_min = str_drc_instruction_str->drc_set_target_loudness_value_upper;
- k = 0;
- }
- memcpy(&selection_candidate_info_step_2[k], &selection_candidate_info_step_2[i], sizeof(ia_selection_candidate_info_struct));
- k++;
- }
- }
- selection_candidate_step_2_count = k;
+ }
+ memcpy(&selection_candidate_info_step_2[k],
+ &selection_candidate_info_step_2[i],
+ sizeof(ia_selection_candidate_info_struct));
+ k++;
}
- k = 0;
- output_level_max = -1000.0f;
- for (i=0; i < selection_candidate_step_2_count; i++)
- {
- if ((selection_candidate_info_step_2[i].output_peak_level <= 0.0f) && (output_level_max <= selection_candidate_info_step_2[i].output_peak_level))
- {
- if (output_level_max < selection_candidate_info_step_2[i].output_peak_level)
- {
- output_level_max = selection_candidate_info_step_2[i].output_peak_level;
- k = 0;
- }
- memcpy(&selection_candidate_info_step_2[k], &selection_candidate_info_step_2[i], sizeof(ia_selection_candidate_info_struct));
- k++;
- output_level_max = selection_candidate_info_step_2[i].output_peak_level;
- }
+ }
+ selection_candidate_step_2_count = k;
+ } else if (k == selection_candidate_step_2_count) {
+ drc_set_target_loudness_val_upper_min = 100;
+ k = 0;
+ for (i = 0; i < selection_candidate_step_2_count; i++) {
+ str_drc_instruction_str =
+ &(pstr_drc_config->str_drc_instruction_str
+ [selection_candidate_info_step_2[i].drc_instructions_index]);
+ if (str_drc_instruction_str->drc_set_target_loudness_present != 1) {
+ return UNEXPECTED_ERROR;
}
- selection_candidate_step_2_count = k;
+ if (drc_set_target_loudness_val_upper_min >=
+ str_drc_instruction_str->drc_set_target_loudness_value_upper) {
+ if (drc_set_target_loudness_val_upper_min >
+ str_drc_instruction_str->drc_set_target_loudness_value_upper) {
+ drc_set_target_loudness_val_upper_min =
+ str_drc_instruction_str->drc_set_target_loudness_value_upper;
+ k = 0;
+ }
+ memcpy(&selection_candidate_info_step_2[k],
+ &selection_candidate_info_step_2[i],
+ sizeof(ia_selection_candidate_info_struct));
+ k++;
}
-
- drc_set_id_max = -1000;
- for (i=0; i < selection_candidate_step_2_count; i++)
- {
- str_drc_instruction_str = &(pstr_drc_config->str_drc_instruction_str[selection_candidate_info_step_2[i].drc_instructions_index]);
- if (drc_set_id_max < str_drc_instruction_str->drc_set_id)
- {
- drc_set_id_max = str_drc_instruction_str->drc_set_id;
- memcpy(&selection_candidate_info_step_2[0], &selection_candidate_info_step_2[i], sizeof(ia_selection_candidate_info_struct));
- }
+ }
+ selection_candidate_step_2_count = k;
+ }
+ k = 0;
+ output_level_max = -1000.0f;
+ for (i = 0; i < selection_candidate_step_2_count; i++) {
+ if ((selection_candidate_info_step_2[i].output_peak_level <= 0.0f) &&
+ (output_level_max <=
+ selection_candidate_info_step_2[i].output_peak_level)) {
+ if (output_level_max <
+ selection_candidate_info_step_2[i].output_peak_level) {
+ output_level_max =
+ selection_candidate_info_step_2[i].output_peak_level;
+ k = 0;
}
- memcpy(&selection_candidate_info[0], &selection_candidate_info_step_2[0], sizeof(ia_selection_candidate_info_struct));
- *selection_candidate_count = 1;
+ memcpy(&selection_candidate_info_step_2[k],
+ &selection_candidate_info_step_2[i],
+ sizeof(ia_selection_candidate_info_struct));
+ k++;
+ output_level_max = selection_candidate_info_step_2[i].output_peak_level;
+ }
+ }
+ selection_candidate_step_2_count = k;
+ }
+
+ drc_set_id_max = -1000;
+ for (i = 0; i < selection_candidate_step_2_count; i++) {
+ str_drc_instruction_str =
+ &(pstr_drc_config->str_drc_instruction_str
+ [selection_candidate_info_step_2[i].drc_instructions_index]);
+ if (drc_set_id_max < str_drc_instruction_str->drc_set_id) {
+ drc_set_id_max = str_drc_instruction_str->drc_set_id;
+ memcpy(&selection_candidate_info_step_2[0],
+ &selection_candidate_info_step_2[i],
+ sizeof(ia_selection_candidate_info_struct));
+ }
+ }
+ memcpy(&selection_candidate_info[0], &selection_candidate_info_step_2[0],
+ sizeof(ia_selection_candidate_info_struct));
+ *selection_candidate_count = 1;
- return 0;
+ return 0;
}
WORD32 impd_select_drc_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- WORD32* drc_set_id_selected
- , WORD32* eq_set_id_selected
- , WORD32* loud_eq_id_sel
- )
-{
- WORD32 i, err;
-
- ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct = &pstr_drc_uni_sel_proc->uni_drc_sel_proc_params;
- ia_drc_config* pstr_drc_config = &pstr_drc_uni_sel_proc->drc_config;
- ia_drc_loudness_info_set_struct* pstr_loudness_info = &pstr_drc_uni_sel_proc->loudness_info_set;
-
- WORD32 selection_candidate_count = 0;
- WORD32 restrict_to_drc_with_album_loudness = 0;
- ia_selection_candidate_info_struct selection_candidate_info[SELECTION_CANDIDATE_COUNT_MAX];
-
-// WORD32 selected_eq_set_count = 0;
-
- if (pstr_drc_sel_proc_params_struct->album_mode == 1)
- {
- restrict_to_drc_with_album_loudness = 1;
+ WORD32* drc_set_id_selected,
+ WORD32* eq_set_id_selected, WORD32* loud_eq_id_sel) {
+ WORD32 i, err;
+
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct =
+ &pstr_drc_uni_sel_proc->uni_drc_sel_proc_params;
+ ia_drc_config* pstr_drc_config = &pstr_drc_uni_sel_proc->drc_config;
+ ia_drc_loudness_info_set_struct* pstr_loudness_info =
+ &pstr_drc_uni_sel_proc->loudness_info_set;
+
+ WORD32 selection_candidate_count = 0;
+ WORD32 restrict_to_drc_with_album_loudness = 0;
+ ia_selection_candidate_info_struct
+ selection_candidate_info[SELECTION_CANDIDATE_COUNT_MAX];
+
+ // WORD32 selected_eq_set_count = 0;
+
+ if (pstr_drc_sel_proc_params_struct->album_mode == 1) {
+ restrict_to_drc_with_album_loudness = 1;
+ }
+
+ while (!selection_candidate_count) {
+ impd_drc_set_preselection(
+ pstr_drc_sel_proc_params_struct, pstr_drc_config, pstr_loudness_info,
+ restrict_to_drc_with_album_loudness, pstr_drc_uni_sel_proc,
+ &selection_candidate_count, selection_candidate_info);
+
+ if (selection_candidate_count == 0) {
+ if (restrict_to_drc_with_album_loudness == 1) {
+ restrict_to_drc_with_album_loudness = 0;
+ continue;
+ } else {
+ return (UNEXPECTED_ERROR);
+ }
}
- while (!selection_candidate_count)
- {
- impd_drc_set_preselection(pstr_drc_sel_proc_params_struct,
- pstr_drc_config,
- pstr_loudness_info,
- restrict_to_drc_with_album_loudness,
- pstr_drc_uni_sel_proc,
- &selection_candidate_count,
- selection_candidate_info);
+ err = impd_validate_requested_drc_feature(pstr_drc_sel_proc_params_struct);
+ if (err) return (err);
- if (selection_candidate_count == 0)
- {
- if (restrict_to_drc_with_album_loudness == 1)
- {
- restrict_to_drc_with_album_loudness = 0;
- continue;
- }
- else
- {
- return(UNEXPECTED_ERROR);
- }
+ if (pstr_drc_sel_proc_params_struct->dynamic_range_control_on == 1) {
+ if (pstr_drc_sel_proc_params_struct->num_drc_feature_requests > 0) {
+ for (i = 0;
+ i < pstr_drc_sel_proc_params_struct->num_drc_feature_requests;
+ i++) {
+ switch (pstr_drc_sel_proc_params_struct->drc_feature_req_type[i]) {
+ case MATCH_EFFECT_TYPE:
+ err = impd_match_effect_types(
+ pstr_drc_config,
+ pstr_drc_sel_proc_params_struct->requested_num_drc_effects[i],
+ pstr_drc_sel_proc_params_struct
+ ->desired_num_drc_effects_of_requested[i],
+ pstr_drc_sel_proc_params_struct->requested_drc_effect_type[i],
+ &selection_candidate_count, selection_candidate_info);
+ if (err) return (err);
+ break;
+ case MATCH_DYNAMIC_RANGE:
+ err = impd_match_dynamic_range(
+ pstr_drc_config, pstr_loudness_info,
+ pstr_drc_sel_proc_params_struct, i,
+ &selection_candidate_count, selection_candidate_info);
+ if (err) return (err);
+ break;
+ case MATCH_DRC_CHARACTERISTIC:
+ err = impd_match_drc_characteristic(
+ pstr_drc_config, pstr_drc_sel_proc_params_struct
+ ->requested_drc_characteristic[i],
+ &selection_candidate_count, selection_candidate_info);
+ if (err) return (err);
+ break;
+
+ default:
+ return (UNEXPECTED_ERROR);
+ break;
+ }
}
+ } else {
+ WORD32 match_found_flag = 0;
- err = impd_validate_requested_drc_feature(pstr_drc_sel_proc_params_struct);
+ err = impd_select_drcs_without_compr_effects(
+ pstr_drc_config, &match_found_flag, &selection_candidate_count,
+ selection_candidate_info);
if (err) return (err);
- if (pstr_drc_sel_proc_params_struct->dynamic_range_control_on == 1)
- {
- if (pstr_drc_sel_proc_params_struct->num_drc_feature_requests > 0)
- {
- for (i=0; i<pstr_drc_sel_proc_params_struct->num_drc_feature_requests; i++)
- {
- switch (pstr_drc_sel_proc_params_struct->drc_feature_req_type[i])
- {
- case MATCH_EFFECT_TYPE:
- err = impd_match_effect_types(pstr_drc_config,
- pstr_drc_sel_proc_params_struct->requested_num_drc_effects[i],
- pstr_drc_sel_proc_params_struct->desired_num_drc_effects_of_requested[i],
- pstr_drc_sel_proc_params_struct->requested_drc_effect_type[i],
- &selection_candidate_count,
- selection_candidate_info);
- if (err) return (err);
- break;
- case MATCH_DYNAMIC_RANGE:
- err = impd_match_dynamic_range(pstr_drc_config,
- pstr_loudness_info,
- pstr_drc_sel_proc_params_struct,
- i,
- &selection_candidate_count,
- selection_candidate_info);
- if (err) return (err);
- break;
- case MATCH_DRC_CHARACTERISTIC:
- err = impd_match_drc_characteristic(pstr_drc_config,
- pstr_drc_sel_proc_params_struct->requested_drc_characteristic[i],
- &selection_candidate_count,
- selection_candidate_info);
- if (err) return (err);
- break;
-
- default:
- return (UNEXPECTED_ERROR);
- break;
- }
- }
- }
- else
- {
- WORD32 match_found_flag = 0;
-
- err = impd_select_drcs_without_compr_effects (pstr_drc_config,
- &match_found_flag,
- &selection_candidate_count,
- selection_candidate_info);
- if (err) return (err);
-
- if (match_found_flag == 0)
- {
- WORD32 requested_num_drc_effects = 5;
- WORD32 desired_num_drc_effects_of_requested = 1;
- WORD32 requested_drc_effect_type[5] = {
- EFFECT_TYPE_REQUESTED_GENERAL_COMPR,
- EFFECT_TYPE_REQUESTED_NIGHT,
- EFFECT_TYPE_REQUESTED_NOISY,
- EFFECT_TYPE_REQUESTED_LIMITED,
- EFFECT_TYPE_REQUESTED_LOWLEVEL
- };
-
- err = impd_match_effect_types(pstr_drc_config,
- requested_num_drc_effects,
- desired_num_drc_effects_of_requested,
- requested_drc_effect_type,
- &selection_candidate_count,
- selection_candidate_info);
- if (err) return (err);
- }
- }
-
- if (selection_candidate_count > 0)
- {
- err = impd_drc_set_final_selection (pstr_drc_config,
- pstr_drc_sel_proc_params_struct,
- &selection_candidate_count,
- selection_candidate_info
- , pstr_drc_uni_sel_proc->eq_set_id_valid_flag
- );
- if (err) return (err);
- }
- else
- {
- selection_candidate_count = 0;
- return(UNEXPECTED_ERROR);
- }
-
+ if (match_found_flag == 0) {
+ WORD32 requested_num_drc_effects = 5;
+ WORD32 desired_num_drc_effects_of_requested = 1;
+ WORD32 requested_drc_effect_type[5] = {
+ EFFECT_TYPE_REQUESTED_GENERAL_COMPR, EFFECT_TYPE_REQUESTED_NIGHT,
+ EFFECT_TYPE_REQUESTED_NOISY, EFFECT_TYPE_REQUESTED_LIMITED,
+ EFFECT_TYPE_REQUESTED_LOWLEVEL};
+
+ err = impd_match_effect_types(
+ pstr_drc_config, requested_num_drc_effects,
+ desired_num_drc_effects_of_requested, requested_drc_effect_type,
+ &selection_candidate_count, selection_candidate_info);
+ if (err) return (err);
}
+ }
- if (selection_candidate_count == 0)
- {
- if (restrict_to_drc_with_album_loudness == 1)
- {
- restrict_to_drc_with_album_loudness = 0;
- }
- else
- {
- return(UNEXPECTED_ERROR);
- }
- }
+ if (selection_candidate_count > 0) {
+ err = impd_drc_set_final_selection(
+ pstr_drc_config, pstr_drc_sel_proc_params_struct,
+ &selection_candidate_count, selection_candidate_info,
+ pstr_drc_uni_sel_proc->eq_set_id_valid_flag);
+ if (err) return (err);
+ } else {
+ selection_candidate_count = 0;
+ return (UNEXPECTED_ERROR);
+ }
}
- *drc_set_id_selected = pstr_drc_config->str_drc_instruction_str[selection_candidate_info[0].drc_instructions_index].drc_set_id;
- *eq_set_id_selected = selection_candidate_info[0].eq_set_id;
-
- impd_select_loud_eq(pstr_drc_config,
- pstr_drc_sel_proc_params_struct->requested_dwnmix_id[selection_candidate_info[0].downmix_id_request_index],
- *drc_set_id_selected,
- *eq_set_id_selected,
- loud_eq_id_sel);
- if (selection_candidate_count > 0)
- {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.loudness_normalization_gain_db = selection_candidate_info[0].loudness_norm_db_gain_adjusted;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.output_peak_level_db = selection_candidate_info[0].output_peak_level;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.output_loudness = selection_candidate_info[0].output_loudness;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.active_downmix_id = pstr_drc_sel_proc_params_struct->requested_dwnmix_id[selection_candidate_info[0].downmix_id_request_index];
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.mixing_level = selection_candidate_info[0].mixing_level;
+
+ if (selection_candidate_count == 0) {
+ if (restrict_to_drc_with_album_loudness == 1) {
+ restrict_to_drc_with_album_loudness = 0;
+ } else {
+ return (UNEXPECTED_ERROR);
+ }
}
- return(0);
+ }
+ *drc_set_id_selected =
+ pstr_drc_config
+ ->str_drc_instruction_str[selection_candidate_info[0]
+ .drc_instructions_index]
+ .drc_set_id;
+ *eq_set_id_selected = selection_candidate_info[0].eq_set_id;
+
+ impd_select_loud_eq(
+ pstr_drc_config,
+ pstr_drc_sel_proc_params_struct->requested_dwnmix_id
+ [selection_candidate_info[0].downmix_id_request_index],
+ *drc_set_id_selected, *eq_set_id_selected, loud_eq_id_sel);
+ if (selection_candidate_count > 0) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output
+ .loudness_normalization_gain_db =
+ selection_candidate_info[0].loudness_norm_db_gain_adjusted;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.output_peak_level_db =
+ selection_candidate_info[0].output_peak_level;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.output_loudness =
+ selection_candidate_info[0].output_loudness;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.active_downmix_id =
+ pstr_drc_sel_proc_params_struct->requested_dwnmix_id
+ [selection_candidate_info[0].downmix_id_request_index];
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.mixing_level =
+ selection_candidate_info[0].mixing_level;
+ }
+ return (0);
}
-
-
diff --git a/decoder/drc_src/impd_drc_selection_process_init.c b/decoder/drc_src/impd_drc_selection_process_init.c
index 93ad236..1cb234a 100644
--- a/decoder/drc_src/impd_drc_selection_process_init.c
+++ b/decoder/drc_src/impd_drc_selection_process_init.c
@@ -27,310 +27,504 @@
#include "impd_drc_interface.h"
#include "impd_drc_selection_process.h"
-WORD32 impd_drc_sel_proc_init_dflt(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc)
-{
- if (pstr_drc_uni_sel_proc != NULL) {
+WORD32 impd_drc_sel_proc_init_dflt(
+ ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc) {
+ if (pstr_drc_uni_sel_proc != NULL) {
+ pstr_drc_uni_sel_proc->first_frame = 0;
- pstr_drc_uni_sel_proc->first_frame = 0;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.base_channel_count = -1;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.base_layout = -1;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_config_request_type =
+ 0;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests = 0;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.base_channel_count = -1;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.base_layout = -1;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_config_request_type = 0;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests = 0;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.album_mode = 0;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.album_mode = 0;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.peak_limiter = 0;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.peak_limiter = 0;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_normalization_on =
+ 0;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_loudness = -24.0f;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_normalization_on = 0;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_loudness = -24.0f;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_deviation_max =
+ LOUDNESS_DEVIATION_MAX_DEFAULT;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_deviation_max = LOUDNESS_DEVIATION_MAX_DEFAULT;
-
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_measurement_method = USER_METHOD_DEFINITION_DEFAULT;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_measurement_system = USER_MEASUREMENT_SYSTEM_DEFAULT;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_measurement_pre_proc = USER_LOUDNESS_PREPROCESSING_DEFAULT;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.device_cut_off_frequency = 500;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_norm_gain_db_max = LOUDNESS_NORMALIZATION_GAIN_MAX_DEFAULT;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_norm_gain_modification_db = 0.0f;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.output_peak_level_max = 0.0f;
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.peak_limiter == 1) {
-
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.output_peak_level_max = 6.0f;
-
- }
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_measurement_method =
+ USER_METHOD_DEFINITION_DEFAULT;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_measurement_system =
+ USER_MEASUREMENT_SYSTEM_DEFAULT;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .loudness_measurement_pre_proc = USER_LOUDNESS_PREPROCESSING_DEFAULT;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.device_cut_off_frequency =
+ 500;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_norm_gain_db_max =
+ LOUDNESS_NORMALIZATION_GAIN_MAX_DEFAULT;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .loudness_norm_gain_modification_db = 0.0f;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.output_peak_level_max = 0.0f;
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.peak_limiter == 1) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.output_peak_level_max =
+ 6.0f;
+ }
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.dynamic_range_control_on = 1;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_bands_supported = 4;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_drc_feature_requests = 0;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.dynamic_range_control_on = 1;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_bands_supported = 4;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_drc_feature_requests = 0;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.boost = 1.f;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.compress = 1.f;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.drc_characteristic_target = 0;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.boost = 1.f;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.compress = 1.f;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.drc_characteristic_target =
+ 0;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_eq_request = LOUD_EQ_REQUEST_OFF;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.eq_set_purpose_request = EQ_PURPOSE_EQ_OFF;
- pstr_drc_uni_sel_proc->compl_level_supported_total = COMPLEXITY_LEVEL_SUPPORTED_TOTAL;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_eq_request =
+ LOUD_EQ_REQUEST_OFF;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.eq_set_purpose_request =
+ EQ_PURPOSE_EQ_OFF;
+ pstr_drc_uni_sel_proc->compl_level_supported_total =
+ COMPLEXITY_LEVEL_SUPPORTED_TOTAL;
- pstr_drc_uni_sel_proc->drc_inst_index_sel = -1;
- pstr_drc_uni_sel_proc->drc_coef_index_sel = -1;
- pstr_drc_uni_sel_proc->downmix_inst_index_sel = -1;
- pstr_drc_uni_sel_proc->drc_instructions_index[0] = -1;
- pstr_drc_uni_sel_proc->drc_instructions_index[1] = -1;
- pstr_drc_uni_sel_proc->drc_instructions_index[2] = -1;
- pstr_drc_uni_sel_proc->drc_instructions_index[3] = -1;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.output_peak_level_db = 0;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.loudness_normalization_gain_db = 0;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.output_loudness = UNDEFINED_LOUDNESS_VALUE;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.num_sel_drc_sets = 0;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.active_downmix_id = 0;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.base_channel_count = 0;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.target_channel_count = 0;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.downmix_matrix_present = 0;
+ pstr_drc_uni_sel_proc->drc_inst_index_sel = -1;
+ pstr_drc_uni_sel_proc->drc_coef_index_sel = -1;
+ pstr_drc_uni_sel_proc->downmix_inst_index_sel = -1;
+ pstr_drc_uni_sel_proc->drc_instructions_index[0] = -1;
+ pstr_drc_uni_sel_proc->drc_instructions_index[1] = -1;
+ pstr_drc_uni_sel_proc->drc_instructions_index[2] = -1;
+ pstr_drc_uni_sel_proc->drc_instructions_index[3] = -1;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.output_peak_level_db = 0;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output
+ .loudness_normalization_gain_db = 0;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.output_loudness =
+ UNDEFINED_LOUDNESS_VALUE;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.num_sel_drc_sets = 0;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.active_downmix_id = 0;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.base_channel_count = 0;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.target_channel_count = 0;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_output.downmix_matrix_present = 0;
- pstr_drc_uni_sel_proc->eq_inst_index[0] = -1;
- pstr_drc_uni_sel_proc->eq_inst_index[1] = -1;
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- } else {
- return 1;
- }
+ pstr_drc_uni_sel_proc->eq_inst_index[0] = -1;
+ pstr_drc_uni_sel_proc->eq_inst_index[1] = -1;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
+ } else {
+ return 1;
+ }
- return 0;
+ return 0;
}
WORD32
-impd_drc_sel_proc_init_sel_proc_params(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct)
-{
-
- if (pstr_drc_uni_sel_proc != NULL && pstr_drc_sel_proc_params_struct != NULL) {
-
- if ( memcmp ( &pstr_drc_uni_sel_proc->uni_drc_sel_proc_params, pstr_drc_sel_proc_params_struct, sizeof(ia_drc_sel_proc_params_struct) ))
- {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params = *pstr_drc_sel_proc_params_struct;
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
+impd_drc_sel_proc_init_sel_proc_params(
+ ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct) {
+ if (pstr_drc_uni_sel_proc != NULL &&
+ pstr_drc_sel_proc_params_struct != NULL) {
+ if (memcmp(&pstr_drc_uni_sel_proc->uni_drc_sel_proc_params,
+ pstr_drc_sel_proc_params_struct,
+ sizeof(ia_drc_sel_proc_params_struct))) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params =
+ *pstr_drc_sel_proc_params_struct;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
}
+ }
- return 0;
+ return 0;
}
WORD32
-impd_drc_sel_proc_init_interface_params(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- ia_drc_interface_struct* pstr_drc_interface)
-{
- WORD32 i,j;
-
- if (pstr_drc_uni_sel_proc != NULL && pstr_drc_interface != NULL) {
+impd_drc_sel_proc_init_interface_params(
+ ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
+ ia_drc_interface_struct* pstr_drc_interface) {
+ WORD32 i, j;
- if (pstr_drc_interface->system_interface_flag) {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_config_request_type != pstr_drc_interface->system_interface.target_config_request_type) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_config_request_type = pstr_drc_interface->system_interface.target_config_request_type;
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- switch (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_config_request_type) {
- case 0:
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests != pstr_drc_interface->system_interface.num_downmix_id_requests) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests = pstr_drc_interface->system_interface.num_downmix_id_requests;
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- for (i=0; i<pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_downmix_id_requests; i++) {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dwnmix_id[i] != pstr_drc_interface->system_interface.requested_dwnmix_id[i]) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dwnmix_id[i] = pstr_drc_interface->system_interface.requested_dwnmix_id[i];
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- }
- break;
- case 1:
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_target_layout != pstr_drc_interface->system_interface.requested_target_layout) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_target_layout = pstr_drc_interface->system_interface.requested_target_layout;
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- break;
- case 2:
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_target_ch_count != pstr_drc_interface->system_interface.requested_target_ch_count) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_target_ch_count = pstr_drc_interface->system_interface.requested_target_ch_count;
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- break;
+ if (pstr_drc_uni_sel_proc != NULL && pstr_drc_interface != NULL) {
+ if (pstr_drc_interface->system_interface_flag) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .target_config_request_type !=
+ pstr_drc_interface->system_interface.target_config_request_type) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .target_config_request_type =
+ pstr_drc_interface->system_interface.target_config_request_type;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
+ }
+ switch (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .target_config_request_type) {
+ case 0:
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .num_downmix_id_requests !=
+ pstr_drc_interface->system_interface.num_downmix_id_requests) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .num_downmix_id_requests =
+ pstr_drc_interface->system_interface.num_downmix_id_requests;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
+ }
+ for (i = 0; i < pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .num_downmix_id_requests;
+ i++) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_dwnmix_id[i] !=
+ pstr_drc_interface->system_interface.requested_dwnmix_id[i]) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_dwnmix_id[i] =
+ pstr_drc_interface->system_interface.requested_dwnmix_id[i];
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
}
+ }
+ break;
+ case 1:
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_target_layout !=
+ pstr_drc_interface->system_interface.requested_target_layout) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_target_layout =
+ pstr_drc_interface->system_interface.requested_target_layout;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
+ }
+ break;
+ case 2:
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_target_ch_count !=
+ pstr_drc_interface->system_interface.requested_target_ch_count) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_target_ch_count =
+ pstr_drc_interface->system_interface.requested_target_ch_count;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
+ }
+ break;
+ }
+ }
+ if (pstr_drc_interface->loudness_norm_ctrl_interface_flag) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .loudness_normalization_on !=
+ pstr_drc_interface->loudness_norm_ctrl_interface
+ .loudness_normalization_on) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .loudness_normalization_on =
+ pstr_drc_interface->loudness_norm_ctrl_interface
+ .loudness_normalization_on;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
+ }
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .loudness_normalization_on) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_loudness !=
+ pstr_drc_interface->loudness_norm_ctrl_interface.target_loudness) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_loudness =
+ pstr_drc_interface->loudness_norm_ctrl_interface.target_loudness;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
}
- if (pstr_drc_interface->loudness_norm_ctrl_interface_flag) {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_normalization_on != pstr_drc_interface->loudness_norm_ctrl_interface.loudness_normalization_on) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_normalization_on = pstr_drc_interface->loudness_norm_ctrl_interface.loudness_normalization_on;
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_normalization_on) {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_loudness != pstr_drc_interface->loudness_norm_ctrl_interface.target_loudness) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.target_loudness = pstr_drc_interface->loudness_norm_ctrl_interface.target_loudness;
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- }
+ }
+ }
+ if (pstr_drc_interface->loudness_norm_parameter_interface_flag) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.album_mode !=
+ pstr_drc_interface->loudness_norm_param_interface.album_mode) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.album_mode =
+ pstr_drc_interface->loudness_norm_param_interface.album_mode;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
+ }
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.peak_limiter !=
+ pstr_drc_interface->loudness_norm_param_interface.peak_limiter) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.peak_limiter =
+ pstr_drc_interface->loudness_norm_param_interface.peak_limiter;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
+ }
+ if (pstr_drc_interface->loudness_norm_param_interface
+ .change_loudness_deviation_max) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .loudness_deviation_max !=
+ pstr_drc_interface->loudness_norm_param_interface
+ .loudness_deviation_max) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .loudness_deviation_max =
+ pstr_drc_interface->loudness_norm_param_interface
+ .loudness_deviation_max;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
+ }
+ }
+ if (pstr_drc_interface->loudness_norm_param_interface
+ .change_loudness_measur_method) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .loudness_measurement_method !=
+ pstr_drc_interface->loudness_norm_param_interface
+ .loudness_measurement_method) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .loudness_measurement_method =
+ pstr_drc_interface->loudness_norm_param_interface
+ .loudness_measurement_method;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
+ }
+ }
+ if (pstr_drc_interface->loudness_norm_param_interface
+ .change_loudness_measur_pre_proc) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .loudness_measurement_pre_proc !=
+ pstr_drc_interface->loudness_norm_param_interface
+ .loudness_measurement_pre_proc) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .loudness_measurement_pre_proc =
+ pstr_drc_interface->loudness_norm_param_interface
+ .loudness_measurement_pre_proc;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
+ }
+ }
+ if (pstr_drc_interface->loudness_norm_param_interface
+ .change_loudness_measur_system) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .loudness_measurement_system !=
+ pstr_drc_interface->loudness_norm_param_interface
+ .loudness_measurement_system) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .loudness_measurement_system =
+ pstr_drc_interface->loudness_norm_param_interface
+ .loudness_measurement_system;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
}
- if (pstr_drc_interface->loudness_norm_parameter_interface_flag) {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.album_mode != pstr_drc_interface->loudness_norm_param_interface.album_mode) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.album_mode = pstr_drc_interface->loudness_norm_param_interface.album_mode;
+ }
+ if (pstr_drc_interface->loudness_norm_param_interface
+ .change_device_cut_off_freq) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .device_cut_off_frequency !=
+ pstr_drc_interface->loudness_norm_param_interface
+ .device_cut_off_frequency) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .device_cut_off_frequency =
+ pstr_drc_interface->loudness_norm_param_interface
+ .device_cut_off_frequency;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
+ }
+ }
+ if (pstr_drc_interface->loudness_norm_param_interface
+ .change_loudness_norm_gain_db_max) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .loudness_norm_gain_db_max !=
+ pstr_drc_interface->loudness_norm_param_interface
+ .loudness_norm_gain_db_max) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .loudness_norm_gain_db_max =
+ pstr_drc_interface->loudness_norm_param_interface
+ .loudness_norm_gain_db_max;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
+ }
+ }
+ if (pstr_drc_interface->loudness_norm_param_interface
+ .change_loudness_norm_gain_modification_db) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .loudness_norm_gain_modification_db !=
+ pstr_drc_interface->loudness_norm_param_interface
+ .loudness_norm_gain_modification_db) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .loudness_norm_gain_modification_db =
+ pstr_drc_interface->loudness_norm_param_interface
+ .loudness_norm_gain_modification_db;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
+ }
+ }
+ if (pstr_drc_interface->loudness_norm_param_interface
+ .change_output_peak_level_max) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .output_peak_level_max !=
+ pstr_drc_interface->loudness_norm_param_interface
+ .output_peak_level_max) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.output_peak_level_max =
+ pstr_drc_interface->loudness_norm_param_interface
+ .output_peak_level_max;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
+ }
+ }
+ }
+ if (pstr_drc_interface->drc_interface_flag) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .dynamic_range_control_on !=
+ pstr_drc_interface->drc_ctrl_interface.dynamic_range_control_on) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .dynamic_range_control_on =
+ pstr_drc_interface->drc_ctrl_interface.dynamic_range_control_on;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
+ if (!pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .dynamic_range_control_on) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .num_drc_feature_requests = 0;
+ }
+ }
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .dynamic_range_control_on) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .num_drc_feature_requests !=
+ pstr_drc_interface->drc_ctrl_interface.num_drc_feature_requests) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .num_drc_feature_requests =
+ pstr_drc_interface->drc_ctrl_interface.num_drc_feature_requests;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
+ }
+ for (i = 0; i < pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .num_drc_feature_requests;
+ i++) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .drc_feature_req_type[i] !=
+ pstr_drc_interface->drc_ctrl_interface.drc_feature_req_type[i]) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .drc_feature_req_type[i] =
+ pstr_drc_interface->drc_ctrl_interface.drc_feature_req_type[i];
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
+ }
+ switch (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .drc_feature_req_type[i]) {
+ case 0:
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_num_drc_effects[i] !=
+ pstr_drc_interface->drc_ctrl_interface
+ .requested_num_drc_effects[i]) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_num_drc_effects[i] =
+ pstr_drc_interface->drc_ctrl_interface
+ .requested_num_drc_effects[i];
pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.peak_limiter != pstr_drc_interface->loudness_norm_param_interface.peak_limiter) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.peak_limiter = pstr_drc_interface->loudness_norm_param_interface.peak_limiter;
+ }
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .desired_num_drc_effects_of_requested[i] !=
+ pstr_drc_interface->drc_ctrl_interface
+ .desired_num_drc_effects_of_requested[i]) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .desired_num_drc_effects_of_requested[i] =
+ pstr_drc_interface->drc_ctrl_interface
+ .desired_num_drc_effects_of_requested[i];
pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- if (pstr_drc_interface->loudness_norm_param_interface.change_loudness_deviation_max) {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_deviation_max != pstr_drc_interface->loudness_norm_param_interface.loudness_deviation_max) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_deviation_max = pstr_drc_interface->loudness_norm_param_interface.loudness_deviation_max;
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- }
- if (pstr_drc_interface->loudness_norm_param_interface.change_loudness_measur_method) {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_measurement_method != pstr_drc_interface->loudness_norm_param_interface.loudness_measurement_method) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_measurement_method = pstr_drc_interface->loudness_norm_param_interface.loudness_measurement_method;
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- }
- if (pstr_drc_interface->loudness_norm_param_interface.change_loudness_measur_pre_proc) {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_measurement_pre_proc != pstr_drc_interface->loudness_norm_param_interface.loudness_measurement_pre_proc) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_measurement_pre_proc = pstr_drc_interface->loudness_norm_param_interface.loudness_measurement_pre_proc;
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- }
- if (pstr_drc_interface->loudness_norm_param_interface.change_loudness_measur_system) {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_measurement_system != pstr_drc_interface->loudness_norm_param_interface.loudness_measurement_system) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_measurement_system = pstr_drc_interface->loudness_norm_param_interface.loudness_measurement_system;
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- }
- if (pstr_drc_interface->loudness_norm_param_interface.change_device_cut_off_freq) {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.device_cut_off_frequency != pstr_drc_interface->loudness_norm_param_interface.device_cut_off_frequency) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.device_cut_off_frequency = pstr_drc_interface->loudness_norm_param_interface.device_cut_off_frequency;
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
+ }
+ for (j = 0; j < pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_num_drc_effects[i];
+ j++) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_drc_effect_type[i][j] !=
+ pstr_drc_interface->drc_ctrl_interface
+ .requested_drc_effect_type[i][j]) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_drc_effect_type[i][j] =
+ pstr_drc_interface->drc_ctrl_interface
+ .requested_drc_effect_type[i][j];
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
}
- }
- if (pstr_drc_interface->loudness_norm_param_interface.change_loudness_norm_gain_db_max) {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_norm_gain_db_max != pstr_drc_interface->loudness_norm_param_interface.loudness_norm_gain_db_max) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_norm_gain_db_max = pstr_drc_interface->loudness_norm_param_interface.loudness_norm_gain_db_max;
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- }
- if (pstr_drc_interface->loudness_norm_param_interface.change_loudness_norm_gain_modification_db ) {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_norm_gain_modification_db != pstr_drc_interface->loudness_norm_param_interface.loudness_norm_gain_modification_db) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_norm_gain_modification_db = pstr_drc_interface->loudness_norm_param_interface.loudness_norm_gain_modification_db;
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- }
- if (pstr_drc_interface->loudness_norm_param_interface.change_output_peak_level_max) {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.output_peak_level_max != pstr_drc_interface->loudness_norm_param_interface.output_peak_level_max) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.output_peak_level_max = pstr_drc_interface->loudness_norm_param_interface.output_peak_level_max;
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- }
- }
- if (pstr_drc_interface->drc_interface_flag) {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.dynamic_range_control_on != pstr_drc_interface->drc_ctrl_interface.dynamic_range_control_on) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.dynamic_range_control_on = pstr_drc_interface->drc_ctrl_interface.dynamic_range_control_on;
+ }
+ break;
+ case 1:
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_dyn_range_measur_type[i] !=
+ pstr_drc_interface->drc_ctrl_interface
+ .requested_dyn_rng_measurement_type[i]) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_dyn_range_measur_type[i] =
+ pstr_drc_interface->drc_ctrl_interface
+ .requested_dyn_rng_measurement_type[i];
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
+ }
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_dyn_range_range_flag[i] !=
+ pstr_drc_interface->drc_ctrl_interface
+ .requested_dyn_range_is_single_val_flag[i]) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_dyn_range_range_flag[i] =
+ pstr_drc_interface->drc_ctrl_interface
+ .requested_dyn_range_is_single_val_flag[i];
pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- if (!pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.dynamic_range_control_on) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_drc_feature_requests = 0;
+ }
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_dyn_range_range_flag[i] == 0) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_dyn_range_value[i] !=
+ pstr_drc_interface->drc_ctrl_interface
+ .requested_dyn_range_value[i]) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_dyn_range_value[i] =
+ pstr_drc_interface->drc_ctrl_interface
+ .requested_dyn_range_value[i];
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
}
- }
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.dynamic_range_control_on) {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_drc_feature_requests != pstr_drc_interface->drc_ctrl_interface.num_drc_feature_requests) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_drc_feature_requests = pstr_drc_interface->drc_ctrl_interface.num_drc_feature_requests;
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
+ } else {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_dyn_range_min_val[i] !=
+ pstr_drc_interface->drc_ctrl_interface
+ .requested_dyn_range_min_val[i]) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_dyn_range_min_val[i] =
+ pstr_drc_interface->drc_ctrl_interface
+ .requested_dyn_range_min_val[i];
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
}
- for (i=0; i<pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.num_drc_feature_requests; i++) {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.drc_feature_req_type[i] != pstr_drc_interface->drc_ctrl_interface.drc_feature_req_type[i]) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.drc_feature_req_type[i] = pstr_drc_interface->drc_ctrl_interface.drc_feature_req_type[i];
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- switch (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.drc_feature_req_type[i]) {
- case 0:
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_num_drc_effects[i] != pstr_drc_interface->drc_ctrl_interface.requested_num_drc_effects[i]) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_num_drc_effects[i] = pstr_drc_interface->drc_ctrl_interface.requested_num_drc_effects[i];
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.desired_num_drc_effects_of_requested[i] != pstr_drc_interface->drc_ctrl_interface.desired_num_drc_effects_of_requested[i]) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.desired_num_drc_effects_of_requested[i] = pstr_drc_interface->drc_ctrl_interface.desired_num_drc_effects_of_requested[i];
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- for (j=0; j<pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_num_drc_effects[i]; j++) {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_drc_effect_type[i][j] != pstr_drc_interface->drc_ctrl_interface.requested_drc_effect_type[i][j]) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_drc_effect_type[i][j] = pstr_drc_interface->drc_ctrl_interface.requested_drc_effect_type[i][j];
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- }
- break;
- case 1:
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dyn_range_measur_type[i] != pstr_drc_interface->drc_ctrl_interface.requested_dyn_rng_measurement_type[i]) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dyn_range_measur_type[i] = pstr_drc_interface->drc_ctrl_interface.requested_dyn_rng_measurement_type[i];
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dyn_range_range_flag[i] != pstr_drc_interface->drc_ctrl_interface.requested_dyn_range_is_single_val_flag[i]) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dyn_range_range_flag[i] = pstr_drc_interface->drc_ctrl_interface.requested_dyn_range_is_single_val_flag[i];
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dyn_range_range_flag[i] == 0) {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dyn_range_value[i] != pstr_drc_interface->drc_ctrl_interface.requested_dyn_range_value[i]) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dyn_range_value[i] = pstr_drc_interface->drc_ctrl_interface.requested_dyn_range_value[i];
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- } else {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dyn_range_min_val[i] != pstr_drc_interface->drc_ctrl_interface.requested_dyn_range_min_val[i]) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dyn_range_min_val[i] = pstr_drc_interface->drc_ctrl_interface.requested_dyn_range_min_val[i];
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dyn_range_max_val[i] != pstr_drc_interface->drc_ctrl_interface.requested_dyn_range_max_val[i]) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_dyn_range_max_val[i] = pstr_drc_interface->drc_ctrl_interface.requested_dyn_range_max_val[i];
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- }
- break;
- case 2:
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_drc_characteristic[i] != pstr_drc_interface->drc_ctrl_interface.requested_drc_characteristic[i]) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.requested_drc_characteristic[i] = pstr_drc_interface->drc_ctrl_interface.requested_drc_characteristic[i];
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- break;
- }
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_dyn_range_max_val[i] !=
+ pstr_drc_interface->drc_ctrl_interface
+ .requested_dyn_range_max_val[i]) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_dyn_range_max_val[i] =
+ pstr_drc_interface->drc_ctrl_interface
+ .requested_dyn_range_max_val[i];
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
}
- }
+ }
+ break;
+ case 2:
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_drc_characteristic[i] !=
+ pstr_drc_interface->drc_ctrl_interface
+ .requested_drc_characteristic[i]) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .requested_drc_characteristic[i] =
+ pstr_drc_interface->drc_ctrl_interface
+ .requested_drc_characteristic[i];
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
+ }
+ break;
+ }
}
- if (pstr_drc_interface->drc_parameter_interface_flag) {
- if (pstr_drc_interface->drc_parameter_interface.change_compress) {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.compress != pstr_drc_interface->drc_parameter_interface.compress) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.compress = pstr_drc_interface->drc_parameter_interface.compress;
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- }
- if (pstr_drc_interface->drc_parameter_interface.change_boost) {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.boost != pstr_drc_interface->drc_parameter_interface.boost) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.boost = pstr_drc_interface->drc_parameter_interface.boost;
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- }
- if (pstr_drc_interface->drc_parameter_interface.change_drc_characteristic_target) {
- if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.drc_characteristic_target != pstr_drc_interface->drc_parameter_interface.drc_characteristic_target) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.drc_characteristic_target = pstr_drc_interface->drc_parameter_interface.drc_characteristic_target;
- pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
- }
- }
+ }
+ }
+ if (pstr_drc_interface->drc_parameter_interface_flag) {
+ if (pstr_drc_interface->drc_parameter_interface.change_compress) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.compress !=
+ pstr_drc_interface->drc_parameter_interface.compress) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.compress =
+ pstr_drc_interface->drc_parameter_interface.compress;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
}
- if (pstr_drc_interface->drc_uni_interface_ext_flag) {
- ia_drc_uni_interface_ext_struct* drc_uni_interface_ext = &pstr_drc_interface->drc_uni_interface_ext;
- if (drc_uni_interface_ext->loudness_eq_parameter_interface_flag) {
- ia_loudness_eq_parameter_interface_struct* loudness_eq_parameter_interface = &drc_uni_interface_ext->loudness_eq_parameter_interface;
- if (loudness_eq_parameter_interface->loudness_eq_request_flag) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_eq_request = loudness_eq_parameter_interface->loudness_eq_request;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.sensitivity = loudness_eq_parameter_interface->sensitivity;
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.playback_gain = loudness_eq_parameter_interface->playback_gain;
- }
- }
- if (drc_uni_interface_ext->eq_ctrl_interface_flag) {
- pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.eq_set_purpose_request = drc_uni_interface_ext->eq_ctrl_interface.eq_set_purpose_request;
- }
+ }
+ if (pstr_drc_interface->drc_parameter_interface.change_boost) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.boost !=
+ pstr_drc_interface->drc_parameter_interface.boost) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.boost =
+ pstr_drc_interface->drc_parameter_interface.boost;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
}
+ }
+ if (pstr_drc_interface->drc_parameter_interface
+ .change_drc_characteristic_target) {
+ if (pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .drc_characteristic_target !=
+ pstr_drc_interface->drc_parameter_interface
+ .drc_characteristic_target) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params
+ .drc_characteristic_target =
+ pstr_drc_interface->drc_parameter_interface
+ .drc_characteristic_target;
+ pstr_drc_uni_sel_proc->sel_proc_request_flag = 1;
+ }
+ }
}
+ if (pstr_drc_interface->drc_uni_interface_ext_flag) {
+ ia_drc_uni_interface_ext_struct* drc_uni_interface_ext =
+ &pstr_drc_interface->drc_uni_interface_ext;
+ if (drc_uni_interface_ext->loudness_eq_parameter_interface_flag) {
+ ia_loudness_eq_parameter_interface_struct*
+ loudness_eq_parameter_interface =
+ &drc_uni_interface_ext->loudness_eq_parameter_interface;
+ if (loudness_eq_parameter_interface->loudness_eq_request_flag) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.loudness_eq_request =
+ loudness_eq_parameter_interface->loudness_eq_request;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.sensitivity =
+ loudness_eq_parameter_interface->sensitivity;
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.playback_gain =
+ loudness_eq_parameter_interface->playback_gain;
+ }
+ }
+ if (drc_uni_interface_ext->eq_ctrl_interface_flag) {
+ pstr_drc_uni_sel_proc->uni_drc_sel_proc_params.eq_set_purpose_request =
+ drc_uni_interface_ext->eq_ctrl_interface.eq_set_purpose_request;
+ }
+ }
+ }
- return 0;
+ return 0;
}
-
-
-
diff --git a/decoder/drc_src/impd_drc_shape_filter.c b/decoder/drc_src/impd_drc_shape_filter.c
index 4a33c7b..ef16658 100644
--- a/decoder/drc_src/impd_drc_shape_filter.c
+++ b/decoder/drc_src/impd_drc_shape_filter.c
@@ -38,228 +38,270 @@
#include "impd_drc_rom.h"
WORD32 impd_shape_filt_block_adapt(const FLOAT32 drc_gain,
- shape_filter_block* shape_filter_block)
-{
-// WORD32 err = 0;
- WORD32 i;
- FLOAT32 warpedGain, x1, y1;
- shape_filter_block->drc_gain_last = drc_gain;
- for (i=0; i<4; i++) {
-
- if(shape_filter_block->shape_filter[i].type==SHAPE_FILTER_TYPE_OFF)
- continue;
- else if(shape_filter_block->shape_filter[i].type==SHAPE_FILTER_TYPE_LF_CUT||shape_filter_block->shape_filter[i].type==SHAPE_FILTER_TYPE_HF_CUT)
- {
- if (drc_gain < 1.0f)
- warpedGain = -1.0f;
- else
- warpedGain = (drc_gain - 1.0f) / (drc_gain - 1.0f + shape_filter_block->shape_filter[i].gain_offset);
- x1 = shape_filter_block->shape_filter[i].a1;
- }
- else if(shape_filter_block->shape_filter[i].type==SHAPE_FILTER_TYPE_LF_BOOST||shape_filter_block->shape_filter[i].type==SHAPE_FILTER_TYPE_HF_BOOST)
- {
- if (drc_gain >= 1.0f)
- warpedGain = -1.0f;
- else
- warpedGain = (1.0f - drc_gain) / (1.0f + drc_gain * (shape_filter_block->shape_filter[i].gain_offset - 1.0f));
- x1 = shape_filter_block->shape_filter[i].b1;
-
+ shape_filter_block* shape_filter_block) {
+ // WORD32 err = 0;
+ WORD32 i;
+ FLOAT32 warpedGain, x1, y1;
+ shape_filter_block->drc_gain_last = drc_gain;
+ for (i = 0; i < 4; i++) {
+ if (shape_filter_block->shape_filter[i].type == SHAPE_FILTER_TYPE_OFF)
+ continue;
+ else if (shape_filter_block->shape_filter[i].type ==
+ SHAPE_FILTER_TYPE_LF_CUT ||
+ shape_filter_block->shape_filter[i].type ==
+ SHAPE_FILTER_TYPE_HF_CUT) {
+ if (drc_gain < 1.0f)
+ warpedGain = -1.0f;
+ else
+ warpedGain =
+ (drc_gain - 1.0f) /
+ (drc_gain - 1.0f + shape_filter_block->shape_filter[i].gain_offset);
+ x1 = shape_filter_block->shape_filter[i].a1;
+ } else if (shape_filter_block->shape_filter[i].type ==
+ SHAPE_FILTER_TYPE_LF_BOOST ||
+ shape_filter_block->shape_filter[i].type ==
+ SHAPE_FILTER_TYPE_HF_BOOST) {
+ if (drc_gain >= 1.0f)
+ warpedGain = -1.0f;
+ else
+ warpedGain =
+ (1.0f - drc_gain) /
+ (1.0f +
+ drc_gain *
+ (shape_filter_block->shape_filter[i].gain_offset - 1.0f));
+ x1 = shape_filter_block->shape_filter[i].b1;
}
- if (warpedGain <= 0.0f)
- {
- y1 = x1;
- }
- else if (warpedGain < shape_filter_block->shape_filter[i].warped_gain_max) {
- y1 = x1 + shape_filter_block->shape_filter[i].factor * warpedGain;
- }
- else
- {
- y1 = shape_filter_block->shape_filter[i].y1_bound;
+ if (warpedGain <= 0.0f) {
+ y1 = x1;
+ } else if (warpedGain <
+ shape_filter_block->shape_filter[i].warped_gain_max) {
+ y1 = x1 + shape_filter_block->shape_filter[i].factor * warpedGain;
+ } else {
+ y1 = shape_filter_block->shape_filter[i].y1_bound;
}
- if(shape_filter_block->shape_filter[i].type==SHAPE_FILTER_TYPE_LF_CUT)
- {
- shape_filter_block->shape_filter[i].b1 = y1;
+ if (shape_filter_block->shape_filter[i].type == SHAPE_FILTER_TYPE_LF_CUT) {
+ shape_filter_block->shape_filter[i].b1 = y1;
+ } else if (shape_filter_block->shape_filter[i].type ==
+ SHAPE_FILTER_TYPE_HF_CUT) {
+ shape_filter_block->shape_filter[i].g_norm =
+ shape_filter_block->shape_filter[i].coeff_sum /
+ (shape_filter_block->shape_filter[i].partial_coeff_sum + y1);
+ shape_filter_block->shape_filter[i].b1 = y1;
+ } else if (shape_filter_block->shape_filter[i].type ==
+ SHAPE_FILTER_TYPE_HF_BOOST) {
+ shape_filter_block->shape_filter[i].g_norm =
+ (shape_filter_block->shape_filter[i].partial_coeff_sum + y1) /
+ shape_filter_block->shape_filter[i].coeff_sum;
+ shape_filter_block->shape_filter[i].a1 = y1;
+ } else if (shape_filter_block->shape_filter[i].type ==
+ SHAPE_FILTER_TYPE_LF_BOOST) {
+ shape_filter_block->shape_filter[i].a1 = y1;
}
- else if(shape_filter_block->shape_filter[i].type==SHAPE_FILTER_TYPE_HF_CUT)
- {
- shape_filter_block->shape_filter[i].g_norm = shape_filter_block->shape_filter[i].coeff_sum / (shape_filter_block->shape_filter[i].partial_coeff_sum + y1);
- shape_filter_block->shape_filter[i].b1 = y1;
-}
- else if(shape_filter_block->shape_filter[i].type==SHAPE_FILTER_TYPE_HF_BOOST)
-{
- shape_filter_block->shape_filter[i].g_norm = (shape_filter_block->shape_filter[i].partial_coeff_sum + y1) / shape_filter_block->shape_filter[i].coeff_sum;
- shape_filter_block->shape_filter[i].a1 = y1;
- }
- else if(shape_filter_block->shape_filter[i].type==SHAPE_FILTER_TYPE_LF_BOOST)
- {
- shape_filter_block->shape_filter[i].a1 = y1;
+ }
+ return (0);
}
+WORD32 resetshape_flter_block(shape_filter_block* shape_filter_block) {
+ WORD32 i, c;
+ shape_filter_block->drc_gain_last = -1.0f;
+ impd_shape_filt_block_adapt(1.0f, shape_filter_block);
+ for (i = 0; i < 4; i++) {
+ for (c = 0; c < MAX_CHANNEL_COUNT; c++) {
+ shape_filter_block->shape_filter[i].audio_in_state_1[c] = 0.0f;
+ shape_filter_block->shape_filter[i].audio_in_state_2[c] = 0.0f;
+ shape_filter_block->shape_filter[i].audio_out_state_1[c] = 0.0f;
+ shape_filter_block->shape_filter[i].audio_out_state_2[c] = 0.0f;
}
- return (0);
+ }
+ return (0);
}
-WORD32 resetshape_flter_block(shape_filter_block* shape_filter_block)
-{
- WORD32 i, c;
- shape_filter_block->drc_gain_last = -1.0f;
- impd_shape_filt_block_adapt(1.0f, shape_filter_block);
- for (i=0; i<4; i++) {
- for (c=0; c<MAX_CHANNEL_COUNT; c++)
- {
- shape_filter_block->shape_filter[i].audio_in_state_1[c] = 0.0f;
- shape_filter_block->shape_filter[i].audio_in_state_2[c] = 0.0f;
- shape_filter_block->shape_filter[i].audio_out_state_1[c] = 0.0f;
- shape_filter_block->shape_filter[i].audio_out_state_2[c] = 0.0f;
- }
- }
- return (0);
-}
-
-
-WORD32 impd_shape_filt_block_init(ia_shape_filter_block_params_struct* shape_flter_block_params,
- shape_filter_block* shape_filter_block)
-{
- //WORD32 err = 0;
- FLOAT32 x1;
- FLOAT32 x2 = 0.0f;
- FLOAT32 radius;
- if (shape_flter_block_params->lf_cut_filter_present) {
-
- ia_shape_filter_params_struct* params = &shape_flter_block_params->str_lf_cut_params;
- shape_filter_block->shape_filter[0].type = SHAPE_FILTER_TYPE_LF_CUT;
- shape_filter_block->shape_filter[0].gain_offset = shape_filt_lf_gain_offset_tbl[params->corner_freq_index][params->filter_strength_index];
- shape_filter_block->shape_filter[0].y1_bound = shape_filt_lf_y1_bound_tbl[params->corner_freq_index][params->filter_strength_index];
- x1 = - shape_filt_lf_radius_tbl[params->corner_freq_index];
- shape_filter_block->shape_filter[0].warped_gain_max = SHAPE_FILTER_DRC_GAIN_MAX_MINUS_ONE / (SHAPE_FILTER_DRC_GAIN_MAX_MINUS_ONE + shape_filter_block->shape_filter[0].gain_offset);
- shape_filter_block->shape_filter[0].factor = (shape_filter_block->shape_filter[0].y1_bound - x1) / shape_filter_block->shape_filter[0].warped_gain_max;
- shape_filter_block->shape_filter[0].a1 = x1;
-
- }
- else
- {
- shape_filter_block->shape_filter[0].type = SHAPE_FILTER_TYPE_OFF;
- }
- if (shape_flter_block_params->lf_boost_filter_present) {
-
- ia_shape_filter_params_struct* params = &shape_flter_block_params->str_lf_boost_params;
- shape_filter_block->shape_filter[1].type = SHAPE_FILTER_TYPE_LF_BOOST;
- shape_filter_block->shape_filter[1].gain_offset = shape_filt_lf_gain_offset_tbl[params->corner_freq_index][params->filter_strength_index];
- shape_filter_block->shape_filter[1].y1_bound = shape_filt_lf_y1_bound_tbl[params->corner_freq_index][params->filter_strength_index];
- x1 = - shape_filt_lf_radius_tbl[params->corner_freq_index];
- shape_filter_block->shape_filter[1].warped_gain_max = SHAPE_FILTER_DRC_GAIN_MAX_MINUS_ONE / (SHAPE_FILTER_DRC_GAIN_MAX_MINUS_ONE + shape_filter_block->shape_filter[1].gain_offset);
- shape_filter_block->shape_filter[1].factor = (shape_filter_block->shape_filter[1].y1_bound - x1) / shape_filter_block->shape_filter[1].warped_gain_max;
- shape_filter_block->shape_filter[1].b1 = x1;
+WORD32 impd_shape_filt_block_init(
+ ia_shape_filter_block_params_struct* shape_flter_block_params,
+ shape_filter_block* shape_filter_block) {
+ // WORD32 err = 0;
+ FLOAT32 x1;
+ FLOAT32 x2 = 0.0f;
+ FLOAT32 radius;
+ if (shape_flter_block_params->lf_cut_filter_present) {
+ ia_shape_filter_params_struct* params =
+ &shape_flter_block_params->str_lf_cut_params;
+ shape_filter_block->shape_filter[0].type = SHAPE_FILTER_TYPE_LF_CUT;
+ shape_filter_block->shape_filter[0].gain_offset =
+ shape_filt_lf_gain_offset_tbl[params->corner_freq_index]
+ [params->filter_strength_index];
+ shape_filter_block->shape_filter[0].y1_bound =
+ shape_filt_lf_y1_bound_tbl[params->corner_freq_index]
+ [params->filter_strength_index];
+ x1 = -shape_filt_lf_radius_tbl[params->corner_freq_index];
+ shape_filter_block->shape_filter[0].warped_gain_max =
+ SHAPE_FILTER_DRC_GAIN_MAX_MINUS_ONE /
+ (SHAPE_FILTER_DRC_GAIN_MAX_MINUS_ONE +
+ shape_filter_block->shape_filter[0].gain_offset);
+ shape_filter_block->shape_filter[0].factor =
+ (shape_filter_block->shape_filter[0].y1_bound - x1) /
+ shape_filter_block->shape_filter[0].warped_gain_max;
+ shape_filter_block->shape_filter[0].a1 = x1;
- }
- else
- {
- shape_filter_block->shape_filter[1].type = SHAPE_FILTER_TYPE_OFF;
- }
- if (shape_flter_block_params->hf_cut_filter_present) {
-
- ia_shape_filter_params_struct* params = &shape_flter_block_params->str_hfCutParams;
- shape_filter_block->shape_filter[2].type = SHAPE_FILTER_TYPE_HF_CUT;
- shape_filter_block->shape_filter[2].gain_offset = shape_filt_hf_gain_offset_tbl[params->corner_freq_index][params->filter_strength_index];
- shape_filter_block->shape_filter[2].y1_bound = shape_filt_hf_y1_bound_tbl[params->corner_freq_index][params->filter_strength_index];
- radius = shape_filt_hf_radius_tbl[params->corner_freq_index];
- x1 = (FLOAT32)(- 2.0f * radius * cos(2.0f * M_PI * shape_filt_cutoff_freq_norm_hf_tbl[params->corner_freq_index]));
- x2 = radius * radius;
- shape_filter_block->shape_filter[2].warped_gain_max = SHAPE_FILTER_DRC_GAIN_MAX_MINUS_ONE / (SHAPE_FILTER_DRC_GAIN_MAX_MINUS_ONE + shape_filter_block->shape_filter[2].gain_offset);
- shape_filter_block->shape_filter[2].factor = (shape_filter_block->shape_filter[2].y1_bound - x1) / shape_filter_block->shape_filter[2].warped_gain_max;
- shape_filter_block->shape_filter[2].coeff_sum = 1.0f + x1 + x2;
- shape_filter_block->shape_filter[2].partial_coeff_sum = 1.0f + x2;
- shape_filter_block->shape_filter[2].a1 = x1;
- shape_filter_block->shape_filter[2].a2 = x2;
- shape_filter_block->shape_filter[2].b2 = x2;
- }
- else
- {
- shape_filter_block->shape_filter[2].type = SHAPE_FILTER_TYPE_OFF;
- }
- if (shape_flter_block_params->hf_boost_filter_present) {
+ } else {
+ shape_filter_block->shape_filter[0].type = SHAPE_FILTER_TYPE_OFF;
+ }
+ if (shape_flter_block_params->lf_boost_filter_present) {
+ ia_shape_filter_params_struct* params =
+ &shape_flter_block_params->str_lf_boost_params;
+ shape_filter_block->shape_filter[1].type = SHAPE_FILTER_TYPE_LF_BOOST;
+ shape_filter_block->shape_filter[1].gain_offset =
+ shape_filt_lf_gain_offset_tbl[params->corner_freq_index]
+ [params->filter_strength_index];
+ shape_filter_block->shape_filter[1].y1_bound =
+ shape_filt_lf_y1_bound_tbl[params->corner_freq_index]
+ [params->filter_strength_index];
+ x1 = -shape_filt_lf_radius_tbl[params->corner_freq_index];
+ shape_filter_block->shape_filter[1].warped_gain_max =
+ SHAPE_FILTER_DRC_GAIN_MAX_MINUS_ONE /
+ (SHAPE_FILTER_DRC_GAIN_MAX_MINUS_ONE +
+ shape_filter_block->shape_filter[1].gain_offset);
+ shape_filter_block->shape_filter[1].factor =
+ (shape_filter_block->shape_filter[1].y1_bound - x1) /
+ shape_filter_block->shape_filter[1].warped_gain_max;
+ shape_filter_block->shape_filter[1].b1 = x1;
- ia_shape_filter_params_struct* params = &shape_flter_block_params->str_hf_boost_params;
- shape_filter_block->shape_filter[3].type = SHAPE_FILTER_TYPE_HF_BOOST;
- shape_filter_block->shape_filter[3].gain_offset = shape_filt_hf_gain_offset_tbl[params->corner_freq_index][params->filter_strength_index];
- shape_filter_block->shape_filter[3].y1_bound = shape_filt_hf_y1_bound_tbl[params->corner_freq_index][params->filter_strength_index];
- radius = shape_filt_hf_radius_tbl[params->corner_freq_index];
- x1 = (FLOAT32)(- 2.0f * radius * cos(2.0f * M_PI * shape_filt_cutoff_freq_norm_hf_tbl[params->corner_freq_index]));
- x2 = radius * radius;
- shape_filter_block->shape_filter[3].warped_gain_max = SHAPE_FILTER_DRC_GAIN_MAX_MINUS_ONE / (SHAPE_FILTER_DRC_GAIN_MAX_MINUS_ONE + shape_filter_block->shape_filter[3].gain_offset);
- shape_filter_block->shape_filter[3].factor = (shape_filter_block->shape_filter[3].y1_bound - x1) / shape_filter_block->shape_filter[3].warped_gain_max;
- shape_filter_block->shape_filter[3].coeff_sum = 1.0f + x1 + x2;
- shape_filter_block->shape_filter[3].partial_coeff_sum = 1.0f + x2;
- shape_filter_block->shape_filter[3].b1 = x1;
- shape_filter_block->shape_filter[3].b2 = x2;
- shape_filter_block->shape_filter[3].a2 = x2;
+ } else {
+ shape_filter_block->shape_filter[1].type = SHAPE_FILTER_TYPE_OFF;
+ }
+ if (shape_flter_block_params->hf_cut_filter_present) {
+ ia_shape_filter_params_struct* params =
+ &shape_flter_block_params->str_hfCutParams;
+ shape_filter_block->shape_filter[2].type = SHAPE_FILTER_TYPE_HF_CUT;
+ shape_filter_block->shape_filter[2].gain_offset =
+ shape_filt_hf_gain_offset_tbl[params->corner_freq_index]
+ [params->filter_strength_index];
+ shape_filter_block->shape_filter[2].y1_bound =
+ shape_filt_hf_y1_bound_tbl[params->corner_freq_index]
+ [params->filter_strength_index];
+ radius = shape_filt_hf_radius_tbl[params->corner_freq_index];
+ x1 = (FLOAT32)(
+ -2.0f * radius *
+ cos(2.0f * M_PI *
+ shape_filt_cutoff_freq_norm_hf_tbl[params->corner_freq_index]));
+ x2 = radius * radius;
+ shape_filter_block->shape_filter[2].warped_gain_max =
+ SHAPE_FILTER_DRC_GAIN_MAX_MINUS_ONE /
+ (SHAPE_FILTER_DRC_GAIN_MAX_MINUS_ONE +
+ shape_filter_block->shape_filter[2].gain_offset);
+ shape_filter_block->shape_filter[2].factor =
+ (shape_filter_block->shape_filter[2].y1_bound - x1) /
+ shape_filter_block->shape_filter[2].warped_gain_max;
+ shape_filter_block->shape_filter[2].coeff_sum = 1.0f + x1 + x2;
+ shape_filter_block->shape_filter[2].partial_coeff_sum = 1.0f + x2;
+ shape_filter_block->shape_filter[2].a1 = x1;
+ shape_filter_block->shape_filter[2].a2 = x2;
+ shape_filter_block->shape_filter[2].b2 = x2;
+ } else {
+ shape_filter_block->shape_filter[2].type = SHAPE_FILTER_TYPE_OFF;
+ }
+ if (shape_flter_block_params->hf_boost_filter_present) {
+ ia_shape_filter_params_struct* params =
+ &shape_flter_block_params->str_hf_boost_params;
+ shape_filter_block->shape_filter[3].type = SHAPE_FILTER_TYPE_HF_BOOST;
+ shape_filter_block->shape_filter[3].gain_offset =
+ shape_filt_hf_gain_offset_tbl[params->corner_freq_index]
+ [params->filter_strength_index];
+ shape_filter_block->shape_filter[3].y1_bound =
+ shape_filt_hf_y1_bound_tbl[params->corner_freq_index]
+ [params->filter_strength_index];
+ radius = shape_filt_hf_radius_tbl[params->corner_freq_index];
+ x1 = (FLOAT32)(
+ -2.0f * radius *
+ cos(2.0f * M_PI *
+ shape_filt_cutoff_freq_norm_hf_tbl[params->corner_freq_index]));
+ x2 = radius * radius;
+ shape_filter_block->shape_filter[3].warped_gain_max =
+ SHAPE_FILTER_DRC_GAIN_MAX_MINUS_ONE /
+ (SHAPE_FILTER_DRC_GAIN_MAX_MINUS_ONE +
+ shape_filter_block->shape_filter[3].gain_offset);
+ shape_filter_block->shape_filter[3].factor =
+ (shape_filter_block->shape_filter[3].y1_bound - x1) /
+ shape_filter_block->shape_filter[3].warped_gain_max;
+ shape_filter_block->shape_filter[3].coeff_sum = 1.0f + x1 + x2;
+ shape_filter_block->shape_filter[3].partial_coeff_sum = 1.0f + x2;
+ shape_filter_block->shape_filter[3].b1 = x1;
+ shape_filter_block->shape_filter[3].b2 = x2;
+ shape_filter_block->shape_filter[3].a2 = x2;
-
- }
- else
- {
- shape_filter_block->shape_filter[3].type = SHAPE_FILTER_TYPE_OFF;
- }
- resetshape_flter_block(shape_filter_block);
- shape_filter_block->shape_flter_block_flag = 1;
- return (0);
+ } else {
+ shape_filter_block->shape_filter[3].type = SHAPE_FILTER_TYPE_OFF;
+ }
+ resetshape_flter_block(shape_filter_block);
+ shape_filter_block->shape_flter_block_flag = 1;
+ return (0);
}
+WORD32 impd_shape_filt_block_time_process(
+ shape_filter_block* shape_filter_block, FLOAT32* drc_gain,
+ const WORD32 channel, FLOAT32* audio_in, WORD32 start, WORD32 end) {
+ WORD32 i, j, err = 0;
+ FLOAT32 audio_out;
+ if (shape_filter_block->shape_flter_block_flag) {
+ for (i = start; i < end; i++) {
+ FLOAT32 tmp = audio_in[i];
+ for (j = 0; j < 4; j++) {
+ if (shape_filter_block->shape_filter[j].type ==
+ SHAPE_FILTER_TYPE_LF_CUT ||
+ shape_filter_block->shape_filter[j].type ==
+ SHAPE_FILTER_TYPE_LF_BOOST) {
+ audio_out = tmp +
+ shape_filter_block->shape_filter[j].b1 *
+ shape_filter_block->shape_filter[j]
+ .audio_in_state_1[channel] -
+ shape_filter_block->shape_filter[j].a1 *
+ shape_filter_block->shape_filter[j]
+ .audio_out_state_1[channel];
+ shape_filter_block->shape_filter[j].audio_in_state_1[channel] = tmp;
+ shape_filter_block->shape_filter[j].audio_out_state_1[channel] =
+ audio_out;
-WORD32 impd_shape_filt_block_time_process(shape_filter_block* shape_filter_block,
- FLOAT32* drc_gain,
- const WORD32 channel,
- FLOAT32 *audio_in,
- WORD32 start,
- WORD32 end)
-{
- WORD32 i,j, err=0;
- FLOAT32 audio_out;
-
- if(shape_filter_block->shape_flter_block_flag){
- for (i=start; i<end; i++)
-{
- FLOAT32 tmp = audio_in[i];
- for (j=0; j<4; j++) {
- if(shape_filter_block->shape_filter[j].type==SHAPE_FILTER_TYPE_LF_CUT||shape_filter_block->shape_filter[j].type==SHAPE_FILTER_TYPE_LF_BOOST){
-
- audio_out = tmp + shape_filter_block->shape_filter[j].b1 * shape_filter_block->shape_filter[j].audio_in_state_1[channel]
- - shape_filter_block->shape_filter[j].a1 * shape_filter_block->shape_filter[j].audio_out_state_1[channel];
- shape_filter_block->shape_filter[j].audio_in_state_1[channel] = tmp;
- shape_filter_block->shape_filter[j].audio_out_state_1[channel] = audio_out;
-
- }
- else if(shape_filter_block->shape_filter[j].type==SHAPE_FILTER_TYPE_HF_CUT||shape_filter_block->shape_filter[j].type==SHAPE_FILTER_TYPE_HF_BOOST){
-
- audio_out = shape_filter_block->shape_filter[j].g_norm * tmp + shape_filter_block->shape_filter[j].b1 * shape_filter_block->shape_filter[j].audio_in_state_1[channel]
- + shape_filter_block->shape_filter[j].b2 * shape_filter_block->shape_filter[j].audio_in_state_2[channel]
- - shape_filter_block->shape_filter[j].a1 * shape_filter_block->shape_filter[j].audio_out_state_1[channel]
- - shape_filter_block->shape_filter[j].a2 * shape_filter_block->shape_filter[j].audio_out_state_2[channel];
- shape_filter_block->shape_filter[j].audio_in_state_2[channel] = shape_filter_block->shape_filter[j].audio_in_state_1[channel];
- shape_filter_block->shape_filter[j].audio_in_state_1[channel] = shape_filter_block->shape_filter[j].g_norm * tmp;
- shape_filter_block->shape_filter[j].audio_out_state_2[channel] = shape_filter_block->shape_filter[j].audio_out_state_1[channel];
- shape_filter_block->shape_filter[j].audio_out_state_1[channel] = audio_out;
- }
- else
- {
- audio_out = tmp;
- }
- tmp = audio_out;
-
- }
-
- audio_in[i] = audio_out * drc_gain[i];
+ } else if (shape_filter_block->shape_filter[j].type ==
+ SHAPE_FILTER_TYPE_HF_CUT ||
+ shape_filter_block->shape_filter[j].type ==
+ SHAPE_FILTER_TYPE_HF_BOOST) {
+ audio_out = shape_filter_block->shape_filter[j].g_norm * tmp +
+ shape_filter_block->shape_filter[j].b1 *
+ shape_filter_block->shape_filter[j]
+ .audio_in_state_1[channel] +
+ shape_filter_block->shape_filter[j].b2 *
+ shape_filter_block->shape_filter[j]
+ .audio_in_state_2[channel] -
+ shape_filter_block->shape_filter[j].a1 *
+ shape_filter_block->shape_filter[j]
+ .audio_out_state_1[channel] -
+ shape_filter_block->shape_filter[j].a2 *
+ shape_filter_block->shape_filter[j]
+ .audio_out_state_2[channel];
+ shape_filter_block->shape_filter[j].audio_in_state_2[channel] =
+ shape_filter_block->shape_filter[j].audio_in_state_1[channel];
+ shape_filter_block->shape_filter[j].audio_in_state_1[channel] =
+ shape_filter_block->shape_filter[j].g_norm * tmp;
+ shape_filter_block->shape_filter[j].audio_out_state_2[channel] =
+ shape_filter_block->shape_filter[j].audio_out_state_1[channel];
+ shape_filter_block->shape_filter[j].audio_out_state_1[channel] =
+ audio_out;
+ } else {
+ audio_out = tmp;
}
+ tmp = audio_out;
+ }
+ audio_in[i] = audio_out * drc_gain[i];
}
- else{
- for (i=start; i<end; i++){
- audio_in[i] = audio_in[i] * drc_gain[i];
- }
+ } else {
+ for (i = start; i < end; i++) {
+ audio_in[i] = audio_in[i] * drc_gain[i];
}
+ }
- return err;
+ return err;
}
diff --git a/decoder/drc_src/impd_drc_static_payload.c b/decoder/drc_src/impd_drc_static_payload.c
index 033674b..3f73f09 100644
--- a/decoder/drc_src/impd_drc_static_payload.c
+++ b/decoder/drc_src/impd_drc_static_payload.c
@@ -29,2522 +29,2351 @@
#include "impd_drc_filter_bank.h"
#include "impd_drc_rom.h"
+static VOID impd_parametric_drc_ffwd_init_drc_curve_params(
+ WORD32 drc_characteristic, ia_parametric_drc_type_feed_forward_struct*
+ str_parametric_drc_type_feed_forward) {
+ WORD32* node_level = str_parametric_drc_type_feed_forward->node_level;
+ WORD32* node_gain = str_parametric_drc_type_feed_forward->node_gain;
-static VOID impd_parametric_drc_ffwd_init_drc_curve_params(WORD32 drc_characteristic,
- ia_parametric_drc_type_feed_forward_struct* str_parametric_drc_type_feed_forward)
-{
- WORD32* node_level = str_parametric_drc_type_feed_forward->node_level;
- WORD32* node_gain = str_parametric_drc_type_feed_forward->node_gain;
-
- switch (drc_characteristic) {
- case 7:
- str_parametric_drc_type_feed_forward->node_count = 5;
- node_level[0] = -22; node_gain[0] = 6;
- node_level[1] = -10; node_gain[1] = 0;
- node_level[2] = 10; node_gain[2] = 0;
- node_level[3] = 20; node_gain[3] = -5;
- node_level[4] = 40; node_gain[4] = -24;
- break;
- case 8:
- str_parametric_drc_type_feed_forward->node_count = 5;
- node_level[0] = -12; node_gain[0] = 6;
- node_level[1] = 0; node_gain[1] = 0;
- node_level[2] = 5; node_gain[2] = 0;
- node_level[3] = 15; node_gain[3] = -5;
- node_level[4] = 35; node_gain[4] = -24;
- break;
- case 9:
- str_parametric_drc_type_feed_forward->node_count = 4;
- node_level[0] = -34; node_gain[0] = 12;
- node_level[1] = -10; node_gain[1] = 0;
- node_level[2] = 10; node_gain[2] = 0;
- node_level[3] = 40; node_gain[3] = -15;
- break;
- case 10:
- str_parametric_drc_type_feed_forward->node_count = 5;
- node_level[0] = -24; node_gain[0] = 12;
- node_level[1] = 0; node_gain[1] = 0;
- node_level[2] = 5; node_gain[2] = 0;
- node_level[3] = 15; node_gain[3] = -5;
- node_level[4] = 35; node_gain[4] = -24;
- break;
- case 11:
- str_parametric_drc_type_feed_forward->node_count = 5;
- node_level[0] = -19; node_gain[0] = 15;
- node_level[1] = 0; node_gain[1] = 0;
- node_level[2] = 5; node_gain[2] = 0;
- node_level[3] = 15; node_gain[3] = -5;
- node_level[4] = 35; node_gain[4] = -24;
- break;
- default:
- str_parametric_drc_type_feed_forward->disable_paramteric_drc = 1;
- }
+ switch (drc_characteristic) {
+ case 7:
+ str_parametric_drc_type_feed_forward->node_count = 5;
+ node_level[0] = -22;
+ node_gain[0] = 6;
+ node_level[1] = -10;
+ node_gain[1] = 0;
+ node_level[2] = 10;
+ node_gain[2] = 0;
+ node_level[3] = 20;
+ node_gain[3] = -5;
+ node_level[4] = 40;
+ node_gain[4] = -24;
+ break;
+ case 8:
+ str_parametric_drc_type_feed_forward->node_count = 5;
+ node_level[0] = -12;
+ node_gain[0] = 6;
+ node_level[1] = 0;
+ node_gain[1] = 0;
+ node_level[2] = 5;
+ node_gain[2] = 0;
+ node_level[3] = 15;
+ node_gain[3] = -5;
+ node_level[4] = 35;
+ node_gain[4] = -24;
+ break;
+ case 9:
+ str_parametric_drc_type_feed_forward->node_count = 4;
+ node_level[0] = -34;
+ node_gain[0] = 12;
+ node_level[1] = -10;
+ node_gain[1] = 0;
+ node_level[2] = 10;
+ node_gain[2] = 0;
+ node_level[3] = 40;
+ node_gain[3] = -15;
+ break;
+ case 10:
+ str_parametric_drc_type_feed_forward->node_count = 5;
+ node_level[0] = -24;
+ node_gain[0] = 12;
+ node_level[1] = 0;
+ node_gain[1] = 0;
+ node_level[2] = 5;
+ node_gain[2] = 0;
+ node_level[3] = 15;
+ node_gain[3] = -5;
+ node_level[4] = 35;
+ node_gain[4] = -24;
+ break;
+ case 11:
+ str_parametric_drc_type_feed_forward->node_count = 5;
+ node_level[0] = -19;
+ node_gain[0] = 15;
+ node_level[1] = 0;
+ node_gain[1] = 0;
+ node_level[2] = 5;
+ node_gain[2] = 0;
+ node_level[3] = 15;
+ node_gain[3] = -5;
+ node_level[4] = 35;
+ node_gain[4] = -24;
+ break;
+ default:
+ str_parametric_drc_type_feed_forward->disable_paramteric_drc = 1;
+ }
- return;
+ return;
}
-static VOID impd_parametric_drc_ffwd_init_drc_gain_smooth_params(WORD32 drc_characteristic,
- ia_parametric_drc_type_feed_forward_struct* str_parametric_drc_type_feed_forward)
-{
- str_parametric_drc_type_feed_forward->gain_smooth_attack_time_slow = 100;
- str_parametric_drc_type_feed_forward->gain_smooth_time_fast_present = 1;
- str_parametric_drc_type_feed_forward->gain_smooth_attack_time_fast = 10;
- str_parametric_drc_type_feed_forward->gain_smooth_threshold_present = 1;
- str_parametric_drc_type_feed_forward->gain_smooth_hold_off_count_present = 1;
- str_parametric_drc_type_feed_forward->gain_smooth_hold_off = 10;
-
- switch (drc_characteristic)
- {
+static VOID impd_parametric_drc_ffwd_init_drc_gain_smooth_params(
+ WORD32 drc_characteristic, ia_parametric_drc_type_feed_forward_struct*
+ str_parametric_drc_type_feed_forward) {
+ str_parametric_drc_type_feed_forward->gain_smooth_attack_time_slow = 100;
+ str_parametric_drc_type_feed_forward->gain_smooth_time_fast_present = 1;
+ str_parametric_drc_type_feed_forward->gain_smooth_attack_time_fast = 10;
+ str_parametric_drc_type_feed_forward->gain_smooth_threshold_present = 1;
+ str_parametric_drc_type_feed_forward->gain_smooth_hold_off_count_present = 1;
+ str_parametric_drc_type_feed_forward->gain_smooth_hold_off = 10;
+
+ switch (drc_characteristic) {
case 7:
case 8:
case 9:
- str_parametric_drc_type_feed_forward->gain_smooth_release_time_slow = 3000;
- str_parametric_drc_type_feed_forward->gain_smooth_release_time_fast = 1000;
- str_parametric_drc_type_feed_forward->gain_smooth_attack_threshold = 15;
- str_parametric_drc_type_feed_forward->gain_smooth_rel_threshold = 20;
- break;
+ str_parametric_drc_type_feed_forward->gain_smooth_release_time_slow =
+ 3000;
+ str_parametric_drc_type_feed_forward->gain_smooth_release_time_fast =
+ 1000;
+ str_parametric_drc_type_feed_forward->gain_smooth_attack_threshold = 15;
+ str_parametric_drc_type_feed_forward->gain_smooth_rel_threshold = 20;
+ break;
case 10:
- str_parametric_drc_type_feed_forward->gain_smooth_release_time_slow = 10000;
- str_parametric_drc_type_feed_forward->gain_smooth_release_time_fast = 1000;
- str_parametric_drc_type_feed_forward->gain_smooth_attack_threshold = 15;
- str_parametric_drc_type_feed_forward->gain_smooth_rel_threshold = 20;
- break;
+ str_parametric_drc_type_feed_forward->gain_smooth_release_time_slow =
+ 10000;
+ str_parametric_drc_type_feed_forward->gain_smooth_release_time_fast =
+ 1000;
+ str_parametric_drc_type_feed_forward->gain_smooth_attack_threshold = 15;
+ str_parametric_drc_type_feed_forward->gain_smooth_rel_threshold = 20;
+ break;
case 11:
- str_parametric_drc_type_feed_forward->gain_smooth_release_time_slow = 1000;
- str_parametric_drc_type_feed_forward->gain_smooth_release_time_fast = 200;
- str_parametric_drc_type_feed_forward->gain_smooth_attack_threshold = 10;
- str_parametric_drc_type_feed_forward->gain_smooth_rel_threshold = 10;
- break;
+ str_parametric_drc_type_feed_forward->gain_smooth_release_time_slow =
+ 1000;
+ str_parametric_drc_type_feed_forward->gain_smooth_release_time_fast = 200;
+ str_parametric_drc_type_feed_forward->gain_smooth_attack_threshold = 10;
+ str_parametric_drc_type_feed_forward->gain_smooth_rel_threshold = 10;
+ break;
default:
- str_parametric_drc_type_feed_forward->gain_smooth_release_time_slow = 3000;
- str_parametric_drc_type_feed_forward->gain_smooth_release_time_fast = 1000;
- str_parametric_drc_type_feed_forward->gain_smooth_attack_threshold = 15;
- str_parametric_drc_type_feed_forward->gain_smooth_rel_threshold = 20;
- break;
- }
-
- return;
+ str_parametric_drc_type_feed_forward->gain_smooth_release_time_slow =
+ 3000;
+ str_parametric_drc_type_feed_forward->gain_smooth_release_time_fast =
+ 1000;
+ str_parametric_drc_type_feed_forward->gain_smooth_attack_threshold = 15;
+ str_parametric_drc_type_feed_forward->gain_smooth_rel_threshold = 20;
+ break;
+ }
+
+ return;
}
-static WORD32 impd_parse_parametric_drc_ffwd(ia_bit_buf_struct* it_bit_buff,
- WORD32 parametric_drc_frame_size,
- ia_parametric_drc_type_feed_forward_struct* str_parametric_drc_type_feed_forward)
-{
- WORD32 i = 0, tmp = 0;
- //WORD32 err = 0;
-
- str_parametric_drc_type_feed_forward->disable_paramteric_drc = 0;
-
- tmp = impd_read_bits_buf(it_bit_buff, 3);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- str_parametric_drc_type_feed_forward->level_estim_k_weighting_type = (tmp>>1)&3;
- str_parametric_drc_type_feed_forward->level_estim_integration_time_present = tmp&1;
-
- if (str_parametric_drc_type_feed_forward->level_estim_integration_time_present)
- {
- tmp = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- str_parametric_drc_type_feed_forward->level_estim_integration_time = (tmp+1)*parametric_drc_frame_size;
- } else
- {
- str_parametric_drc_type_feed_forward->level_estim_integration_time = parametric_drc_frame_size;
- }
-
- str_parametric_drc_type_feed_forward->drc_curve_definition_type = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if (str_parametric_drc_type_feed_forward->drc_curve_definition_type == 0)
- {
- str_parametric_drc_type_feed_forward->drc_characteristic = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- impd_parametric_drc_ffwd_init_drc_curve_params(str_parametric_drc_type_feed_forward->drc_characteristic, str_parametric_drc_type_feed_forward);
- }
- else
- {
- str_parametric_drc_type_feed_forward->drc_characteristic = 0;
-
- tmp = impd_read_bits_buf(it_bit_buff, 15);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- str_parametric_drc_type_feed_forward->node_count = ((tmp>>12)&3) + 2;
- str_parametric_drc_type_feed_forward->node_level[0] = -11-((tmp>>6)&0x3f);
- str_parametric_drc_type_feed_forward->node_gain[0] = (tmp&0x3f)-39;
-
- for (i=1; i<str_parametric_drc_type_feed_forward->node_count; i++)
- {
- tmp = impd_read_bits_buf(it_bit_buff, 11);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- str_parametric_drc_type_feed_forward->node_level[i] = str_parametric_drc_type_feed_forward->node_level[i-1]+1+((tmp>>6)&0x1f);
- str_parametric_drc_type_feed_forward->node_gain[i] = (tmp&0x3f)-39;
- }
- }
-
- impd_parametric_drc_ffwd_init_drc_gain_smooth_params(str_parametric_drc_type_feed_forward->drc_characteristic, str_parametric_drc_type_feed_forward);
-
- str_parametric_drc_type_feed_forward->drc_gain_smooth_parameters_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (str_parametric_drc_type_feed_forward->drc_gain_smooth_parameters_present)
- {
-
- tmp = impd_read_bits_buf(it_bit_buff, 17);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- str_parametric_drc_type_feed_forward->gain_smooth_attack_time_slow = ((tmp>>9)&0xff)*5;
- str_parametric_drc_type_feed_forward->gain_smooth_release_time_slow = ((tmp>>1)&0xff)*40;
- str_parametric_drc_type_feed_forward->gain_smooth_time_fast_present = tmp&1;
-
- if (str_parametric_drc_type_feed_forward->gain_smooth_time_fast_present)
- {
-
- tmp = impd_read_bits_buf(it_bit_buff, 17);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- str_parametric_drc_type_feed_forward->gain_smooth_attack_time_fast = ((tmp>>9)&0xff)*5;
- str_parametric_drc_type_feed_forward->gain_smooth_release_time_fast = ((tmp>>1)&0xff)*20;
- str_parametric_drc_type_feed_forward->gain_smooth_threshold_present = tmp&1;
-
- if (str_parametric_drc_type_feed_forward->gain_smooth_threshold_present)
- {
- str_parametric_drc_type_feed_forward->gain_smooth_attack_threshold = impd_read_bits_buf(it_bit_buff, 5);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if ( str_parametric_drc_type_feed_forward->gain_smooth_attack_threshold == 31)
- {
- str_parametric_drc_type_feed_forward->gain_smooth_attack_threshold = 1000;
- }
-
- str_parametric_drc_type_feed_forward->gain_smooth_rel_threshold = impd_read_bits_buf(it_bit_buff, 5);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (str_parametric_drc_type_feed_forward->gain_smooth_rel_threshold == 31)
- {
- str_parametric_drc_type_feed_forward->gain_smooth_rel_threshold = 1000;
- }
- }
- }
- else
- {
- str_parametric_drc_type_feed_forward->gain_smooth_attack_time_fast = str_parametric_drc_type_feed_forward->gain_smooth_attack_time_slow;
- str_parametric_drc_type_feed_forward->gain_smooth_release_time_fast = str_parametric_drc_type_feed_forward->gain_smooth_release_time_slow;
- }
-
- str_parametric_drc_type_feed_forward->gain_smooth_hold_off_count_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if (str_parametric_drc_type_feed_forward->gain_smooth_hold_off_count_present)
- {
- str_parametric_drc_type_feed_forward->gain_smooth_hold_off = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- }
- return 0;
+static WORD32 impd_parse_parametric_drc_ffwd(
+ ia_bit_buf_struct* it_bit_buff, WORD32 parametric_drc_frame_size,
+ ia_parametric_drc_type_feed_forward_struct*
+ str_parametric_drc_type_feed_forward) {
+ WORD32 i = 0, tmp = 0;
+ // WORD32 err = 0;
+
+ str_parametric_drc_type_feed_forward->disable_paramteric_drc = 0;
+
+ tmp = impd_read_bits_buf(it_bit_buff, 3);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ str_parametric_drc_type_feed_forward->level_estim_k_weighting_type =
+ (tmp >> 1) & 3;
+ str_parametric_drc_type_feed_forward->level_estim_integration_time_present =
+ tmp & 1;
+
+ if (str_parametric_drc_type_feed_forward
+ ->level_estim_integration_time_present) {
+ tmp = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ str_parametric_drc_type_feed_forward->level_estim_integration_time =
+ (tmp + 1) * parametric_drc_frame_size;
+ } else {
+ str_parametric_drc_type_feed_forward->level_estim_integration_time =
+ parametric_drc_frame_size;
+ }
+
+ str_parametric_drc_type_feed_forward->drc_curve_definition_type =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (str_parametric_drc_type_feed_forward->drc_curve_definition_type == 0) {
+ str_parametric_drc_type_feed_forward->drc_characteristic =
+ impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ impd_parametric_drc_ffwd_init_drc_curve_params(
+ str_parametric_drc_type_feed_forward->drc_characteristic,
+ str_parametric_drc_type_feed_forward);
+ } else {
+ str_parametric_drc_type_feed_forward->drc_characteristic = 0;
+
+ tmp = impd_read_bits_buf(it_bit_buff, 15);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ str_parametric_drc_type_feed_forward->node_count = ((tmp >> 12) & 3) + 2;
+ str_parametric_drc_type_feed_forward->node_level[0] =
+ -11 - ((tmp >> 6) & 0x3f);
+ str_parametric_drc_type_feed_forward->node_gain[0] = (tmp & 0x3f) - 39;
+
+ for (i = 1; i < str_parametric_drc_type_feed_forward->node_count; i++) {
+ tmp = impd_read_bits_buf(it_bit_buff, 11);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ str_parametric_drc_type_feed_forward->node_level[i] =
+ str_parametric_drc_type_feed_forward->node_level[i - 1] + 1 +
+ ((tmp >> 6) & 0x1f);
+ str_parametric_drc_type_feed_forward->node_gain[i] = (tmp & 0x3f) - 39;
+ }
+ }
+
+ impd_parametric_drc_ffwd_init_drc_gain_smooth_params(
+ str_parametric_drc_type_feed_forward->drc_characteristic,
+ str_parametric_drc_type_feed_forward);
+
+ str_parametric_drc_type_feed_forward->drc_gain_smooth_parameters_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (str_parametric_drc_type_feed_forward
+ ->drc_gain_smooth_parameters_present) {
+ tmp = impd_read_bits_buf(it_bit_buff, 17);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ str_parametric_drc_type_feed_forward->gain_smooth_attack_time_slow =
+ ((tmp >> 9) & 0xff) * 5;
+ str_parametric_drc_type_feed_forward->gain_smooth_release_time_slow =
+ ((tmp >> 1) & 0xff) * 40;
+ str_parametric_drc_type_feed_forward->gain_smooth_time_fast_present =
+ tmp & 1;
+
+ if (str_parametric_drc_type_feed_forward->gain_smooth_time_fast_present) {
+ tmp = impd_read_bits_buf(it_bit_buff, 17);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ str_parametric_drc_type_feed_forward->gain_smooth_attack_time_fast =
+ ((tmp >> 9) & 0xff) * 5;
+ str_parametric_drc_type_feed_forward->gain_smooth_release_time_fast =
+ ((tmp >> 1) & 0xff) * 20;
+ str_parametric_drc_type_feed_forward->gain_smooth_threshold_present =
+ tmp & 1;
+
+ if (str_parametric_drc_type_feed_forward->gain_smooth_threshold_present) {
+ str_parametric_drc_type_feed_forward->gain_smooth_attack_threshold =
+ impd_read_bits_buf(it_bit_buff, 5);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (str_parametric_drc_type_feed_forward
+ ->gain_smooth_attack_threshold == 31) {
+ str_parametric_drc_type_feed_forward->gain_smooth_attack_threshold =
+ 1000;
+ }
+
+ str_parametric_drc_type_feed_forward->gain_smooth_rel_threshold =
+ impd_read_bits_buf(it_bit_buff, 5);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (str_parametric_drc_type_feed_forward->gain_smooth_rel_threshold ==
+ 31) {
+ str_parametric_drc_type_feed_forward->gain_smooth_rel_threshold =
+ 1000;
+ }
+ }
+ } else {
+ str_parametric_drc_type_feed_forward->gain_smooth_attack_time_fast =
+ str_parametric_drc_type_feed_forward->gain_smooth_attack_time_slow;
+ str_parametric_drc_type_feed_forward->gain_smooth_release_time_fast =
+ str_parametric_drc_type_feed_forward->gain_smooth_release_time_slow;
+ }
+
+ str_parametric_drc_type_feed_forward->gain_smooth_hold_off_count_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (str_parametric_drc_type_feed_forward
+ ->gain_smooth_hold_off_count_present) {
+ str_parametric_drc_type_feed_forward->gain_smooth_hold_off =
+ impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+ }
+ return 0;
}
-static WORD32 impd_parse_parametric_drc_lim(ia_bit_buf_struct* it_bit_buff,
- ia_parametric_drc_lim_struct* parametric_drc_lim)
-{
- //WORD32 err = 0;
- WORD32 tmp = 0;
-
- parametric_drc_lim->disable_paramteric_drc = 0;
-
- parametric_drc_lim->parametric_lim_threshold_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if (parametric_drc_lim->parametric_lim_threshold_present)
- {
- tmp = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- parametric_drc_lim->parametric_lim_threshold = - tmp * 0.125f;
- } else
- {
- parametric_drc_lim->parametric_lim_threshold = PARAM_DRC_TYPE_LIM_THRESHOLD_DEFAULT;
- }
-
- parametric_drc_lim->parametric_lim_release_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (parametric_drc_lim->parametric_lim_release_present)
- {
- tmp = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- parametric_drc_lim->parametric_lim_release = tmp*10;
- }
- else
- {
- parametric_drc_lim->parametric_lim_release = PARAM_DRC_TYPE_LIM_RELEASE_DEFAULT;
- }
-
- parametric_drc_lim->parametric_lim_attack = PARAM_DRC_TYPE_LIM_ATTACK_DEFAULT;
- parametric_drc_lim->drc_characteristic = 0;
-
- return 0;
+static WORD32 impd_parse_parametric_drc_lim(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_parametric_drc_lim_struct* parametric_drc_lim) {
+ // WORD32 err = 0;
+ WORD32 tmp = 0;
+
+ parametric_drc_lim->disable_paramteric_drc = 0;
+
+ parametric_drc_lim->parametric_lim_threshold_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (parametric_drc_lim->parametric_lim_threshold_present) {
+ tmp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ parametric_drc_lim->parametric_lim_threshold = -tmp * 0.125f;
+ } else {
+ parametric_drc_lim->parametric_lim_threshold =
+ PARAM_DRC_TYPE_LIM_THRESHOLD_DEFAULT;
+ }
+
+ parametric_drc_lim->parametric_lim_release_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (parametric_drc_lim->parametric_lim_release_present) {
+ tmp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ parametric_drc_lim->parametric_lim_release = tmp * 10;
+ } else {
+ parametric_drc_lim->parametric_lim_release =
+ PARAM_DRC_TYPE_LIM_RELEASE_DEFAULT;
+ }
+
+ parametric_drc_lim->parametric_lim_attack = PARAM_DRC_TYPE_LIM_ATTACK_DEFAULT;
+ parametric_drc_lim->drc_characteristic = 0;
+
+ return 0;
}
WORD32
-impd_parametric_drc_parse_gain_set_params(ia_bit_buf_struct* it_bit_buff,
- ia_drc_config* drc_config,
- ia_parametric_drc_gain_set_params_struct* str_parametric_drc_gain_set_params)
-{
- WORD32 i = 0, bsDrcInputLoudness = 0, bs_channel_weight = 0, temp;
- //WORD32 err = 0;
- temp = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- str_parametric_drc_gain_set_params->parametric_drc_id = (temp>>3)&0xf;
- str_parametric_drc_gain_set_params->side_chain_config_type = temp&7;
-
- if (str_parametric_drc_gain_set_params->side_chain_config_type)
- {
-
- temp = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- str_parametric_drc_gain_set_params->downmix_id = (temp>>1)&0x7f;
- str_parametric_drc_gain_set_params->level_estim_channel_weight_format = temp&1;
-
- if (str_parametric_drc_gain_set_params->downmix_id == ID_FOR_BASE_LAYOUT)
- {
- str_parametric_drc_gain_set_params->ch_count_from_dwnmix_id = drc_config->channel_layout.base_channel_count;
- }
- else if (str_parametric_drc_gain_set_params->downmix_id == ID_FOR_ANY_DOWNMIX)
- {
- str_parametric_drc_gain_set_params->ch_count_from_dwnmix_id = 1;
- } else
- {
- for(i=0; i<drc_config->dwnmix_instructions_count; i++)
- {
- if (str_parametric_drc_gain_set_params->downmix_id == drc_config->dwnmix_instructions[i].downmix_id) break;
- }
- if (i == drc_config->dwnmix_instructions_count)
- {
- /* dwnmix_instructions not found */
- return(UNEXPECTED_ERROR);
- }
- str_parametric_drc_gain_set_params->ch_count_from_dwnmix_id = drc_config->dwnmix_instructions[i].target_channel_count;
- }
-
- for (i=0; i<str_parametric_drc_gain_set_params->ch_count_from_dwnmix_id; i++)
- {
- if (str_parametric_drc_gain_set_params->level_estim_channel_weight_format == 0)
- {
- str_parametric_drc_gain_set_params->level_estim_ch_weight[i] = (FLOAT32)impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- } else
- {
- bs_channel_weight = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- str_parametric_drc_gain_set_params->level_estim_ch_weight[i] = (FLOAT32)pow(10.0f, 0.05f * channel_weight[bs_channel_weight]);
- }
- }
- }
- else
- {
- str_parametric_drc_gain_set_params->downmix_id = 0;
- str_parametric_drc_gain_set_params->ch_count_from_dwnmix_id = 0;
- }
-
- str_parametric_drc_gain_set_params->drc_input_loudness_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if (str_parametric_drc_gain_set_params->drc_input_loudness_present)
- {
- bsDrcInputLoudness = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- str_parametric_drc_gain_set_params->drc_input_loudness = -57.75f + bsDrcInputLoudness * 0.25f;
- }
-
- return 0;
+impd_parametric_drc_parse_gain_set_params(
+ ia_bit_buf_struct* it_bit_buff, ia_drc_config* drc_config,
+ ia_parametric_drc_gain_set_params_struct*
+ str_parametric_drc_gain_set_params) {
+ WORD32 i = 0, bsDrcInputLoudness = 0, bs_channel_weight = 0, temp;
+ // WORD32 err = 0;
+ temp = impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ str_parametric_drc_gain_set_params->parametric_drc_id = (temp >> 3) & 0xf;
+ str_parametric_drc_gain_set_params->side_chain_config_type = temp & 7;
+
+ if (str_parametric_drc_gain_set_params->side_chain_config_type) {
+ temp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ str_parametric_drc_gain_set_params->downmix_id = (temp >> 1) & 0x7f;
+ str_parametric_drc_gain_set_params->level_estim_channel_weight_format =
+ temp & 1;
+
+ if (str_parametric_drc_gain_set_params->downmix_id == ID_FOR_BASE_LAYOUT) {
+ str_parametric_drc_gain_set_params->ch_count_from_dwnmix_id =
+ drc_config->channel_layout.base_channel_count;
+ } else if (str_parametric_drc_gain_set_params->downmix_id ==
+ ID_FOR_ANY_DOWNMIX) {
+ str_parametric_drc_gain_set_params->ch_count_from_dwnmix_id = 1;
+ } else {
+ for (i = 0; i < drc_config->dwnmix_instructions_count; i++) {
+ if (str_parametric_drc_gain_set_params->downmix_id ==
+ drc_config->dwnmix_instructions[i].downmix_id)
+ break;
+ }
+ if (i == drc_config->dwnmix_instructions_count) {
+ /* dwnmix_instructions not found */
+ return (UNEXPECTED_ERROR);
+ }
+ str_parametric_drc_gain_set_params->ch_count_from_dwnmix_id =
+ drc_config->dwnmix_instructions[i].target_channel_count;
+ }
+
+ for (i = 0; i < str_parametric_drc_gain_set_params->ch_count_from_dwnmix_id;
+ i++) {
+ if (str_parametric_drc_gain_set_params
+ ->level_estim_channel_weight_format == 0) {
+ str_parametric_drc_gain_set_params->level_estim_ch_weight[i] =
+ (FLOAT32)impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ } else {
+ bs_channel_weight = impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ str_parametric_drc_gain_set_params->level_estim_ch_weight[i] =
+ (FLOAT32)pow(10.0f, 0.05f * channel_weight[bs_channel_weight]);
+ }
+ }
+ } else {
+ str_parametric_drc_gain_set_params->downmix_id = 0;
+ str_parametric_drc_gain_set_params->ch_count_from_dwnmix_id = 0;
+ }
+
+ str_parametric_drc_gain_set_params->drc_input_loudness_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (str_parametric_drc_gain_set_params->drc_input_loudness_present) {
+ bsDrcInputLoudness = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ str_parametric_drc_gain_set_params->drc_input_loudness =
+ -57.75f + bsDrcInputLoudness * 0.25f;
+ }
+
+ return 0;
}
-static WORD32 impd_parametric_drc_gen_virtual_gain_sets(ia_drc_config* drc_config)
-{
-
- WORD32 i = 0, j = 0, c1 = -1, c0 = -1, parametric_drc_id = 0, drc_characteristic = 0;
- ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc;
- ia_parametric_drc_instructions_struct* str_parametric_drc_instructions;
- ia_drc_coeff_parametric_drc_struct* str_drc_coeff_param_drc = &(drc_config->str_drc_config_ext.str_drc_coeff_param_drc);
-
- for(i=0; i<drc_config->drc_coefficients_drc_count; i++)
- {
- if (drc_config->str_p_loc_drc_coefficients_uni_drc[i].drc_location == str_drc_coeff_param_drc->drc_location)
- {
- if (drc_config->str_p_loc_drc_coefficients_uni_drc[i].version == 0)
- {
- c0 = i;
- }
- else
- {
- c1 = i;
- }
- }
- }
- if (c1 >= 0)
- {
- str_p_loc_drc_coefficients_uni_drc = &(drc_config->str_p_loc_drc_coefficients_uni_drc[c1]);
- }
- else if (c0 >= 0)
- {
- str_p_loc_drc_coefficients_uni_drc = &(drc_config->str_p_loc_drc_coefficients_uni_drc[c0]);
- }
- else
- {
- str_p_loc_drc_coefficients_uni_drc = &drc_config->str_p_loc_drc_coefficients_uni_drc[drc_config->drc_coefficients_drc_count];
-
- str_p_loc_drc_coefficients_uni_drc->version = 1;
- str_p_loc_drc_coefficients_uni_drc->drc_location = str_drc_coeff_param_drc->drc_location;
- str_p_loc_drc_coefficients_uni_drc->drc_frame_size_present = 0;
-
- str_p_loc_drc_coefficients_uni_drc->gain_set_count = 0;
- str_p_loc_drc_coefficients_uni_drc->gain_set_count_plus = 0;
-
- str_p_loc_drc_coefficients_uni_drc->drc_characteristic_left_present = 0;
- str_p_loc_drc_coefficients_uni_drc->drc_characteristic_right_present = 0;
- str_p_loc_drc_coefficients_uni_drc->shape_filters_present = 0;
- str_p_loc_drc_coefficients_uni_drc->gain_sequence_count = 0;
- drc_config->drc_coefficients_drc_count += 1;
- }
- str_p_loc_drc_coefficients_uni_drc->gain_set_count_plus = str_p_loc_drc_coefficients_uni_drc->gain_set_count + str_drc_coeff_param_drc->parametric_drc_gain_set_count;
- for (i=str_p_loc_drc_coefficients_uni_drc->gain_set_count; i<str_p_loc_drc_coefficients_uni_drc->gain_set_count_plus; i++)
- {
- str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].band_count = 1;
-
- parametric_drc_id = drc_config->str_drc_config_ext.str_drc_coeff_param_drc.str_parametric_drc_gain_set_params[i-str_p_loc_drc_coefficients_uni_drc->gain_set_count].parametric_drc_id;
-
- for(j=0; j<drc_config->str_drc_config_ext.parametric_drc_instructions_count; j++)
- {
- if (parametric_drc_id == drc_config->str_drc_config_ext.str_parametric_drc_instructions[j].parametric_drc_id) break;
- }
- if (j == drc_config->str_drc_config_ext.parametric_drc_instructions_count)
- {
- /* str_parametric_drc_instructions not found */
- return(UNEXPECTED_ERROR);
- }
- str_parametric_drc_instructions = &drc_config->str_drc_config_ext.str_parametric_drc_instructions[j];
-
- drc_characteristic = 0;
- if (str_parametric_drc_instructions->parametric_drc_preset_id_present)
- {
- drc_characteristic = str_parametric_drc_instructions->drc_characteristic;
- }
- else if (str_parametric_drc_instructions->parametric_drc_type == PARAM_DRC_TYPE_FF)
- {
- if (str_parametric_drc_instructions->str_parametric_drc_type_feed_forward.drc_curve_definition_type == 0)
- {
- drc_characteristic = str_parametric_drc_instructions->str_parametric_drc_type_feed_forward.drc_characteristic;
- }
- }
- if (drc_characteristic != 0)
- {
- str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].gain_params[0].drc_characteristic_present = 1;
- str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].gain_params[0].drc_characteristic_format_is_cicp = 1;
- str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].gain_params[0].drc_characteristic = drc_characteristic;
- }
- else
- {
- str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].gain_params[0].drc_characteristic_present = 0;
- str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].gain_params[0].drc_characteristic_format_is_cicp = 0;
- str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].gain_params[0].drc_characteristic = 0;
- }
+static WORD32 impd_parametric_drc_gen_virtual_gain_sets(
+ ia_drc_config* drc_config) {
+ WORD32 i = 0, j = 0, c1 = -1, c0 = -1, parametric_drc_id = 0,
+ drc_characteristic = 0;
+ ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc;
+ ia_parametric_drc_instructions_struct* str_parametric_drc_instructions;
+ ia_drc_coeff_parametric_drc_struct* str_drc_coeff_param_drc =
+ &(drc_config->str_drc_config_ext.str_drc_coeff_param_drc);
+
+ for (i = 0; i < drc_config->drc_coefficients_drc_count; i++) {
+ if (drc_config->str_p_loc_drc_coefficients_uni_drc[i].drc_location ==
+ str_drc_coeff_param_drc->drc_location) {
+ if (drc_config->str_p_loc_drc_coefficients_uni_drc[i].version == 0) {
+ c0 = i;
+ } else {
+ c1 = i;
+ }
+ }
+ }
+ if (c1 >= 0) {
+ str_p_loc_drc_coefficients_uni_drc =
+ &(drc_config->str_p_loc_drc_coefficients_uni_drc[c1]);
+ } else if (c0 >= 0) {
+ str_p_loc_drc_coefficients_uni_drc =
+ &(drc_config->str_p_loc_drc_coefficients_uni_drc[c0]);
+ } else {
+ str_p_loc_drc_coefficients_uni_drc =
+ &drc_config->str_p_loc_drc_coefficients_uni_drc
+ [drc_config->drc_coefficients_drc_count];
+
+ str_p_loc_drc_coefficients_uni_drc->version = 1;
+ str_p_loc_drc_coefficients_uni_drc->drc_location =
+ str_drc_coeff_param_drc->drc_location;
+ str_p_loc_drc_coefficients_uni_drc->drc_frame_size_present = 0;
+
+ str_p_loc_drc_coefficients_uni_drc->gain_set_count = 0;
+ str_p_loc_drc_coefficients_uni_drc->gain_set_count_plus = 0;
+
+ str_p_loc_drc_coefficients_uni_drc->drc_characteristic_left_present = 0;
+ str_p_loc_drc_coefficients_uni_drc->drc_characteristic_right_present = 0;
+ str_p_loc_drc_coefficients_uni_drc->shape_filters_present = 0;
+ str_p_loc_drc_coefficients_uni_drc->gain_sequence_count = 0;
+ drc_config->drc_coefficients_drc_count += 1;
+ }
+ str_p_loc_drc_coefficients_uni_drc->gain_set_count_plus =
+ str_p_loc_drc_coefficients_uni_drc->gain_set_count +
+ str_drc_coeff_param_drc->parametric_drc_gain_set_count;
+ for (i = str_p_loc_drc_coefficients_uni_drc->gain_set_count;
+ i < str_p_loc_drc_coefficients_uni_drc->gain_set_count_plus; i++) {
+ str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].band_count = 1;
+
+ parametric_drc_id =
+ drc_config->str_drc_config_ext.str_drc_coeff_param_drc
+ .str_parametric_drc_gain_set_params
+ [i - str_p_loc_drc_coefficients_uni_drc->gain_set_count]
+ .parametric_drc_id;
+
+ for (j = 0;
+ j < drc_config->str_drc_config_ext.parametric_drc_instructions_count;
+ j++) {
+ if (parametric_drc_id ==
+ drc_config->str_drc_config_ext.str_parametric_drc_instructions[j]
+ .parametric_drc_id)
+ break;
}
-
- return 0;
+ if (j == drc_config->str_drc_config_ext.parametric_drc_instructions_count) {
+ /* str_parametric_drc_instructions not found */
+ return (UNEXPECTED_ERROR);
+ }
+ str_parametric_drc_instructions =
+ &drc_config->str_drc_config_ext.str_parametric_drc_instructions[j];
+
+ drc_characteristic = 0;
+ if (str_parametric_drc_instructions->parametric_drc_preset_id_present) {
+ drc_characteristic = str_parametric_drc_instructions->drc_characteristic;
+ } else if (str_parametric_drc_instructions->parametric_drc_type ==
+ PARAM_DRC_TYPE_FF) {
+ if (str_parametric_drc_instructions->str_parametric_drc_type_feed_forward
+ .drc_curve_definition_type == 0) {
+ drc_characteristic =
+ str_parametric_drc_instructions
+ ->str_parametric_drc_type_feed_forward.drc_characteristic;
+ }
+ }
+ if (drc_characteristic != 0) {
+ str_p_loc_drc_coefficients_uni_drc->gain_set_params[i]
+ .gain_params[0]
+ .drc_characteristic_present = 1;
+ str_p_loc_drc_coefficients_uni_drc->gain_set_params[i]
+ .gain_params[0]
+ .drc_characteristic_format_is_cicp = 1;
+ str_p_loc_drc_coefficients_uni_drc->gain_set_params[i]
+ .gain_params[0]
+ .drc_characteristic = drc_characteristic;
+ } else {
+ str_p_loc_drc_coefficients_uni_drc->gain_set_params[i]
+ .gain_params[0]
+ .drc_characteristic_present = 0;
+ str_p_loc_drc_coefficients_uni_drc->gain_set_params[i]
+ .gain_params[0]
+ .drc_characteristic_format_is_cicp = 0;
+ str_p_loc_drc_coefficients_uni_drc->gain_set_params[i]
+ .gain_params[0]
+ .drc_characteristic = 0;
+ }
+ }
+
+ return 0;
}
+static WORD32 impd_parametic_drc_parse_coeff(
+ ia_bit_buf_struct* it_bit_buff, ia_drc_config* drc_config,
+ ia_drc_coeff_parametric_drc_struct* str_drc_coeff_param_drc) {
+ WORD32 i = 0, err = 0, code = 0, mu = 0, nu = 0, temp;
+
+ temp = impd_read_bits_buf(it_bit_buff, 5);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ str_drc_coeff_param_drc->drc_location = (temp >> 1) & 0xf;
+ str_drc_coeff_param_drc->parametric_drc_frame_size_format = temp & 1;
+
+ if (str_drc_coeff_param_drc->parametric_drc_frame_size) {
+ code = impd_read_bits_buf(it_bit_buff, 15);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ str_drc_coeff_param_drc->parametric_drc_frame_size = code + 1;
+ } else {
+ code = impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ str_drc_coeff_param_drc->parametric_drc_frame_size = 1 << code;
+ }
+
+ str_drc_coeff_param_drc->parametric_drc_delay_max_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (str_drc_coeff_param_drc->parametric_drc_delay_max_present) {
+ temp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
-static WORD32 impd_parametic_drc_parse_coeff(ia_bit_buf_struct* it_bit_buff,
- ia_drc_config* drc_config,
- ia_drc_coeff_parametric_drc_struct* str_drc_coeff_param_drc)
-{
- WORD32 i = 0, err = 0, code = 0, mu = 0, nu = 0, temp;
-
- temp = impd_read_bits_buf(it_bit_buff, 5);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- str_drc_coeff_param_drc->drc_location = (temp>>1)&0xf;
- str_drc_coeff_param_drc->parametric_drc_frame_size_format = temp&1;
-
- if (str_drc_coeff_param_drc->parametric_drc_frame_size)
- {
- code = impd_read_bits_buf(it_bit_buff, 15);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- str_drc_coeff_param_drc->parametric_drc_frame_size = code + 1;
- }
- else
- {
- code = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- str_drc_coeff_param_drc->parametric_drc_frame_size = 1 << code;
- }
-
- str_drc_coeff_param_drc->parametric_drc_delay_max_present = impd_read_bits_buf(it_bit_buff, 1);
- if (str_drc_coeff_param_drc->parametric_drc_delay_max_present)
- {
- temp = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ mu = (temp >> 3) & 0x1f;
+ nu = temp & 3;
- mu = (temp>>3)&0x1f;
- nu = temp&3;
+ str_drc_coeff_param_drc->parametric_drc_delay_max = 16 * mu * (1 << nu);
+ }
- str_drc_coeff_param_drc->parametric_drc_delay_max = 16 * mu * (1<<nu);
- }
+ temp = impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
- temp = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ str_drc_coeff_param_drc->reset_parametric_drc = (temp >> 6) & 1;
+ str_drc_coeff_param_drc->parametric_drc_gain_set_count = temp & 0x3f;
- str_drc_coeff_param_drc->reset_parametric_drc = (temp>>6)&1;
- str_drc_coeff_param_drc->parametric_drc_gain_set_count = temp&0x3f;
-
- for(i=0; i<str_drc_coeff_param_drc->parametric_drc_gain_set_count; i++)
- {
- err = impd_parametric_drc_parse_gain_set_params(it_bit_buff, drc_config, &(str_drc_coeff_param_drc->str_parametric_drc_gain_set_params[i]));
- if (err) return (err);
- }
+ for (i = 0; i < str_drc_coeff_param_drc->parametric_drc_gain_set_count; i++) {
+ err = impd_parametric_drc_parse_gain_set_params(
+ it_bit_buff, drc_config,
+ &(str_drc_coeff_param_drc->str_parametric_drc_gain_set_params[i]));
+ if (err) return (err);
+ }
- return 0;
+ return 0;
}
-static WORD32 impd_parse_parametric_drc_instructions(ia_bit_buf_struct* it_bit_buff,
- WORD32 parametric_drc_frame_size,
- ia_parametric_drc_instructions_struct* str_parametric_drc_instructions)
-{
- WORD32 i = 0, err = 0, temp;
- WORD32 bit_size_len, bit_size, other_bit;
-
- str_parametric_drc_instructions->drc_characteristic = 0;
- str_parametric_drc_instructions->disable_paramteric_drc = 0;
-
- temp = impd_read_bits_buf(it_bit_buff, 5);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- str_parametric_drc_instructions->parametric_drc_id = (temp>>1)&0xf;
- str_parametric_drc_instructions->parametric_drc_look_ahead_flag = temp&1;
+static WORD32 impd_parse_parametric_drc_instructions(
+ ia_bit_buf_struct* it_bit_buff, WORD32 parametric_drc_frame_size,
+ ia_parametric_drc_instructions_struct* str_parametric_drc_instructions) {
+ WORD32 i = 0, err = 0, temp;
+ WORD32 bit_size_len, bit_size, other_bit;
+
+ str_parametric_drc_instructions->drc_characteristic = 0;
+ str_parametric_drc_instructions->disable_paramteric_drc = 0;
+
+ temp = impd_read_bits_buf(it_bit_buff, 5);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ str_parametric_drc_instructions->parametric_drc_id = (temp >> 1) & 0xf;
+ str_parametric_drc_instructions->parametric_drc_look_ahead_flag = temp & 1;
+
+ if (str_parametric_drc_instructions->parametric_drc_look_ahead_flag) {
+ str_parametric_drc_instructions->parametric_drc_look_ahead =
+ impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ } else {
+ str_parametric_drc_instructions->parametric_drc_look_ahead = 0;
+ }
+
+ str_parametric_drc_instructions->parametric_drc_preset_id_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (str_parametric_drc_instructions->parametric_drc_preset_id_present) {
+ str_parametric_drc_instructions->parametric_drc_preset_id =
+ impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ switch (str_parametric_drc_instructions->parametric_drc_preset_id) {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ str_parametric_drc_instructions->drc_characteristic =
+ str_parametric_drc_instructions->parametric_drc_preset_id + 7;
+ str_parametric_drc_instructions->parametric_drc_type =
+ PARAM_DRC_TYPE_FF;
+
+ str_parametric_drc_instructions->str_parametric_drc_type_feed_forward
+ .level_estim_k_weighting_type = 2;
+ str_parametric_drc_instructions->str_parametric_drc_type_feed_forward
+ .level_estim_integration_time = parametric_drc_frame_size;
+
+ impd_parametric_drc_ffwd_init_drc_curve_params(
+ str_parametric_drc_instructions->drc_characteristic,
+ &str_parametric_drc_instructions
+ ->str_parametric_drc_type_feed_forward);
+ impd_parametric_drc_ffwd_init_drc_gain_smooth_params(
+ str_parametric_drc_instructions->drc_characteristic,
+ &str_parametric_drc_instructions
+ ->str_parametric_drc_type_feed_forward);
- if (str_parametric_drc_instructions->parametric_drc_look_ahead_flag)
- {
- str_parametric_drc_instructions->parametric_drc_look_ahead = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- else
- {
- str_parametric_drc_instructions->parametric_drc_look_ahead = 0;
+ break;
+ default:
+ str_parametric_drc_instructions->disable_paramteric_drc = 1;
+ break;
}
-
- str_parametric_drc_instructions->parametric_drc_preset_id_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if (str_parametric_drc_instructions->parametric_drc_preset_id_present)
- {
- str_parametric_drc_instructions->parametric_drc_preset_id = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- switch (str_parametric_drc_instructions->parametric_drc_preset_id)
- {
- case 0:
- case 1:
- case 2:
- case 3:
- case 4:
- str_parametric_drc_instructions->drc_characteristic = str_parametric_drc_instructions->parametric_drc_preset_id + 7;
- str_parametric_drc_instructions->parametric_drc_type = PARAM_DRC_TYPE_FF;
-
- str_parametric_drc_instructions->str_parametric_drc_type_feed_forward.level_estim_k_weighting_type = 2;
- str_parametric_drc_instructions->str_parametric_drc_type_feed_forward.level_estim_integration_time = parametric_drc_frame_size;
-
- impd_parametric_drc_ffwd_init_drc_curve_params(str_parametric_drc_instructions->drc_characteristic, &str_parametric_drc_instructions->str_parametric_drc_type_feed_forward);
- impd_parametric_drc_ffwd_init_drc_gain_smooth_params(str_parametric_drc_instructions->drc_characteristic, &str_parametric_drc_instructions->str_parametric_drc_type_feed_forward);
-
- break;
+ } else {
+ str_parametric_drc_instructions->parametric_drc_type =
+ impd_read_bits_buf(it_bit_buff, 3);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (str_parametric_drc_instructions->parametric_drc_type ==
+ PARAM_DRC_TYPE_FF) {
+ err = impd_parse_parametric_drc_ffwd(
+ it_bit_buff, parametric_drc_frame_size,
+ &(str_parametric_drc_instructions
+ ->str_parametric_drc_type_feed_forward));
+ if (err) return (err);
+ str_parametric_drc_instructions->disable_paramteric_drc =
+ str_parametric_drc_instructions->str_parametric_drc_type_feed_forward
+ .disable_paramteric_drc;
+ str_parametric_drc_instructions->drc_characteristic =
+ str_parametric_drc_instructions->str_parametric_drc_type_feed_forward
+ .drc_characteristic;
+ } else if (str_parametric_drc_instructions->parametric_drc_type ==
+ PARAM_DRC_TYPE_LIM) {
+ err = impd_parse_parametric_drc_lim(
+ it_bit_buff, &(str_parametric_drc_instructions->parametric_drc_lim));
+ if (err) return (err);
+ str_parametric_drc_instructions->disable_paramteric_drc =
+ str_parametric_drc_instructions->parametric_drc_lim
+ .disable_paramteric_drc;
+ str_parametric_drc_instructions->drc_characteristic =
+ str_parametric_drc_instructions->parametric_drc_lim
+ .drc_characteristic;
+ if (str_parametric_drc_instructions->parametric_drc_look_ahead_flag) {
+ str_parametric_drc_instructions->parametric_drc_lim
+ .parametric_lim_attack =
+ str_parametric_drc_instructions->parametric_drc_look_ahead;
+ }
+ } else {
+ bit_size_len = impd_read_bits_buf(it_bit_buff, 3) + 4;
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ bit_size = impd_read_bits_buf(it_bit_buff, bit_size_len);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ str_parametric_drc_instructions->len_bit_size = bit_size + 1;
+
+ switch (str_parametric_drc_instructions->parametric_drc_type) {
default:
- str_parametric_drc_instructions->disable_paramteric_drc = 1;
- break;
- }
- }
- else
- {
- str_parametric_drc_instructions->parametric_drc_type = impd_read_bits_buf(it_bit_buff, 3);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if (str_parametric_drc_instructions->parametric_drc_type == PARAM_DRC_TYPE_FF)
- {
- err = impd_parse_parametric_drc_ffwd(it_bit_buff, parametric_drc_frame_size, &(str_parametric_drc_instructions->str_parametric_drc_type_feed_forward));
- if (err) return (err);
- str_parametric_drc_instructions->disable_paramteric_drc = str_parametric_drc_instructions->str_parametric_drc_type_feed_forward.disable_paramteric_drc;
- str_parametric_drc_instructions->drc_characteristic = str_parametric_drc_instructions->str_parametric_drc_type_feed_forward.drc_characteristic;
- }
- else if (str_parametric_drc_instructions->parametric_drc_type == PARAM_DRC_TYPE_LIM)
- {
- err = impd_parse_parametric_drc_lim(it_bit_buff, &(str_parametric_drc_instructions->parametric_drc_lim));
- if (err) return (err);
- str_parametric_drc_instructions->disable_paramteric_drc = str_parametric_drc_instructions->parametric_drc_lim.disable_paramteric_drc;
- str_parametric_drc_instructions->drc_characteristic = str_parametric_drc_instructions->parametric_drc_lim.drc_characteristic;
- if (str_parametric_drc_instructions->parametric_drc_look_ahead_flag)
- {
- str_parametric_drc_instructions->parametric_drc_lim.parametric_lim_attack = str_parametric_drc_instructions->parametric_drc_look_ahead;
- }
- }
- else
- {
- bit_size_len = impd_read_bits_buf(it_bit_buff, 3) + 4;
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- bit_size = impd_read_bits_buf(it_bit_buff, bit_size_len);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- str_parametric_drc_instructions->len_bit_size = bit_size + 1;
-
- switch(str_parametric_drc_instructions->parametric_drc_type)
- {
-
- default:
- str_parametric_drc_instructions->disable_paramteric_drc = 1;
- for(i = 0; i<str_parametric_drc_instructions->len_bit_size; i++)
- {
- other_bit = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- break;
- }
- }
+ str_parametric_drc_instructions->disable_paramteric_drc = 1;
+ for (i = 0; i < str_parametric_drc_instructions->len_bit_size; i++) {
+ other_bit = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+ break;
+ }
}
+ }
- return 0;
+ return 0;
}
-WORD32 impd_parse_loud_info_set_ext_eq(ia_bit_buf_struct* it_bit_buff,
- ia_drc_loudness_info_set_struct* loudness_info_set)
-{
- WORD32 err, i, offset, version = 1, temp;
- WORD32 loudness_info_v1_album_cnt, loudness_info_v1_cnt;
+WORD32 impd_parse_loud_info_set_ext_eq(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_drc_loudness_info_set_struct* loudness_info_set) {
+ WORD32 err, i, offset, version = 1, temp;
+ WORD32 loudness_info_v1_album_cnt, loudness_info_v1_cnt;
- temp = impd_read_bits_buf(it_bit_buff, 12);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- loudness_info_v1_album_cnt = (temp>>6)&0x3f;
- loudness_info_v1_cnt = temp&0x3f;
-
- offset = loudness_info_set->loudness_info_album_count;
- loudness_info_set->loudness_info_album_count += loudness_info_v1_album_cnt;
- for (i=0; i<loudness_info_v1_album_cnt; i++)
- {
- err = impd_parse_loudness_info(it_bit_buff, version, &loudness_info_set->str_loudness_info_album[i + offset]);
- if (err) return(err);
- }
- offset = loudness_info_set->loudness_info_count;
- loudness_info_set->loudness_info_count += loudness_info_v1_cnt;
- for (i=0; i<loudness_info_v1_cnt; i++)
- {
- err = impd_parse_loudness_info(it_bit_buff, version, &loudness_info_set->loudness_info[i + offset]);
- if (err) return(err);
- }
- return (0);
+ temp = impd_read_bits_buf(it_bit_buff, 12);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ loudness_info_v1_album_cnt = (temp >> 6) & 0x3f;
+ loudness_info_v1_cnt = temp & 0x3f;
+
+ offset = loudness_info_set->loudness_info_album_count;
+ loudness_info_set->loudness_info_album_count += loudness_info_v1_album_cnt;
+ for (i = 0; i < loudness_info_v1_album_cnt; i++) {
+ err = impd_parse_loudness_info(
+ it_bit_buff, version,
+ &loudness_info_set->str_loudness_info_album[i + offset]);
+ if (err) return (err);
+ }
+ offset = loudness_info_set->loudness_info_count;
+ loudness_info_set->loudness_info_count += loudness_info_v1_cnt;
+ for (i = 0; i < loudness_info_v1_cnt; i++) {
+ err = impd_parse_loudness_info(
+ it_bit_buff, version, &loudness_info_set->loudness_info[i + offset]);
+ if (err) return (err);
+ }
+ return (0);
}
WORD32 impd_parse_ch_layout(ia_bit_buf_struct* it_bit_buff,
ia_drc_params_bs_dec_struct* ia_drc_params_struct,
- ia_channel_layout_struct* channel_layout)
-{
- //WORD32 err = 0;
- WORD32 i;
-
- channel_layout->base_channel_count = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (ia_drc_params_struct->lfe_channel_map_count != -1 && channel_layout->base_channel_count != ia_drc_params_struct->lfe_channel_map_count)
- {
- return (UNEXPECTED_ERROR);
- }
- channel_layout->layout_signaling_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if (channel_layout->layout_signaling_present)
- {
- channel_layout->defined_layout = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if (channel_layout->defined_layout == 0)
- {
- for (i=0; i<channel_layout->base_channel_count; i++)
- {
- channel_layout->speaker_position[i] = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (channel_layout->speaker_position[i] == 3 || channel_layout->speaker_position[i] == 26) {
- ia_drc_params_struct->lfe_channel_map[i] = 1;
- }
- else
- {
- ia_drc_params_struct->lfe_channel_map[i] = 0;
- }
- }
+ ia_channel_layout_struct* channel_layout) {
+ // WORD32 err = 0;
+ WORD32 i;
+
+ channel_layout->base_channel_count = impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (ia_drc_params_struct->lfe_channel_map_count != -1 &&
+ channel_layout->base_channel_count !=
+ ia_drc_params_struct->lfe_channel_map_count) {
+ return (UNEXPECTED_ERROR);
+ }
+ channel_layout->layout_signaling_present = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (channel_layout->layout_signaling_present) {
+ channel_layout->defined_layout = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (channel_layout->defined_layout == 0) {
+ for (i = 0; i < channel_layout->base_channel_count; i++) {
+ channel_layout->speaker_position[i] =
+ impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (channel_layout->speaker_position[i] == 3 ||
+ channel_layout->speaker_position[i] == 26) {
+ ia_drc_params_struct->lfe_channel_map[i] = 1;
+ } else {
+ ia_drc_params_struct->lfe_channel_map[i] = 0;
}
+ }
}
+ }
- return(0);
+ return (0);
}
WORD32
-impd_parse_dwnmix_instructions(ia_bit_buf_struct* it_bit_buff,
- WORD32 version,
- ia_drc_params_bs_dec_struct* ia_drc_params_struct,
- ia_channel_layout_struct* channel_layout,
- ia_downmix_instructions_struct* dwnmix_instructions)
-{
- //WORD32 err = 0;
- WORD32 i, j, k, temp;
-
- temp = impd_read_bits_buf(it_bit_buff, 23);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- dwnmix_instructions->downmix_id = (temp>>16)&0x7f;
- dwnmix_instructions->target_channel_count = (temp>>9)&0x7f;
- dwnmix_instructions->target_layout = (temp>>1)&0xff;
- dwnmix_instructions->downmix_coefficients_present = temp&1;
-
- if (dwnmix_instructions->downmix_coefficients_present)
- {
- if (version == 0)
- {
- WORD32 dmix_coeff;
- k=0;
- for (i=0; i<dwnmix_instructions->target_channel_count; i++)
- {
- for (j=0; j<channel_layout->base_channel_count; j++)
- {
- dmix_coeff = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if (ia_drc_params_struct->lfe_channel_map[j])
- {
- dwnmix_instructions->downmix_coefficient[k] = (FLOAT32)pow(10.0f, 0.05f * dwnmix_coeff_lfe[dmix_coeff]);
- }
- else
- {
- dwnmix_instructions->downmix_coefficient[k] = (FLOAT32)pow(10.0f, 0.05f * dwnmix_coeff[dmix_coeff]);
- }
- k++;
- }
- }
- }
- else
- {
- WORD32 dmix_coeff_v1, bs_dmix_offset;
- FLOAT32 a, b, dmix_offset, sum;
-
- bs_dmix_offset = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- k=0;
- for (i=0; i<dwnmix_instructions->target_channel_count; i++)
- {
- for (j=0; j<channel_layout->base_channel_count; j++)
- {
- dmix_coeff_v1 = impd_read_bits_buf(it_bit_buff, 5);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- dwnmix_instructions->downmix_coefficient[k] = dwnmix_coeff_v1[dmix_coeff_v1];
- k++;
- }
- }
- switch (bs_dmix_offset)
- {
- case 0:
- dmix_offset = 0.0f;
- break;
- case 1:
- a = 20.0f * (FLOAT32)log10((FLOAT32) dwnmix_instructions->target_channel_count / (FLOAT32)channel_layout->base_channel_count);
- dmix_offset = 0.5f *(FLOAT32) floor(0.5f + a);
- break;
- case 2:
- a = 20.0f *(FLOAT32) log10((FLOAT32) dwnmix_instructions->target_channel_count / (FLOAT32)channel_layout->base_channel_count);
- dmix_offset = 0.5f *(FLOAT32) floor(0.5f + 2.0f * a);
- break;
- case 3:
- sum = 0.0f;
- for (k=0; k<dwnmix_instructions->target_channel_count * channel_layout->base_channel_count; k++)
- {
- sum += (FLOAT32)pow(10.0f, 0.1f * dwnmix_instructions->downmix_coefficient[k]);
- }
- b = 10.0f * (FLOAT32)log10(sum);
- dmix_offset = 0.5f * (FLOAT32)floor(0.5f + 2.0f * b);
- break;
-
- default:
- return (BITSTREAM_ERROR);
- break;
- }
- for (k=0; k<dwnmix_instructions->target_channel_count * channel_layout->base_channel_count; k++)
- {
- dwnmix_instructions->downmix_coefficient[k] = (FLOAT32)pow(10.0f, 0.05f * (dwnmix_instructions->downmix_coefficient[k] + dmix_offset));
- }
- }
- }
- return(0);
-}
-
-VOID impd_drc_gen_instructions_for_drc_off(ia_drc_config* drc_config)
-{
- WORD32 i, k, s;
- ia_drc_instructions_struct* str_drc_instruction_str;
- s = -1;
-
+impd_parse_dwnmix_instructions(
+ ia_bit_buf_struct* it_bit_buff, WORD32 version,
+ ia_drc_params_bs_dec_struct* ia_drc_params_struct,
+ ia_channel_layout_struct* channel_layout,
+ ia_downmix_instructions_struct* dwnmix_instructions) {
+ // WORD32 err = 0;
+ WORD32 i, j, k, temp;
+
+ temp = impd_read_bits_buf(it_bit_buff, 23);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ dwnmix_instructions->downmix_id = (temp >> 16) & 0x7f;
+ dwnmix_instructions->target_channel_count = (temp >> 9) & 0x7f;
+ dwnmix_instructions->target_layout = (temp >> 1) & 0xff;
+ dwnmix_instructions->downmix_coefficients_present = temp & 1;
+
+ if (dwnmix_instructions->downmix_coefficients_present) {
+ if (version == 0) {
+ WORD32 dmix_coeff;
+ k = 0;
+ for (i = 0; i < dwnmix_instructions->target_channel_count; i++) {
+ for (j = 0; j < channel_layout->base_channel_count; j++) {
+ dmix_coeff = impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (ia_drc_params_struct->lfe_channel_map[j]) {
+ dwnmix_instructions->downmix_coefficient[k] =
+ (FLOAT32)pow(10.0f, 0.05f * dwnmix_coeff_lfe[dmix_coeff]);
+ } else {
+ dwnmix_instructions->downmix_coefficient[k] =
+ (FLOAT32)pow(10.0f, 0.05f * dwnmix_coeff[dmix_coeff]);
+ }
+ k++;
+ }
+ }
+ } else {
+ WORD32 dmix_coeff_v1, bs_dmix_offset;
+ FLOAT32 a, b, dmix_offset, sum;
+
+ bs_dmix_offset = impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ k = 0;
+ for (i = 0; i < dwnmix_instructions->target_channel_count; i++) {
+ for (j = 0; j < channel_layout->base_channel_count; j++) {
+ dmix_coeff_v1 = impd_read_bits_buf(it_bit_buff, 5);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ dwnmix_instructions->downmix_coefficient[k] =
+ dwnmix_coeff_v1[dmix_coeff_v1];
+ k++;
+ }
+ }
+ switch (bs_dmix_offset) {
+ case 0:
+ dmix_offset = 0.0f;
+ break;
+ case 1:
+ a = 20.0f * (FLOAT32)log10(
+ (FLOAT32)dwnmix_instructions->target_channel_count /
+ (FLOAT32)channel_layout->base_channel_count);
+ dmix_offset = 0.5f * (FLOAT32)floor(0.5f + a);
+ break;
+ case 2:
+ a = 20.0f * (FLOAT32)log10(
+ (FLOAT32)dwnmix_instructions->target_channel_count /
+ (FLOAT32)channel_layout->base_channel_count);
+ dmix_offset = 0.5f * (FLOAT32)floor(0.5f + 2.0f * a);
+ break;
+ case 3:
+ sum = 0.0f;
+ for (k = 0; k < dwnmix_instructions->target_channel_count *
+ channel_layout->base_channel_count;
+ k++) {
+ sum += (FLOAT32)pow(
+ 10.0f, 0.1f * dwnmix_instructions->downmix_coefficient[k]);
+ }
+ b = 10.0f * (FLOAT32)log10(sum);
+ dmix_offset = 0.5f * (FLOAT32)floor(0.5f + 2.0f * b);
+ break;
- k = drc_config->drc_instructions_uni_drc_count;
+ default:
+ return (BITSTREAM_ERROR);
+ break;
+ }
+ for (k = 0; k < dwnmix_instructions->target_channel_count *
+ channel_layout->base_channel_count;
+ k++) {
+ dwnmix_instructions->downmix_coefficient[k] = (FLOAT32)pow(
+ 10.0f, 0.05f * (dwnmix_instructions->downmix_coefficient[k] +
+ dmix_offset));
+ }
+ }
+ }
+ return (0);
+}
- str_drc_instruction_str = &(drc_config->str_drc_instruction_str[k]);
+VOID impd_drc_gen_instructions_for_drc_off(ia_drc_config* drc_config) {
+ WORD32 i, k, s;
+ ia_drc_instructions_struct* str_drc_instruction_str;
+ s = -1;
+
+ k = drc_config->drc_instructions_uni_drc_count;
+
+ str_drc_instruction_str = &(drc_config->str_drc_instruction_str[k]);
+ memset(str_drc_instruction_str, 0, sizeof(ia_drc_instructions_struct));
+ str_drc_instruction_str->drc_set_id = s;
+ s--;
+ str_drc_instruction_str->downmix_id[0] = ID_FOR_BASE_LAYOUT;
+ str_drc_instruction_str->dwnmix_id_count = 1;
+ str_drc_instruction_str->drc_apply_to_dwnmix = 0;
+ str_drc_instruction_str->depends_on_drc_set_present = 0;
+ str_drc_instruction_str->no_independent_use = 0;
+ str_drc_instruction_str->gain_element_count = 0;
+ for (i = 1; i < drc_config->dwnmix_instructions_count + 1; i++) {
+ str_drc_instruction_str = &(drc_config->str_drc_instruction_str[k + i]);
memset(str_drc_instruction_str, 0, sizeof(ia_drc_instructions_struct));
str_drc_instruction_str->drc_set_id = s;
s--;
- str_drc_instruction_str->downmix_id[0] = ID_FOR_BASE_LAYOUT;
+ str_drc_instruction_str->drc_set_complexity_level = 0;
+ str_drc_instruction_str->requires_eq = 0;
+ str_drc_instruction_str->downmix_id[0] =
+ drc_config->dwnmix_instructions[i - 1].downmix_id;
str_drc_instruction_str->dwnmix_id_count = 1;
str_drc_instruction_str->drc_apply_to_dwnmix = 0;
str_drc_instruction_str->depends_on_drc_set_present = 0;
str_drc_instruction_str->no_independent_use = 0;
str_drc_instruction_str->gain_element_count = 0;
- for (i=1; i<drc_config->dwnmix_instructions_count + 1; i++)
- {
- str_drc_instruction_str = &(drc_config->str_drc_instruction_str[k+i]);
- memset(str_drc_instruction_str, 0, sizeof(ia_drc_instructions_struct));
- str_drc_instruction_str->drc_set_id = s;
- s--;
- str_drc_instruction_str->drc_set_complexity_level = 0;
- str_drc_instruction_str->requires_eq = 0;
- str_drc_instruction_str->downmix_id[0] = drc_config->dwnmix_instructions[i-1].downmix_id;
- str_drc_instruction_str->dwnmix_id_count = 1;
- str_drc_instruction_str->drc_apply_to_dwnmix = 0;
- str_drc_instruction_str->depends_on_drc_set_present = 0;
- str_drc_instruction_str->no_independent_use = 0;
- str_drc_instruction_str->gain_element_count = 0;
- }
- drc_config->drc_instructions_count_plus = drc_config->drc_instructions_uni_drc_count + drc_config->dwnmix_instructions_count + 1;
- return;
+ }
+ drc_config->drc_instructions_count_plus =
+ drc_config->drc_instructions_uni_drc_count +
+ drc_config->dwnmix_instructions_count + 1;
+ return;
}
WORD32
impd_parse_drc_config_ext(ia_bit_buf_struct* it_bit_buff,
ia_drc_params_bs_dec_struct* ia_drc_params_struct,
ia_drc_config* drc_config,
- ia_drc_config_ext* str_drc_config_ext)
-{
- WORD32 err = 0, i, k;
- WORD32 bit_size_len, ext_size_bits, bit_size, other_bit;
-
- k = 0;
- str_drc_config_ext->drc_config_ext_type[k] = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- while(str_drc_config_ext->drc_config_ext_type[k] != UNIDRCCONFEXT_TERM)
- {
- bit_size_len = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- ext_size_bits = bit_size_len + 4;
-
- bit_size = impd_read_bits_buf(it_bit_buff, ext_size_bits);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- str_drc_config_ext->ext_bit_size[k] = bit_size + 1;
-
- switch(str_drc_config_ext->drc_config_ext_type[k])
- {
- case UNIDRCCONFEXT_PARAM_DRC:
- str_drc_config_ext->parametric_drc_present = 1;
- err = impd_parametic_drc_parse_coeff(it_bit_buff, drc_config, &(str_drc_config_ext->str_drc_coeff_param_drc));
- if (err) return(err);
- str_drc_config_ext->parametric_drc_instructions_count = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- for (i=0; i<str_drc_config_ext->parametric_drc_instructions_count; i++)
- {
- err = impd_parse_parametric_drc_instructions(it_bit_buff, str_drc_config_ext->str_drc_coeff_param_drc.parametric_drc_frame_size, &(str_drc_config_ext->str_parametric_drc_instructions[i]));
- if (err) return (err);
- }
- break;
- case UNIDRCCONFEXT_V1:
- str_drc_config_ext->drc_extension_v1_present = 1;
- err = impd_parse_drc_ext_v1( it_bit_buff, ia_drc_params_struct, drc_config, str_drc_config_ext);
- if (err) return(err);
- break;
- default:
- for(i = 0; i<str_drc_config_ext->ext_bit_size[k]; i++)
- {
- other_bit = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- break;
+ ia_drc_config_ext* str_drc_config_ext) {
+ WORD32 err = 0, i, k;
+ WORD32 bit_size_len, ext_size_bits, bit_size, other_bit;
+
+ k = 0;
+ str_drc_config_ext->drc_config_ext_type[k] =
+ impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ while (str_drc_config_ext->drc_config_ext_type[k] != UNIDRCCONFEXT_TERM) {
+ bit_size_len = impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ ext_size_bits = bit_size_len + 4;
+
+ bit_size = impd_read_bits_buf(it_bit_buff, ext_size_bits);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ str_drc_config_ext->ext_bit_size[k] = bit_size + 1;
+
+ switch (str_drc_config_ext->drc_config_ext_type[k]) {
+ case UNIDRCCONFEXT_PARAM_DRC:
+ str_drc_config_ext->parametric_drc_present = 1;
+ err = impd_parametic_drc_parse_coeff(
+ it_bit_buff, drc_config,
+ &(str_drc_config_ext->str_drc_coeff_param_drc));
+ if (err) return (err);
+ str_drc_config_ext->parametric_drc_instructions_count =
+ impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ for (i = 0; i < str_drc_config_ext->parametric_drc_instructions_count;
+ i++) {
+ err = impd_parse_parametric_drc_instructions(
+ it_bit_buff, str_drc_config_ext->str_drc_coeff_param_drc
+ .parametric_drc_frame_size,
+ &(str_drc_config_ext->str_parametric_drc_instructions[i]));
+ if (err) return (err);
}
- k++;
- str_drc_config_ext->drc_config_ext_type[k] = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ break;
+ case UNIDRCCONFEXT_V1:
+ str_drc_config_ext->drc_extension_v1_present = 1;
+ err = impd_parse_drc_ext_v1(it_bit_buff, ia_drc_params_struct,
+ drc_config, str_drc_config_ext);
+ if (err) return (err);
+ break;
+ default:
+ for (i = 0; i < str_drc_config_ext->ext_bit_size[k]; i++) {
+ other_bit = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+ break;
}
+ k++;
+ str_drc_config_ext->drc_config_ext_type[k] =
+ impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
- return (0);
+ return (0);
}
-static WORD32 impd_parse_split_drc_characteristic(ia_bit_buf_struct* it_bit_buff, const WORD32 side, ia_split_drc_characteristic_struct* split_drc_characteristic) {
- //WORD32 err = 0;
- WORD32 i, temp;
-
- split_drc_characteristic->characteristic_format = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (split_drc_characteristic->characteristic_format == 0)
- {
- WORD32 bsGain, bsIoRatio, bsExp;
- bsGain = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (side == LEFT_SIDE)
- {
- split_drc_characteristic->gain = (FLOAT32)bsGain;
- }
- else
- {
- split_drc_characteristic->gain = (FLOAT32)- bsGain;
- }
- temp = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- bsIoRatio = (temp>>4)&0xf;
- bsExp = temp&0xf;
- split_drc_characteristic->in_out_ratio = 0.05f + 0.15f * bsIoRatio;
-
- if (bsExp<15)
- {
- split_drc_characteristic->exp = 1.0f + 2.0f * bsExp;
- }
- else
- {
- split_drc_characteristic->exp = 1000.0f;
- }
- split_drc_characteristic->flip_sign = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+static WORD32 impd_parse_split_drc_characteristic(
+ ia_bit_buf_struct* it_bit_buff, const WORD32 side,
+ ia_split_drc_characteristic_struct* split_drc_characteristic) {
+ // WORD32 err = 0;
+ WORD32 i, temp;
+
+ split_drc_characteristic->characteristic_format =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (split_drc_characteristic->characteristic_format == 0) {
+ WORD32 bsGain, bsIoRatio, bsExp;
+ bsGain = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (side == LEFT_SIDE) {
+ split_drc_characteristic->gain = (FLOAT32)bsGain;
+ } else {
+ split_drc_characteristic->gain = (FLOAT32)-bsGain;
}
- else
- {
- WORD32 char_node_cnt, node_level_delta, node_gain;
- char_node_cnt = impd_read_bits_buf(it_bit_buff, 2);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- split_drc_characteristic->characteristic_node_count = char_node_cnt + 1;
- split_drc_characteristic->node_level[0] = DRC_INPUT_LOUDNESS_TARGET;
- split_drc_characteristic->node_gain[0] = 0.0f;
- for (i=1; i<=split_drc_characteristic->characteristic_node_count; i++)
- {
- node_level_delta = impd_read_bits_buf(it_bit_buff, 5);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (side == LEFT_SIDE)
- {
- split_drc_characteristic->node_level[i] = split_drc_characteristic->node_level[i-1] - (1.0f + node_level_delta);
- }
- else
- {
- split_drc_characteristic->node_level[i] = split_drc_characteristic->node_level[i-1] + (1.0f + node_level_delta);
- }
- node_gain = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- split_drc_characteristic->node_gain[i] = 0.5f * node_gain - 64.0f;
- }
- }
- return(0);
+ temp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ bsIoRatio = (temp >> 4) & 0xf;
+ bsExp = temp & 0xf;
+ split_drc_characteristic->in_out_ratio = 0.05f + 0.15f * bsIoRatio;
+
+ if (bsExp < 15) {
+ split_drc_characteristic->exp = 1.0f + 2.0f * bsExp;
+ } else {
+ split_drc_characteristic->exp = 1000.0f;
+ }
+ split_drc_characteristic->flip_sign = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ } else {
+ WORD32 char_node_cnt, node_level_delta, node_gain;
+ char_node_cnt = impd_read_bits_buf(it_bit_buff, 2);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ split_drc_characteristic->characteristic_node_count = char_node_cnt + 1;
+ split_drc_characteristic->node_level[0] = DRC_INPUT_LOUDNESS_TARGET;
+ split_drc_characteristic->node_gain[0] = 0.0f;
+ for (i = 1; i <= split_drc_characteristic->characteristic_node_count; i++) {
+ node_level_delta = impd_read_bits_buf(it_bit_buff, 5);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (side == LEFT_SIDE) {
+ split_drc_characteristic->node_level[i] =
+ split_drc_characteristic->node_level[i - 1] -
+ (1.0f + node_level_delta);
+ } else {
+ split_drc_characteristic->node_level[i] =
+ split_drc_characteristic->node_level[i - 1] +
+ (1.0f + node_level_delta);
+ }
+ node_gain = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ split_drc_characteristic->node_gain[i] = 0.5f * node_gain - 64.0f;
+ }
+ }
+ return (0);
}
-
WORD32
-impd_drc_gen_instructions_derived_data(ia_drc_config* drc_config,
- ia_drc_params_bs_dec_struct* ia_drc_params_struct,
- ia_drc_instructions_struct* str_drc_instruction_str)
-{
- WORD32 n, g;
- ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc = NULL;
- ia_drc_coeff_parametric_drc_struct* str_drc_coeff_param_drc = NULL;
- WORD32 gain_element_count = 0;
-
- for(n=0; n<drc_config->drc_coefficients_drc_count; n++)
- {
- if (drc_config->str_p_loc_drc_coefficients_uni_drc[n].drc_location == str_drc_instruction_str->drc_location) break;
- }
- if ((n == drc_config->drc_coefficients_drc_count)
- && (drc_config->drc_coefficients_drc_count > 0)
- )
- {
+impd_drc_gen_instructions_derived_data(
+ ia_drc_config* drc_config,
+ ia_drc_params_bs_dec_struct* ia_drc_params_struct,
+ ia_drc_instructions_struct* str_drc_instruction_str) {
+ WORD32 n, g;
+ ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc = NULL;
+ ia_drc_coeff_parametric_drc_struct* str_drc_coeff_param_drc = NULL;
+ WORD32 gain_element_count = 0;
+
+ for (n = 0; n < drc_config->drc_coefficients_drc_count; n++) {
+ if (drc_config->str_p_loc_drc_coefficients_uni_drc[n].drc_location ==
+ str_drc_instruction_str->drc_location)
+ break;
+ }
+ if ((n == drc_config->drc_coefficients_drc_count) &&
+ (drc_config->drc_coefficients_drc_count > 0)) {
+ return -1;
+ }
+ str_p_loc_drc_coefficients_uni_drc =
+ &(drc_config->str_p_loc_drc_coefficients_uni_drc[n]);
+
+ if (drc_config->drc_config_ext_present &&
+ drc_config->str_drc_config_ext.parametric_drc_present &&
+ drc_config->str_drc_config_ext.str_drc_coeff_param_drc.drc_location ==
+ str_drc_instruction_str->drc_location) {
+ str_drc_coeff_param_drc =
+ &drc_config->str_drc_config_ext.str_drc_coeff_param_drc;
+ }
+
+ for (g = 0; g < str_drc_instruction_str->num_drc_ch_groups; g++) {
+ WORD32 seq = str_drc_instruction_str->gain_set_index_for_channel_group[g];
+ if (seq != -1 &&
+ (drc_config->drc_coefficients_drc_count == 0 ||
+ seq >= str_p_loc_drc_coefficients_uni_drc->gain_set_count)) {
+ str_drc_instruction_str->ch_group_parametric_drc_flag[g] = 1;
+ if (drc_config->drc_coefficients_drc_count != 0) {
+ seq = seq - str_p_loc_drc_coefficients_uni_drc->gain_set_count;
+ }
+ str_drc_instruction_str->gain_set_idx_of_ch_group_parametric_drc[g] = seq;
+
+ if (str_drc_coeff_param_drc == NULL ||
+ seq >= str_drc_coeff_param_drc->parametric_drc_gain_set_count) {
+ /* parametric drc gain set not available */
+ return (EXTERNAL_ERROR);
+ }
+ str_drc_instruction_str->gain_interpolation_type_for_channel_group[g] = 1;
+ str_drc_instruction_str->time_delta_min_for_channel_group[g] =
+ str_drc_coeff_param_drc->parametric_drc_frame_size;
+ str_drc_instruction_str->time_alignment_for_channel_group[g] = 0;
+ } else {
+ str_drc_instruction_str->ch_group_parametric_drc_flag[g] = 0;
+ }
+ if (str_drc_instruction_str->ch_group_parametric_drc_flag[g] == 0) {
+ if (seq >= str_p_loc_drc_coefficients_uni_drc->gain_set_count) {
return -1;
- }
- str_p_loc_drc_coefficients_uni_drc = &(drc_config->str_p_loc_drc_coefficients_uni_drc[n]);
-
- if (drc_config->drc_config_ext_present && drc_config->str_drc_config_ext.parametric_drc_present &&
- drc_config->str_drc_config_ext.str_drc_coeff_param_drc.drc_location == str_drc_instruction_str->drc_location)
- {
- str_drc_coeff_param_drc = &drc_config->str_drc_config_ext.str_drc_coeff_param_drc;
- }
-
- for (g=0; g<str_drc_instruction_str->num_drc_ch_groups; g++)
- {
- WORD32 seq = str_drc_instruction_str->gain_set_index_for_channel_group[g];
- if (seq != -1 && (drc_config->drc_coefficients_drc_count == 0 || seq >= str_p_loc_drc_coefficients_uni_drc->gain_set_count))
- {
- str_drc_instruction_str->ch_group_parametric_drc_flag[g] = 1;
- if (drc_config->drc_coefficients_drc_count != 0)
- {
- seq = seq - str_p_loc_drc_coefficients_uni_drc->gain_set_count;
- }
- str_drc_instruction_str->gain_set_idx_of_ch_group_parametric_drc[g] = seq;
-
- if (str_drc_coeff_param_drc == NULL || seq>=str_drc_coeff_param_drc->parametric_drc_gain_set_count)
- {
- /* parametric drc gain set not available */
- return(EXTERNAL_ERROR);
- }
- str_drc_instruction_str->gain_interpolation_type_for_channel_group[g] = 1;
- str_drc_instruction_str->time_delta_min_for_channel_group[g] = str_drc_coeff_param_drc->parametric_drc_frame_size;
- str_drc_instruction_str->time_alignment_for_channel_group[g] = 0;
- } else {
- str_drc_instruction_str->ch_group_parametric_drc_flag[g] = 0;
- }
- if (str_drc_instruction_str->ch_group_parametric_drc_flag[g] == 0) {
- if (seq>=str_p_loc_drc_coefficients_uni_drc->gain_set_count) {
- return -1;
- }
- str_drc_instruction_str->gain_interpolation_type_for_channel_group[g] = str_p_loc_drc_coefficients_uni_drc->gain_set_params[seq].gain_interpolation_type;
- if (str_p_loc_drc_coefficients_uni_drc->gain_set_params[seq].time_delt_min_flag)
- {
- str_drc_instruction_str->time_delta_min_for_channel_group[g] = str_p_loc_drc_coefficients_uni_drc->gain_set_params[seq].time_delt_min_val;
- }
- else
- {
- str_drc_instruction_str->time_delta_min_for_channel_group[g] = ia_drc_params_struct->delta_tmin_default;
- }
- str_drc_instruction_str->time_alignment_for_channel_group[g] = str_p_loc_drc_coefficients_uni_drc->gain_set_params[seq].time_alignment;
- }
- }
-
- if (str_drc_instruction_str->drc_set_effect & (EFFECT_BIT_DUCK_OTHER | EFFECT_BIT_DUCK_SELF))
- {
- str_drc_instruction_str->gain_element_count = str_drc_instruction_str->num_drc_ch_groups;
- }
- else
- {
- for (g=0; g<str_drc_instruction_str->num_drc_ch_groups; g++)
- {
- if (str_drc_instruction_str->ch_group_parametric_drc_flag[g] == 1)
- {
- gain_element_count++;
- str_drc_instruction_str->band_count_of_ch_group[g] = 1;
- }
- else
- {
- WORD32 seq, band_count;
- seq = str_drc_instruction_str->gain_set_index_for_channel_group[g];
- band_count = str_p_loc_drc_coefficients_uni_drc->gain_set_params[seq].band_count;
- str_drc_instruction_str->band_count_of_ch_group[g] = band_count;
- gain_element_count += band_count;
- }
- }
- str_drc_instruction_str->gain_element_count = gain_element_count;
- }
-
- return(0);
+ }
+ str_drc_instruction_str->gain_interpolation_type_for_channel_group[g] =
+ str_p_loc_drc_coefficients_uni_drc->gain_set_params[seq]
+ .gain_interpolation_type;
+ if (str_p_loc_drc_coefficients_uni_drc->gain_set_params[seq]
+ .time_delt_min_flag) {
+ str_drc_instruction_str->time_delta_min_for_channel_group[g] =
+ str_p_loc_drc_coefficients_uni_drc->gain_set_params[seq]
+ .time_delt_min_val;
+ } else {
+ str_drc_instruction_str->time_delta_min_for_channel_group[g] =
+ ia_drc_params_struct->delta_tmin_default;
+ }
+ str_drc_instruction_str->time_alignment_for_channel_group[g] =
+ str_p_loc_drc_coefficients_uni_drc->gain_set_params[seq]
+ .time_alignment;
+ }
+ }
+
+ if (str_drc_instruction_str->drc_set_effect &
+ (EFFECT_BIT_DUCK_OTHER | EFFECT_BIT_DUCK_SELF)) {
+ str_drc_instruction_str->gain_element_count =
+ str_drc_instruction_str->num_drc_ch_groups;
+ } else {
+ for (g = 0; g < str_drc_instruction_str->num_drc_ch_groups; g++) {
+ if (str_drc_instruction_str->ch_group_parametric_drc_flag[g] == 1) {
+ gain_element_count++;
+ str_drc_instruction_str->band_count_of_ch_group[g] = 1;
+ } else {
+ WORD32 seq, band_count;
+ seq = str_drc_instruction_str->gain_set_index_for_channel_group[g];
+ band_count =
+ str_p_loc_drc_coefficients_uni_drc->gain_set_params[seq].band_count;
+ str_drc_instruction_str->band_count_of_ch_group[g] = band_count;
+ gain_element_count += band_count;
+ }
+ }
+ str_drc_instruction_str->gain_element_count = gain_element_count;
+ }
+
+ return (0);
}
WORD32
impd_parse_drc_config(ia_bit_buf_struct* it_bit_buff,
ia_drc_params_bs_dec_struct* ia_drc_params_struct,
- ia_drc_config* drc_config
- )
-{
- WORD32 i, err = 0, temp;
- WORD32 version = 0;
-
- drc_config->sample_rate_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if(drc_config->sample_rate_present == 1)
- {
- WORD32 bssample_rate;
- bssample_rate = impd_read_bits_buf(it_bit_buff, 18);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- drc_config->sampling_rate = bssample_rate + 1000;
- }
+ ia_drc_config* drc_config) {
+ WORD32 i, err = 0, temp;
+ WORD32 version = 0;
- temp = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ drc_config->sample_rate_present = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
- drc_config->dwnmix_instructions_count = (temp>>1)&0x7f;
- drc_config->drc_description_basic_present = temp&1;
+ if (drc_config->sample_rate_present == 1) {
+ WORD32 bssample_rate;
+ bssample_rate = impd_read_bits_buf(it_bit_buff, 18);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ drc_config->sampling_rate = bssample_rate + 1000;
+ }
- if (drc_config->drc_description_basic_present == 1)
- {
- temp = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ temp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
- drc_config->drc_coefficients_basic_count = (temp>>4)&7;
- drc_config->drc_instructions_basic_count = temp&0xf;
+ drc_config->dwnmix_instructions_count = (temp >> 1) & 0x7f;
+ drc_config->drc_description_basic_present = temp & 1;
- }
- else
- {
- drc_config->drc_coefficients_basic_count = 0;
- drc_config->drc_instructions_basic_count = 0;
- }
+ if (drc_config->drc_description_basic_present == 1) {
+ temp = impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
- temp = impd_read_bits_buf(it_bit_buff, 9);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ drc_config->drc_coefficients_basic_count = (temp >> 4) & 7;
+ drc_config->drc_instructions_basic_count = temp & 0xf;
- drc_config->drc_coefficients_drc_count = (temp>>6)&7;
- drc_config->drc_instructions_uni_drc_count = temp&0x3f;
+ } else {
+ drc_config->drc_coefficients_basic_count = 0;
+ drc_config->drc_instructions_basic_count = 0;
+ }
- err = impd_parse_ch_layout(it_bit_buff, ia_drc_params_struct, &drc_config->channel_layout);
- if (err) return(err);
+ temp = impd_read_bits_buf(it_bit_buff, 9);
+ if (it_bit_buff->error) return it_bit_buff->error;
- for(i=0; i<drc_config->dwnmix_instructions_count; i++)
- {
- err = impd_parse_dwnmix_instructions(it_bit_buff, version, ia_drc_params_struct, &drc_config->channel_layout, &(drc_config->dwnmix_instructions[i]));
- if (err) return(err);
- }
- for(i=0; i<drc_config->drc_coefficients_basic_count ; i++)
- {
- temp = impd_read_bits_buf(it_bit_buff, 11);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ drc_config->drc_coefficients_drc_count = (temp >> 6) & 7;
+ drc_config->drc_instructions_uni_drc_count = temp & 0x3f;
- drc_config->str_drc_coefficients_basic[i].drc_location = (temp>>7)&0xf;
- drc_config->str_drc_coefficients_basic[i].drc_characteristic = temp&0x3f;
+ err = impd_parse_ch_layout(it_bit_buff, ia_drc_params_struct,
+ &drc_config->channel_layout);
+ if (err) return (err);
- }
- for(i=0; i<drc_config->drc_instructions_basic_count; i++)
- {
- err = impd_drc_parse_instructions_basic(it_bit_buff, &(drc_config->str_drc_instructions_basic[i]));
- if (err) return(err);
- }
- for(i=0; i<drc_config->drc_coefficients_drc_count; i++)
- {
- err = impd_drc_parse_coeff(it_bit_buff, version, ia_drc_params_struct, &(drc_config->str_p_loc_drc_coefficients_uni_drc[i]));
- if (err) return(err);
- }
- for(i=0; i<drc_config->drc_instructions_uni_drc_count; i++)
- {
- err = impd_parse_drc_instructions_uni_drc(it_bit_buff, version, drc_config, &(drc_config->str_drc_instruction_str[i]));
- if (err) return(err);
- }
+ for (i = 0; i < drc_config->dwnmix_instructions_count; i++) {
+ err = impd_parse_dwnmix_instructions(
+ it_bit_buff, version, ia_drc_params_struct, &drc_config->channel_layout,
+ &(drc_config->dwnmix_instructions[i]));
+ if (err) return (err);
+ }
+ for (i = 0; i < drc_config->drc_coefficients_basic_count; i++) {
+ temp = impd_read_bits_buf(it_bit_buff, 11);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ drc_config->str_drc_coefficients_basic[i].drc_location = (temp >> 7) & 0xf;
+ drc_config->str_drc_coefficients_basic[i].drc_characteristic = temp & 0x3f;
+ }
+ for (i = 0; i < drc_config->drc_instructions_basic_count; i++) {
+ err = impd_drc_parse_instructions_basic(
+ it_bit_buff, &(drc_config->str_drc_instructions_basic[i]));
+ if (err) return (err);
+ }
+ for (i = 0; i < drc_config->drc_coefficients_drc_count; i++) {
+ err = impd_drc_parse_coeff(
+ it_bit_buff, version, ia_drc_params_struct,
+ &(drc_config->str_p_loc_drc_coefficients_uni_drc[i]));
+ if (err) return (err);
+ }
+ for (i = 0; i < drc_config->drc_instructions_uni_drc_count; i++) {
+ err = impd_parse_drc_instructions_uni_drc(
+ it_bit_buff, version, drc_config,
+ &(drc_config->str_drc_instruction_str[i]));
+ if (err) return (err);
+ }
- drc_config->drc_config_ext_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ drc_config->drc_config_ext_present = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
- if (drc_config->drc_config_ext_present == 1)
- {
- err = impd_parse_drc_config_ext( it_bit_buff, ia_drc_params_struct, drc_config, &(drc_config->str_drc_config_ext));
- if (err) return(err);
- }
+ if (drc_config->drc_config_ext_present == 1) {
+ err =
+ impd_parse_drc_config_ext(it_bit_buff, ia_drc_params_struct, drc_config,
+ &(drc_config->str_drc_config_ext));
+ if (err) return (err);
+ }
- if ( drc_config->str_drc_config_ext.parametric_drc_present )
- {
- err = impd_parametric_drc_gen_virtual_gain_sets(drc_config);
- if (err) return(err);
- }
+ if (drc_config->str_drc_config_ext.parametric_drc_present) {
+ err = impd_parametric_drc_gen_virtual_gain_sets(drc_config);
+ if (err) return (err);
+ }
- for(i=0; i<drc_config->drc_instructions_uni_drc_count; i++)
- {
- err = impd_drc_gen_instructions_derived_data(drc_config, ia_drc_params_struct, &(drc_config->str_drc_instruction_str[i]));
- if (err) return(err);
- }
+ for (i = 0; i < drc_config->drc_instructions_uni_drc_count; i++) {
+ err = impd_drc_gen_instructions_derived_data(
+ drc_config, ia_drc_params_struct,
+ &(drc_config->str_drc_instruction_str[i]));
+ if (err) return (err);
+ }
- impd_drc_gen_instructions_for_drc_off(drc_config);
- return(0);
+ impd_drc_gen_instructions_for_drc_off(drc_config);
+ return (0);
}
WORD32
-impd_dec_method_value(ia_bit_buf_struct* it_bit_buff,
- WORD32 method_def,
- FLOAT32* method_val)
-{
- //WORD32 err = 0;
- WORD32 tmp;
- FLOAT32 val;
- switch (method_def) {
+impd_dec_method_value(ia_bit_buf_struct* it_bit_buff, WORD32 method_def,
+ FLOAT32* method_val) {
+ // WORD32 err = 0;
+ WORD32 tmp;
+ FLOAT32 val;
+ switch (method_def) {
case METHOD_DEFINITION_UNKNOWN_OTHER:
case METHOD_DEFINITION_PROGRAM_LOUDNESS:
case METHOD_DEFINITION_ANCHOR_LOUDNESS:
case METHOD_DEFINITION_MAX_OF_LOUDNESS_RANGE:
case METHOD_DEFINITION_MOMENTARY_LOUDNESS_MAX:
case METHOD_DEFINITION_SHORT_TERM_LOUDNESS_MAX:
- tmp = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- val = -57.75f + tmp * 0.25f;
- break;
+ tmp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ val = -57.75f + tmp * 0.25f;
+ break;
case METHOD_DEFINITION_LOUDNESS_RANGE:
- tmp = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (tmp == 0)
- val = 0.0f;
- else if(tmp <= 128)
- val = tmp * 0.25f;
- else if(tmp <= 204)
- val = 0.5f * tmp - 32.0f;
- else
- val = tmp - 134.0f;
- break;
+ tmp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (tmp == 0)
+ val = 0.0f;
+ else if (tmp <= 128)
+ val = tmp * 0.25f;
+ else if (tmp <= 204)
+ val = 0.5f * tmp - 32.0f;
+ else
+ val = tmp - 134.0f;
+ break;
case METHOD_DEFINITION_MIXING_LEVEL:
- tmp = impd_read_bits_buf(it_bit_buff, 5);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- val = tmp + 80.0f;
- break;
+ tmp = impd_read_bits_buf(it_bit_buff, 5);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ val = tmp + 80.0f;
+ break;
case METHOD_DEFINITION_ROOM_TYPE:
- tmp = impd_read_bits_buf(it_bit_buff, 2);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- val = (FLOAT32)tmp;
- break;
+ tmp = impd_read_bits_buf(it_bit_buff, 2);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ val = (FLOAT32)tmp;
+ break;
case METHOD_DEFINITION_SHORT_TERM_LOUDNESS:
- tmp = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- val = -116.f + tmp * 0.5f;
- break;
+ tmp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ val = -116.f + tmp * 0.5f;
+ break;
default:
- return -1;
- break;
- }
- *method_val = val;
- return 0;
+ return -1;
+ break;
+ }
+ *method_val = val;
+ return 0;
}
-
WORD32
-impd_parse_loudness_info_set(ia_bit_buf_struct* it_bit_buff,
- ia_drc_loudness_info_set_struct* loudness_info_set)
-{
- WORD32 err = 0, i, version = 0, offset, temp;
- WORD32 loudness_info_album_count, loudness_info_count;
-
- temp = impd_read_bits_buf(it_bit_buff, 12);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- loudness_info_album_count = (temp>>6)&0x3f;
- loudness_info_count = temp&0x3f;
-
- offset = loudness_info_set->loudness_info_album_count;
- loudness_info_set->loudness_info_album_count += loudness_info_album_count;
- for (i = 0; i< loudness_info_set->loudness_info_album_count; i++)
- {
- err = impd_parse_loudness_info(it_bit_buff, version, &(loudness_info_set->str_loudness_info_album[i+offset]));
- if (err) return(err);
- }
+impd_parse_loudness_info_set(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_drc_loudness_info_set_struct* loudness_info_set) {
+ WORD32 err = 0, i, version = 0, offset, temp;
+ WORD32 loudness_info_album_count, loudness_info_count;
+
+ temp = impd_read_bits_buf(it_bit_buff, 12);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ loudness_info_album_count = (temp >> 6) & 0x3f;
+ loudness_info_count = temp & 0x3f;
+
+ offset = loudness_info_set->loudness_info_album_count;
+ loudness_info_set->loudness_info_album_count += loudness_info_album_count;
+ for (i = 0; i < loudness_info_set->loudness_info_album_count; i++) {
+ err = impd_parse_loudness_info(
+ it_bit_buff, version,
+ &(loudness_info_set->str_loudness_info_album[i + offset]));
+ if (err) return (err);
+ }
- offset = loudness_info_set->loudness_info_count;
- loudness_info_set->loudness_info_count += loudness_info_count;
- for (i = 0; i<loudness_info_set->loudness_info_count; i++)
- {
- err = impd_parse_loudness_info(it_bit_buff, version, &(loudness_info_set->loudness_info[i+offset]));
- if (err) return(err);
- }
+ offset = loudness_info_set->loudness_info_count;
+ loudness_info_set->loudness_info_count += loudness_info_count;
+ for (i = 0; i < loudness_info_set->loudness_info_count; i++) {
+ err = impd_parse_loudness_info(
+ it_bit_buff, version, &(loudness_info_set->loudness_info[i + offset]));
+ if (err) return (err);
+ }
- loudness_info_set->loudness_info_set_ext_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ loudness_info_set->loudness_info_set_ext_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
- if ( loudness_info_set->loudness_info_set_ext_present == 1)
- {
- err = impd_parse_loudness_info_set_ext(it_bit_buff, loudness_info_set);
- if (err) return(err);
- }
+ if (loudness_info_set->loudness_info_set_ext_present == 1) {
+ err = impd_parse_loudness_info_set_ext(it_bit_buff, loudness_info_set);
+ if (err) return (err);
+ }
- return (0);
+ return (0);
}
WORD32
impd_parse_gain_set_params_characteristics(ia_bit_buf_struct* it_bit_buff,
WORD32 version,
- ia_gain_params_struct* gain_params)
-{
- //WORD32 err = 0;
- WORD32 temp;
- if (version == 0)
- {
+ ia_gain_params_struct* gain_params) {
+ // WORD32 err = 0;
+ WORD32 temp;
+ if (version == 0) {
+ gain_params->drc_characteristic = impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (gain_params->drc_characteristic > 0) {
+ gain_params->drc_characteristic_present = 1;
+ gain_params->drc_characteristic_format_is_cicp = 1;
+ } else {
+ gain_params->drc_characteristic_present = 0;
+ }
+ } else {
+ gain_params->drc_characteristic_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (gain_params->drc_characteristic_present) {
+ gain_params->drc_characteristic_format_is_cicp =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (gain_params->drc_characteristic_format_is_cicp) {
gain_params->drc_characteristic = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (gain_params->drc_characteristic > 0)
- {
- gain_params->drc_characteristic_present = 1;
- gain_params->drc_characteristic_format_is_cicp = 1;
- }
- else
- {
- gain_params->drc_characteristic_present = 0;
- }
- }
- else {
- gain_params->drc_characteristic_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (gain_params->drc_characteristic_present)
- {
- gain_params->drc_characteristic_format_is_cicp = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (gain_params->drc_characteristic_format_is_cicp)
- {
- gain_params->drc_characteristic = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- else
- {
- temp = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- gain_params->drc_characteristic_left_index = (temp>>4)&0xf;
- gain_params->drc_characteristic_right_index = temp&0xf;
+ if (it_bit_buff->error) return it_bit_buff->error;
+ } else {
+ temp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
- }
- }
+ gain_params->drc_characteristic_left_index = (temp >> 4) & 0xf;
+ gain_params->drc_characteristic_right_index = temp & 0xf;
+ }
}
- return(0);
+ }
+ return (0);
}
WORD32
impd_parse_loudness_measure(ia_bit_buf_struct* it_bit_buff,
- ia_loudness_measure_struct* loudness_measure)
-{
- WORD32 err = 0, temp;
+ ia_loudness_measure_struct* loudness_measure) {
+ WORD32 err = 0, temp;
- loudness_measure->method_def = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ loudness_measure->method_def = impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
- err = impd_dec_method_value(it_bit_buff, loudness_measure->method_def, &(loudness_measure->method_val));
- if(err) return err;
+ err = impd_dec_method_value(it_bit_buff, loudness_measure->method_def,
+ &(loudness_measure->method_val));
+ if (err) return err;
- temp = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ temp = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
- loudness_measure->measurement_system = (temp>>2)&0xf;
- loudness_measure->reliability = temp&3;
+ loudness_measure->measurement_system = (temp >> 2) & 0xf;
+ loudness_measure->reliability = temp & 3;
- return (0);
+ return (0);
}
-
WORD32
-impd_dec_gain_modifiers(ia_bit_buf_struct* it_bit_buff,
- WORD32 version,
+impd_dec_gain_modifiers(ia_bit_buf_struct* it_bit_buff, WORD32 version,
WORD32 band_count,
- ia_gain_modifiers_struct* pstr_gain_modifiers)
-{
-
- //WORD32 err = 0;
- WORD32 sign, temp;
-
- if (version > 0)
- {
- WORD32 b;
- for (b=0; b<band_count; b++)
- {
- pstr_gain_modifiers->target_characteristic_left_present[b] = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (pstr_gain_modifiers->target_characteristic_left_present[b])
- {
- pstr_gain_modifiers->target_characteristic_left_index[b] = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- pstr_gain_modifiers->target_characteristic_right_present[b] = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (pstr_gain_modifiers->target_characteristic_right_present[b])
- {
- pstr_gain_modifiers->target_characteristic_right_index[b] = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- pstr_gain_modifiers->gain_scaling_flag[b] = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (pstr_gain_modifiers->gain_scaling_flag[b])
- {
- temp = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- pstr_gain_modifiers->attn_scaling[b] = ((temp>>4)&0xf) * 0.125f;
- pstr_gain_modifiers->ampl_scaling[b] = (temp&0xf) * 0.125f;
- }
-
- pstr_gain_modifiers->gain_offset_flag[b] = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (pstr_gain_modifiers->gain_offset_flag[b])
- {
- FLOAT32 gain_offset;
- temp = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- sign = ((temp>>5)&1);
- gain_offset = (1+(temp&0x1f)) * 0.25f;
-
- if (sign)
- {
- gain_offset = - gain_offset;
- }
- pstr_gain_modifiers->gain_offset[b] = gain_offset;
- }
- }
- if (band_count == 1)
- {
- pstr_gain_modifiers->shape_filter_flag = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (pstr_gain_modifiers->shape_filter_flag)
- {
- pstr_gain_modifiers->shape_filter_idx = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- }
- }
- else if (version == 0)
- {
- WORD32 b, gain_scaling_flag, gain_offset_flag;
- FLOAT32 attn_scaling = 1.0f, ampl_scaling = 1.0f, gain_offset = 0.0f;
-
- gain_scaling_flag = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if(gain_scaling_flag)
- {
- temp = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- attn_scaling = ((temp>>4)&0xf) * 0.125f;
- ampl_scaling = (temp&0xf) * 0.125f;
-
- }
-
- gain_offset_flag = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if(gain_offset_flag)
- {
-
- temp = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ ia_gain_modifiers_struct* pstr_gain_modifiers) {
+ // WORD32 err = 0;
+ WORD32 sign, temp;
+
+ if (version > 0) {
+ WORD32 b;
+ for (b = 0; b < band_count; b++) {
+ pstr_gain_modifiers->target_characteristic_left_present[b] =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (pstr_gain_modifiers->target_characteristic_left_present[b]) {
+ pstr_gain_modifiers->target_characteristic_left_index[b] =
+ impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+ pstr_gain_modifiers->target_characteristic_right_present[b] =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (pstr_gain_modifiers->target_characteristic_right_present[b]) {
+ pstr_gain_modifiers->target_characteristic_right_index[b] =
+ impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+ pstr_gain_modifiers->gain_scaling_flag[b] =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (pstr_gain_modifiers->gain_scaling_flag[b]) {
+ temp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
- sign = ((temp>>5)&1);
- gain_offset = (1+(temp&0x1f)) * 0.25f;
+ pstr_gain_modifiers->attn_scaling[b] = ((temp >> 4) & 0xf) * 0.125f;
+ pstr_gain_modifiers->ampl_scaling[b] = (temp & 0xf) * 0.125f;
+ }
- if (sign)
- {
- gain_offset = - gain_offset;
- }
- }
- for (b=0; b<band_count; b++) {
- pstr_gain_modifiers->target_characteristic_left_present[b] = 0;
- pstr_gain_modifiers->target_characteristic_right_present[b] = 0;
- pstr_gain_modifiers->gain_scaling_flag[b] = gain_scaling_flag;
- pstr_gain_modifiers->attn_scaling[b] = attn_scaling;
- pstr_gain_modifiers->ampl_scaling[b] = ampl_scaling;
- pstr_gain_modifiers->gain_offset_flag[b] = gain_offset_flag;
- pstr_gain_modifiers->gain_offset[b] = gain_offset;
- }
- pstr_gain_modifiers->shape_filter_flag = 0;
- }
- return (0);
+ pstr_gain_modifiers->gain_offset_flag[b] =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (pstr_gain_modifiers->gain_offset_flag[b]) {
+ FLOAT32 gain_offset;
+ temp = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ sign = ((temp >> 5) & 1);
+ gain_offset = (1 + (temp & 0x1f)) * 0.25f;
+
+ if (sign) {
+ gain_offset = -gain_offset;
+ }
+ pstr_gain_modifiers->gain_offset[b] = gain_offset;
+ }
+ }
+ if (band_count == 1) {
+ pstr_gain_modifiers->shape_filter_flag =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (pstr_gain_modifiers->shape_filter_flag) {
+ pstr_gain_modifiers->shape_filter_idx =
+ impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+ }
+ } else if (version == 0) {
+ WORD32 b, gain_scaling_flag, gain_offset_flag;
+ FLOAT32 attn_scaling = 1.0f, ampl_scaling = 1.0f, gain_offset = 0.0f;
+
+ gain_scaling_flag = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (gain_scaling_flag) {
+ temp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ attn_scaling = ((temp >> 4) & 0xf) * 0.125f;
+ ampl_scaling = (temp & 0xf) * 0.125f;
+ }
+
+ gain_offset_flag = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (gain_offset_flag) {
+ temp = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ sign = ((temp >> 5) & 1);
+ gain_offset = (1 + (temp & 0x1f)) * 0.25f;
+
+ if (sign) {
+ gain_offset = -gain_offset;
+ }
+ }
+ for (b = 0; b < band_count; b++) {
+ pstr_gain_modifiers->target_characteristic_left_present[b] = 0;
+ pstr_gain_modifiers->target_characteristic_right_present[b] = 0;
+ pstr_gain_modifiers->gain_scaling_flag[b] = gain_scaling_flag;
+ pstr_gain_modifiers->attn_scaling[b] = attn_scaling;
+ pstr_gain_modifiers->ampl_scaling[b] = ampl_scaling;
+ pstr_gain_modifiers->gain_offset_flag[b] = gain_offset_flag;
+ pstr_gain_modifiers->gain_offset[b] = gain_offset;
+ }
+ pstr_gain_modifiers->shape_filter_flag = 0;
+ }
+ return (0);
}
WORD32
-impd_parse_gain_set_params(ia_bit_buf_struct* it_bit_buff,
- WORD32 version,
+impd_parse_gain_set_params(ia_bit_buf_struct* it_bit_buff, WORD32 version,
WORD32* gain_seq_idx,
- ia_gain_set_params_struct* gain_set_params)
-{
- WORD32 err = 0, i, temp;
-
- temp = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- gain_set_params->gain_coding_profile = (temp>>4)&3;
- gain_set_params->gain_interpolation_type = (temp>>3)&1;
- gain_set_params->full_frame = (temp>>2)&1;
- gain_set_params->time_alignment = (temp>>1)&1;
- gain_set_params->time_delt_min_flag = temp&1;
-
- if(gain_set_params->time_delt_min_flag)
- {
- WORD32 time_delta_min;
- time_delta_min = impd_read_bits_buf(it_bit_buff, 11);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- gain_set_params->time_delt_min_val = time_delta_min + 1;
- }
-
- if (gain_set_params->gain_coding_profile == GAIN_CODING_PROFILE_CONSTANT)
- {
- gain_set_params->band_count = 1;
+ ia_gain_set_params_struct* gain_set_params) {
+ WORD32 err = 0, i, temp;
+
+ temp = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ gain_set_params->gain_coding_profile = (temp >> 4) & 3;
+ gain_set_params->gain_interpolation_type = (temp >> 3) & 1;
+ gain_set_params->full_frame = (temp >> 2) & 1;
+ gain_set_params->time_alignment = (temp >> 1) & 1;
+ gain_set_params->time_delt_min_flag = temp & 1;
+
+ if (gain_set_params->time_delt_min_flag) {
+ WORD32 time_delta_min;
+ time_delta_min = impd_read_bits_buf(it_bit_buff, 11);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ gain_set_params->time_delt_min_val = time_delta_min + 1;
+ }
+
+ if (gain_set_params->gain_coding_profile == GAIN_CODING_PROFILE_CONSTANT) {
+ gain_set_params->band_count = 1;
+ *gain_seq_idx = (*gain_seq_idx) + 1;
+ } else {
+ gain_set_params->band_count = impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (gain_set_params->band_count > 1) {
+ gain_set_params->drc_band_type = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+ for (i = 0; i < gain_set_params->band_count; i++) {
+ if (version == 0) {
*gain_seq_idx = (*gain_seq_idx) + 1;
- }
- else
- {
- gain_set_params->band_count = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if(gain_set_params->band_count>1)
- {
- gain_set_params->drc_band_type = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- for(i=0; i<gain_set_params->band_count; i++)
- {
- if (version == 0) {
- *gain_seq_idx = (*gain_seq_idx) + 1;
- }
- else
- {
- WORD32 indexPresent;
- indexPresent = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (indexPresent)
- {
- WORD32 bsIndex;
- bsIndex = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- *gain_seq_idx = bsIndex;
- }
- else
- {
- *gain_seq_idx = (*gain_seq_idx) + 1;
- }
- }
- gain_set_params->gain_params[i].gain_seq_idx = *gain_seq_idx;
- err = impd_parse_gain_set_params_characteristics(it_bit_buff, version, &(gain_set_params->gain_params[i]));
- if (err) return(err);
- }
- if (gain_set_params->drc_band_type)
- {
- for(i=1; i<gain_set_params->band_count; i++)
- {
- gain_set_params->gain_params[i].crossover_freq_idx = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- }
- else
- {
- for(i=1; i<gain_set_params->band_count; i++)
- {
- gain_set_params->gain_params[i].start_subband_index = impd_read_bits_buf(it_bit_buff, 10);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- }
-
- }
-
- return(0);
+ } else {
+ WORD32 indexPresent;
+ indexPresent = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (indexPresent) {
+ WORD32 bsIndex;
+ bsIndex = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ *gain_seq_idx = bsIndex;
+ } else {
+ *gain_seq_idx = (*gain_seq_idx) + 1;
+ }
+ }
+ gain_set_params->gain_params[i].gain_seq_idx = *gain_seq_idx;
+ err = impd_parse_gain_set_params_characteristics(
+ it_bit_buff, version, &(gain_set_params->gain_params[i]));
+ if (err) return (err);
+ }
+ if (gain_set_params->drc_band_type) {
+ for (i = 1; i < gain_set_params->band_count; i++) {
+ gain_set_params->gain_params[i].crossover_freq_idx =
+ impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+ } else {
+ for (i = 1; i < gain_set_params->band_count; i++) {
+ gain_set_params->gain_params[i].start_subband_index =
+ impd_read_bits_buf(it_bit_buff, 10);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+ }
+ }
+
+ return (0);
}
WORD32
-impd_sel_drc_coeff(ia_drc_config* drc_config,
- WORD32 location,
- ia_uni_drc_coeffs_struct** str_p_loc_drc_coefficients_uni_drc)
-{
- WORD32 n;
- WORD32 c1 = -1;
- WORD32 c0 = -1;
- for(n=0; n<drc_config->drc_coefficients_drc_count; n++)
- {
- if (drc_config->str_p_loc_drc_coefficients_uni_drc[n].drc_location == location)
- {
- if (drc_config->str_p_loc_drc_coefficients_uni_drc[n].version == 0)
- {
- c0 = n;
- }
- else
- {
- c1 = n;
- }
- }
- }
- if (c1 >= 0) {
- *str_p_loc_drc_coefficients_uni_drc = &(drc_config->str_p_loc_drc_coefficients_uni_drc[c1]);
- }
- else if (c0 >= 0) {
- *str_p_loc_drc_coefficients_uni_drc = &(drc_config->str_p_loc_drc_coefficients_uni_drc[c0]);
- }
- else {
- *str_p_loc_drc_coefficients_uni_drc = NULL;
- }
- return (0);
+impd_sel_drc_coeff(
+ ia_drc_config* drc_config, WORD32 location,
+ ia_uni_drc_coeffs_struct** str_p_loc_drc_coefficients_uni_drc) {
+ WORD32 n;
+ WORD32 c1 = -1;
+ WORD32 c0 = -1;
+ for (n = 0; n < drc_config->drc_coefficients_drc_count; n++) {
+ if (drc_config->str_p_loc_drc_coefficients_uni_drc[n].drc_location ==
+ location) {
+ if (drc_config->str_p_loc_drc_coefficients_uni_drc[n].version == 0) {
+ c0 = n;
+ } else {
+ c1 = n;
+ }
+ }
+ }
+ if (c1 >= 0) {
+ *str_p_loc_drc_coefficients_uni_drc =
+ &(drc_config->str_p_loc_drc_coefficients_uni_drc[c1]);
+ } else if (c0 >= 0) {
+ *str_p_loc_drc_coefficients_uni_drc =
+ &(drc_config->str_p_loc_drc_coefficients_uni_drc[c0]);
+ } else {
+ *str_p_loc_drc_coefficients_uni_drc = NULL;
+ }
+ return (0);
}
-
-
WORD32
-impd_parse_loudness_info_set_ext(ia_bit_buf_struct* it_bit_buff,
- ia_drc_loudness_info_set_struct* loudness_info_set)
-{
- WORD32 err = 0, i, k;
- WORD32 bit_size_len, ext_size_bits, bit_size, other_bit;
-
- k = 0;
- loudness_info_set->str_loudness_info_set_ext.loudness_info_set_ext_type[k] = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- while(loudness_info_set->str_loudness_info_set_ext.loudness_info_set_ext_type[k] != UNIDRCLOUDEXT_TERM)
- {
- bit_size_len = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- ext_size_bits = bit_size_len + 4;
-
- bit_size = impd_read_bits_buf(it_bit_buff, ext_size_bits);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- loudness_info_set->str_loudness_info_set_ext.ext_bit_size[k] = bit_size + 1;
-
- switch(loudness_info_set->str_loudness_info_set_ext.loudness_info_set_ext_type[k])
- {
- case UNIDRCLOUDEXT_EQ:
- err = impd_parse_loud_info_set_ext_eq(it_bit_buff, loudness_info_set);
- if (err) return(err);
- break;
- default:
- for(i = 0; i<loudness_info_set->str_loudness_info_set_ext.ext_bit_size[k]; i++)
- {
- other_bit = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- break;
+impd_parse_loudness_info_set_ext(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_drc_loudness_info_set_struct* loudness_info_set) {
+ WORD32 err = 0, i, k;
+ WORD32 bit_size_len, ext_size_bits, bit_size, other_bit;
+
+ k = 0;
+ loudness_info_set->str_loudness_info_set_ext.loudness_info_set_ext_type[k] =
+ impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ while (loudness_info_set->str_loudness_info_set_ext
+ .loudness_info_set_ext_type[k] != UNIDRCLOUDEXT_TERM) {
+ bit_size_len = impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ ext_size_bits = bit_size_len + 4;
+
+ bit_size = impd_read_bits_buf(it_bit_buff, ext_size_bits);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ loudness_info_set->str_loudness_info_set_ext.ext_bit_size[k] = bit_size + 1;
+
+ switch (loudness_info_set->str_loudness_info_set_ext
+ .loudness_info_set_ext_type[k]) {
+ case UNIDRCLOUDEXT_EQ:
+ err = impd_parse_loud_info_set_ext_eq(it_bit_buff, loudness_info_set);
+ if (err) return (err);
+ break;
+ default:
+ for (i = 0;
+ i < loudness_info_set->str_loudness_info_set_ext.ext_bit_size[k];
+ i++) {
+ other_bit = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
}
- k++;
- loudness_info_set->str_loudness_info_set_ext.loudness_info_set_ext_type[k] = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ break;
}
+ k++;
+ loudness_info_set->str_loudness_info_set_ext.loudness_info_set_ext_type[k] =
+ impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
- return (0);
+ return (0);
}
WORD32
-impd_drc_parse_coeff(ia_bit_buf_struct* it_bit_buff,
- WORD32 version,
- ia_drc_params_bs_dec_struct* ia_drc_params_struct,
- ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc)
-{
- WORD32 err = 0, i, drc_frame_size, temp;
- WORD32 gain_seq_idx = -1;
-
- str_p_loc_drc_coefficients_uni_drc->version = version;
- if (version == 0) {
- WORD32 gain_sequence_count = 0;
- temp = impd_read_bits_buf(it_bit_buff, 5);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- str_p_loc_drc_coefficients_uni_drc->drc_location = (temp>>1)&0xf;
- str_p_loc_drc_coefficients_uni_drc->drc_frame_size_present = temp&1;
-
- if (str_p_loc_drc_coefficients_uni_drc->drc_frame_size_present == 1)
- {
- drc_frame_size = impd_read_bits_buf(it_bit_buff, 15);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- str_p_loc_drc_coefficients_uni_drc->drc_frame_size = drc_frame_size + 1;
- }
-
- str_p_loc_drc_coefficients_uni_drc->drc_characteristic_left_present = 0;
- str_p_loc_drc_coefficients_uni_drc->drc_characteristic_right_present = 0;
- str_p_loc_drc_coefficients_uni_drc->shape_filters_present = 0;
- str_p_loc_drc_coefficients_uni_drc->gain_set_count = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- str_p_loc_drc_coefficients_uni_drc->gain_set_count_plus = str_p_loc_drc_coefficients_uni_drc->gain_set_count;
- for(i=0; i<str_p_loc_drc_coefficients_uni_drc->gain_set_count; i++)
- {
- err = impd_parse_gain_set_params(it_bit_buff, version, &gain_seq_idx, &(str_p_loc_drc_coefficients_uni_drc->gain_set_params[i]));
- if (err) return (err);
-
- if (str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].time_delt_min_flag)
- {
- if (str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].time_delt_min_val > ia_drc_params_struct->drc_frame_size)
- {
- /* drc time interval too big */
- return(PARAM_ERROR);
- }
- str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].num_gain_max_values = ia_drc_params_struct->drc_frame_size / str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].time_delt_min_val;
- err = impd_init_tbls(str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].num_gain_max_values, &(str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].str_tables));
- if (err) return (err);
- }
- gain_sequence_count += str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].band_count;
- }
- str_p_loc_drc_coefficients_uni_drc->gain_sequence_count = gain_sequence_count;
- }
- else {
-
- ia_shape_filter_block_params_struct* pstr_shape_filter_block_params;
- for (i=0; i<SEQUENCE_COUNT_MAX; i++)
- {
- str_p_loc_drc_coefficients_uni_drc->gain_set_params_index_for_gain_sequence[i] = -1;
- }
-
- temp = impd_read_bits_buf(it_bit_buff, 5);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- str_p_loc_drc_coefficients_uni_drc->drc_location = (temp>>1)&0xf;
- str_p_loc_drc_coefficients_uni_drc->drc_frame_size_present = temp&1;
-
- if (str_p_loc_drc_coefficients_uni_drc->drc_frame_size_present == 1)
- {
- drc_frame_size = impd_read_bits_buf(it_bit_buff, 15);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- str_p_loc_drc_coefficients_uni_drc->drc_frame_size = drc_frame_size + 1;
- }
- str_p_loc_drc_coefficients_uni_drc->drc_characteristic_left_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (str_p_loc_drc_coefficients_uni_drc->drc_characteristic_left_present == 1)
- {
- str_p_loc_drc_coefficients_uni_drc->characteristic_left_count = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- for (i=1; i<=str_p_loc_drc_coefficients_uni_drc->characteristic_left_count; i++)
- {
- err = impd_parse_split_drc_characteristic(it_bit_buff, LEFT_SIDE, &(str_p_loc_drc_coefficients_uni_drc->str_split_characteristic_left[i]));
- if (err) return(err);
- }
- }
- str_p_loc_drc_coefficients_uni_drc->drc_characteristic_right_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (str_p_loc_drc_coefficients_uni_drc->drc_characteristic_right_present == 1)
- {
- str_p_loc_drc_coefficients_uni_drc->characteristic_right_count = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- for (i=1; i<=str_p_loc_drc_coefficients_uni_drc->characteristic_right_count; i++)
- {
- err = impd_parse_split_drc_characteristic(it_bit_buff, RIGHT_SIDE, &(str_p_loc_drc_coefficients_uni_drc->str_split_characteristic_right[i]));
- if (err) return(err);
- }
- }
- str_p_loc_drc_coefficients_uni_drc->shape_filters_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (str_p_loc_drc_coefficients_uni_drc->shape_filters_present == 1)
- {
- str_p_loc_drc_coefficients_uni_drc->shape_num_filter = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- for (i=1; i<=str_p_loc_drc_coefficients_uni_drc->shape_num_filter; i++)
- {
- pstr_shape_filter_block_params = &(str_p_loc_drc_coefficients_uni_drc->str_shape_filter_block_params[i]);
- pstr_shape_filter_block_params->lf_cut_filter_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if (pstr_shape_filter_block_params->lf_cut_filter_present == 1)
- {
-
- temp = impd_read_bits_buf(it_bit_buff, 5);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- pstr_shape_filter_block_params->str_lf_cut_params.corner_freq_index = (temp>>2)&7;
- pstr_shape_filter_block_params->str_lf_cut_params.filter_strength_index = temp&3;
- }
- pstr_shape_filter_block_params->lf_boost_filter_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (pstr_shape_filter_block_params->lf_boost_filter_present == 1)
- {
- temp = impd_read_bits_buf(it_bit_buff, 5);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- pstr_shape_filter_block_params->str_lf_boost_params.corner_freq_index = (temp>>2)&7;
- pstr_shape_filter_block_params->str_lf_boost_params.filter_strength_index = temp&3;
-
- }
- pstr_shape_filter_block_params->hf_cut_filter_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (pstr_shape_filter_block_params->hf_cut_filter_present == 1)
- {
- temp = impd_read_bits_buf(it_bit_buff, 5);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- pstr_shape_filter_block_params->str_hfCutParams.corner_freq_index = (temp>>2)&7;
- pstr_shape_filter_block_params->str_hfCutParams.filter_strength_index = temp&3;
-
- }
- pstr_shape_filter_block_params->hf_boost_filter_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (pstr_shape_filter_block_params->hf_boost_filter_present == 1)
- {
- temp = impd_read_bits_buf(it_bit_buff, 5);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- pstr_shape_filter_block_params->str_hf_boost_params.corner_freq_index = (temp>>2)&7;
- pstr_shape_filter_block_params->str_hf_boost_params.filter_strength_index = temp&3;
-
- }
- }
- }
-
- temp = impd_read_bits_buf(it_bit_buff, 12);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- str_p_loc_drc_coefficients_uni_drc->gain_sequence_count = (temp>>6)&0x3f;
- str_p_loc_drc_coefficients_uni_drc->gain_set_count = temp&0x3f;
-
- str_p_loc_drc_coefficients_uni_drc->gain_set_count_plus = str_p_loc_drc_coefficients_uni_drc->gain_set_count;
- for(i=0; i<str_p_loc_drc_coefficients_uni_drc->gain_set_count; i++)
- {
- err = impd_parse_gain_set_params(it_bit_buff, version, &gain_seq_idx, &(str_p_loc_drc_coefficients_uni_drc->gain_set_params[i]));
- if (err) return (err);
-
- if (str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].time_delt_min_flag)
- {
- if (str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].time_delt_min_val > ia_drc_params_struct->drc_frame_size)
- {
- /* drc time interval too big */
- return(PARAM_ERROR);
- }
- str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].num_gain_max_values = ia_drc_params_struct->drc_frame_size / str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].time_delt_min_val;
- err = impd_init_tbls(str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].num_gain_max_values, &(str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].str_tables));
- if (err) return (err);
- }
- }
-
- for(i=0; i<str_p_loc_drc_coefficients_uni_drc->gain_set_count; i++)
- {
- WORD32 b;
- for (b=0; b<str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].band_count; b++) {
- str_p_loc_drc_coefficients_uni_drc->gain_set_params_index_for_gain_sequence[str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].gain_params[b].gain_seq_idx] = i;
- }
- }
+impd_drc_parse_coeff(
+ ia_bit_buf_struct* it_bit_buff, WORD32 version,
+ ia_drc_params_bs_dec_struct* ia_drc_params_struct,
+ ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc) {
+ WORD32 err = 0, i, drc_frame_size, temp;
+ WORD32 gain_seq_idx = -1;
+
+ str_p_loc_drc_coefficients_uni_drc->version = version;
+ if (version == 0) {
+ WORD32 gain_sequence_count = 0;
+ temp = impd_read_bits_buf(it_bit_buff, 5);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ str_p_loc_drc_coefficients_uni_drc->drc_location = (temp >> 1) & 0xf;
+ str_p_loc_drc_coefficients_uni_drc->drc_frame_size_present = temp & 1;
+
+ if (str_p_loc_drc_coefficients_uni_drc->drc_frame_size_present == 1) {
+ drc_frame_size = impd_read_bits_buf(it_bit_buff, 15);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ str_p_loc_drc_coefficients_uni_drc->drc_frame_size = drc_frame_size + 1;
+ }
+
+ str_p_loc_drc_coefficients_uni_drc->drc_characteristic_left_present = 0;
+ str_p_loc_drc_coefficients_uni_drc->drc_characteristic_right_present = 0;
+ str_p_loc_drc_coefficients_uni_drc->shape_filters_present = 0;
+ str_p_loc_drc_coefficients_uni_drc->gain_set_count =
+ impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ str_p_loc_drc_coefficients_uni_drc->gain_set_count_plus =
+ str_p_loc_drc_coefficients_uni_drc->gain_set_count;
+ for (i = 0; i < str_p_loc_drc_coefficients_uni_drc->gain_set_count; i++) {
+ err = impd_parse_gain_set_params(
+ it_bit_buff, version, &gain_seq_idx,
+ &(str_p_loc_drc_coefficients_uni_drc->gain_set_params[i]));
+ if (err) return (err);
+
+ if (str_p_loc_drc_coefficients_uni_drc->gain_set_params[i]
+ .time_delt_min_flag) {
+ if (str_p_loc_drc_coefficients_uni_drc->gain_set_params[i]
+ .time_delt_min_val > ia_drc_params_struct->drc_frame_size) {
+ /* drc time interval too big */
+ return (PARAM_ERROR);
+ }
+ str_p_loc_drc_coefficients_uni_drc->gain_set_params[i]
+ .num_gain_max_values =
+ ia_drc_params_struct->drc_frame_size /
+ str_p_loc_drc_coefficients_uni_drc->gain_set_params[i]
+ .time_delt_min_val;
+ err = impd_init_tbls(
+ str_p_loc_drc_coefficients_uni_drc->gain_set_params[i]
+ .num_gain_max_values,
+ &(str_p_loc_drc_coefficients_uni_drc->gain_set_params[i]
+ .str_tables));
+ if (err) return (err);
+ }
+ gain_sequence_count +=
+ str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].band_count;
}
- return(0);
-}
-
-
-WORD32
-impd_drc_parse_instructions_basic(ia_bit_buf_struct* it_bit_buff,
- ia_drc_instructions_basic_struct* str_drc_instructions_basic)
-{
- //WORD32 err = 0;
- WORD32 i, limiter_peak_target, temp;
- WORD32 additional_dmix_id_present, additional_dmix_id_cnt;
-
- temp = impd_read_bits_buf(it_bit_buff, 18);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- str_drc_instructions_basic->drc_set_id = (temp>>12)&0x3f;
- str_drc_instructions_basic->drc_location = (temp>>8)&0xf;
- str_drc_instructions_basic->downmix_id[0] = (temp>>1)&0x7f;
- additional_dmix_id_present = temp&1;
- str_drc_instructions_basic->dwnmix_id_count = 1;
-
- if (additional_dmix_id_present)
- {
- additional_dmix_id_cnt = impd_read_bits_buf(it_bit_buff, 3);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- for(i=0; i<additional_dmix_id_cnt; i++)
- {
- str_drc_instructions_basic->downmix_id[i+1] = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- str_drc_instructions_basic->dwnmix_id_count = 1 + additional_dmix_id_cnt;
+ str_p_loc_drc_coefficients_uni_drc->gain_sequence_count =
+ gain_sequence_count;
+ } else {
+ ia_shape_filter_block_params_struct* pstr_shape_filter_block_params;
+ for (i = 0; i < SEQUENCE_COUNT_MAX; i++) {
+ str_p_loc_drc_coefficients_uni_drc
+ ->gain_set_params_index_for_gain_sequence[i] = -1;
}
-
- str_drc_instructions_basic->drc_set_effect = impd_read_bits_buf(it_bit_buff, 16);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if ((str_drc_instructions_basic->drc_set_effect & (EFFECT_BIT_DUCK_OTHER | EFFECT_BIT_DUCK_SELF)) == 0)
- {
- str_drc_instructions_basic->limiter_peak_target_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (str_drc_instructions_basic->limiter_peak_target_present)
- {
-
- limiter_peak_target = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- str_drc_instructions_basic->limiter_peak_target = - limiter_peak_target * 0.125f;
- }
+ temp = impd_read_bits_buf(it_bit_buff, 5);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ str_p_loc_drc_coefficients_uni_drc->drc_location = (temp >> 1) & 0xf;
+ str_p_loc_drc_coefficients_uni_drc->drc_frame_size_present = temp & 1;
+
+ if (str_p_loc_drc_coefficients_uni_drc->drc_frame_size_present == 1) {
+ drc_frame_size = impd_read_bits_buf(it_bit_buff, 15);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ str_p_loc_drc_coefficients_uni_drc->drc_frame_size = drc_frame_size + 1;
+ }
+ str_p_loc_drc_coefficients_uni_drc->drc_characteristic_left_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (str_p_loc_drc_coefficients_uni_drc->drc_characteristic_left_present ==
+ 1) {
+ str_p_loc_drc_coefficients_uni_drc->characteristic_left_count =
+ impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ for (i = 1;
+ i <= str_p_loc_drc_coefficients_uni_drc->characteristic_left_count;
+ i++) {
+ err = impd_parse_split_drc_characteristic(
+ it_bit_buff, LEFT_SIDE, &(str_p_loc_drc_coefficients_uni_drc
+ ->str_split_characteristic_left[i]));
+ if (err) return (err);
+ }
+ }
+ str_p_loc_drc_coefficients_uni_drc->drc_characteristic_right_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (str_p_loc_drc_coefficients_uni_drc->drc_characteristic_right_present ==
+ 1) {
+ str_p_loc_drc_coefficients_uni_drc->characteristic_right_count =
+ impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ for (i = 1;
+ i <= str_p_loc_drc_coefficients_uni_drc->characteristic_right_count;
+ i++) {
+ err = impd_parse_split_drc_characteristic(
+ it_bit_buff, RIGHT_SIDE,
+ &(str_p_loc_drc_coefficients_uni_drc
+ ->str_split_characteristic_right[i]));
+ if (err) return (err);
+ }
+ }
+ str_p_loc_drc_coefficients_uni_drc->shape_filters_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (str_p_loc_drc_coefficients_uni_drc->shape_filters_present == 1) {
+ str_p_loc_drc_coefficients_uni_drc->shape_num_filter =
+ impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ for (i = 1; i <= str_p_loc_drc_coefficients_uni_drc->shape_num_filter;
+ i++) {
+ pstr_shape_filter_block_params =
+ &(str_p_loc_drc_coefficients_uni_drc
+ ->str_shape_filter_block_params[i]);
+ pstr_shape_filter_block_params->lf_cut_filter_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (pstr_shape_filter_block_params->lf_cut_filter_present == 1) {
+ temp = impd_read_bits_buf(it_bit_buff, 5);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ pstr_shape_filter_block_params->str_lf_cut_params.corner_freq_index =
+ (temp >> 2) & 7;
+ pstr_shape_filter_block_params->str_lf_cut_params
+ .filter_strength_index = temp & 3;
+ }
+ pstr_shape_filter_block_params->lf_boost_filter_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (pstr_shape_filter_block_params->lf_boost_filter_present == 1) {
+ temp = impd_read_bits_buf(it_bit_buff, 5);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ pstr_shape_filter_block_params->str_lf_boost_params
+ .corner_freq_index = (temp >> 2) & 7;
+ pstr_shape_filter_block_params->str_lf_boost_params
+ .filter_strength_index = temp & 3;
+ }
+ pstr_shape_filter_block_params->hf_cut_filter_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (pstr_shape_filter_block_params->hf_cut_filter_present == 1) {
+ temp = impd_read_bits_buf(it_bit_buff, 5);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ pstr_shape_filter_block_params->str_hfCutParams.corner_freq_index =
+ (temp >> 2) & 7;
+ pstr_shape_filter_block_params->str_hfCutParams
+ .filter_strength_index = temp & 3;
+ }
+ pstr_shape_filter_block_params->hf_boost_filter_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (pstr_shape_filter_block_params->hf_boost_filter_present == 1) {
+ temp = impd_read_bits_buf(it_bit_buff, 5);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ pstr_shape_filter_block_params->str_hf_boost_params
+ .corner_freq_index = (temp >> 2) & 7;
+ pstr_shape_filter_block_params->str_hf_boost_params
+ .filter_strength_index = temp & 3;
+ }
+ }
}
- str_drc_instructions_basic->drc_set_target_loudness_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- str_drc_instructions_basic->drc_set_target_loudness_value_upper = 0;
- str_drc_instructions_basic->drc_set_target_loudness_value_lower = -63;
-
- if (str_drc_instructions_basic->drc_set_target_loudness_present == 1)
- {
- WORD32 bsDrcSetTargetLoudnessValueUpper, bsDrcSetTargetLoudnessValueLower;
- bsDrcSetTargetLoudnessValueUpper = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- str_drc_instructions_basic->drc_set_target_loudness_value_upper = bsDrcSetTargetLoudnessValueUpper - 63;
-
- str_drc_instructions_basic->drc_set_target_loudness_value_lower_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if (str_drc_instructions_basic->drc_set_target_loudness_value_lower_present == 1)
- {
- bsDrcSetTargetLoudnessValueLower = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- str_drc_instructions_basic->drc_set_target_loudness_value_lower = bsDrcSetTargetLoudnessValueLower - 63;
- }
- }
+ temp = impd_read_bits_buf(it_bit_buff, 12);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ str_p_loc_drc_coefficients_uni_drc->gain_sequence_count =
+ (temp >> 6) & 0x3f;
+ str_p_loc_drc_coefficients_uni_drc->gain_set_count = temp & 0x3f;
+
+ str_p_loc_drc_coefficients_uni_drc->gain_set_count_plus =
+ str_p_loc_drc_coefficients_uni_drc->gain_set_count;
+ for (i = 0; i < str_p_loc_drc_coefficients_uni_drc->gain_set_count; i++) {
+ err = impd_parse_gain_set_params(
+ it_bit_buff, version, &gain_seq_idx,
+ &(str_p_loc_drc_coefficients_uni_drc->gain_set_params[i]));
+ if (err) return (err);
+
+ if (str_p_loc_drc_coefficients_uni_drc->gain_set_params[i]
+ .time_delt_min_flag) {
+ if (str_p_loc_drc_coefficients_uni_drc->gain_set_params[i]
+ .time_delt_min_val > ia_drc_params_struct->drc_frame_size) {
+ /* drc time interval too big */
+ return (PARAM_ERROR);
+ }
+ str_p_loc_drc_coefficients_uni_drc->gain_set_params[i]
+ .num_gain_max_values =
+ ia_drc_params_struct->drc_frame_size /
+ str_p_loc_drc_coefficients_uni_drc->gain_set_params[i]
+ .time_delt_min_val;
+ err = impd_init_tbls(
+ str_p_loc_drc_coefficients_uni_drc->gain_set_params[i]
+ .num_gain_max_values,
+ &(str_p_loc_drc_coefficients_uni_drc->gain_set_params[i]
+ .str_tables));
+ if (err) return (err);
+ }
+ }
+
+ for (i = 0; i < str_p_loc_drc_coefficients_uni_drc->gain_set_count; i++) {
+ WORD32 b;
+ for (b = 0;
+ b <
+ str_p_loc_drc_coefficients_uni_drc->gain_set_params[i].band_count;
+ b++) {
+ str_p_loc_drc_coefficients_uni_drc
+ ->gain_set_params_index_for_gain_sequence
+ [str_p_loc_drc_coefficients_uni_drc->gain_set_params[i]
+ .gain_params[b]
+ .gain_seq_idx] = i;
+ }
+ }
+ }
+ return (0);
+}
- return(0);
+WORD32
+impd_drc_parse_instructions_basic(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_drc_instructions_basic_struct* str_drc_instructions_basic) {
+ // WORD32 err = 0;
+ WORD32 i, limiter_peak_target, temp;
+ WORD32 additional_dmix_id_present, additional_dmix_id_cnt;
+
+ temp = impd_read_bits_buf(it_bit_buff, 18);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ str_drc_instructions_basic->drc_set_id = (temp >> 12) & 0x3f;
+ str_drc_instructions_basic->drc_location = (temp >> 8) & 0xf;
+ str_drc_instructions_basic->downmix_id[0] = (temp >> 1) & 0x7f;
+ additional_dmix_id_present = temp & 1;
+ str_drc_instructions_basic->dwnmix_id_count = 1;
+
+ if (additional_dmix_id_present) {
+ additional_dmix_id_cnt = impd_read_bits_buf(it_bit_buff, 3);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ for (i = 0; i < additional_dmix_id_cnt; i++) {
+ str_drc_instructions_basic->downmix_id[i + 1] =
+ impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+ str_drc_instructions_basic->dwnmix_id_count = 1 + additional_dmix_id_cnt;
+ }
+
+ str_drc_instructions_basic->drc_set_effect =
+ impd_read_bits_buf(it_bit_buff, 16);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if ((str_drc_instructions_basic->drc_set_effect &
+ (EFFECT_BIT_DUCK_OTHER | EFFECT_BIT_DUCK_SELF)) == 0) {
+ str_drc_instructions_basic->limiter_peak_target_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (str_drc_instructions_basic->limiter_peak_target_present) {
+ limiter_peak_target = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ str_drc_instructions_basic->limiter_peak_target =
+ -limiter_peak_target * 0.125f;
+ }
+ }
+
+ str_drc_instructions_basic->drc_set_target_loudness_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ str_drc_instructions_basic->drc_set_target_loudness_value_upper = 0;
+ str_drc_instructions_basic->drc_set_target_loudness_value_lower = -63;
+
+ if (str_drc_instructions_basic->drc_set_target_loudness_present == 1) {
+ WORD32 bsDrcSetTargetLoudnessValueUpper, bsDrcSetTargetLoudnessValueLower;
+ bsDrcSetTargetLoudnessValueUpper = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ str_drc_instructions_basic->drc_set_target_loudness_value_upper =
+ bsDrcSetTargetLoudnessValueUpper - 63;
+
+ str_drc_instructions_basic->drc_set_target_loudness_value_lower_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (str_drc_instructions_basic
+ ->drc_set_target_loudness_value_lower_present == 1) {
+ bsDrcSetTargetLoudnessValueLower = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ str_drc_instructions_basic->drc_set_target_loudness_value_lower =
+ bsDrcSetTargetLoudnessValueLower - 63;
+ }
+ }
+
+ return (0);
}
WORD32
impd_dec_ducking_scaling(ia_bit_buf_struct* it_bit_buff,
WORD32* ducking_scaling_flag,
- FLOAT32* p_ducking_scaling)
-{
- WORD32 ducking_scaling_present, ducking_scaling, sigma, mu;
-
- ducking_scaling_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if (ducking_scaling_present == 0)
- {
- *ducking_scaling_flag = 0;
- *p_ducking_scaling = 1.0f;
- }
- else
- {
- *ducking_scaling_flag = 1;
- ducking_scaling = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
-
- sigma = ducking_scaling >> 3;
- mu = ducking_scaling & 0x7;
-
- if (sigma == 0)
- {
- *p_ducking_scaling = 1.0f + 0.125f * (1.0f + mu);
- }
- else
- {
- *p_ducking_scaling = 1.0f - 0.125f * (1.0f + mu);
- }
- }
- return (0);
+ FLOAT32* p_ducking_scaling) {
+ WORD32 ducking_scaling_present, ducking_scaling, sigma, mu;
+
+ ducking_scaling_present = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (ducking_scaling_present == 0) {
+ *ducking_scaling_flag = 0;
+ *p_ducking_scaling = 1.0f;
+ } else {
+ *ducking_scaling_flag = 1;
+ ducking_scaling = impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ sigma = ducking_scaling >> 3;
+ mu = ducking_scaling & 0x7;
+
+ if (sigma == 0) {
+ *p_ducking_scaling = 1.0f + 0.125f * (1.0f + mu);
+ } else {
+ *p_ducking_scaling = 1.0f - 0.125f * (1.0f + mu);
+ }
+ }
+ return (0);
}
WORD32
-impd_parse_drc_instructions_uni_drc(ia_bit_buf_struct* it_bit_buff,
- WORD32 version,
- ia_drc_config* drc_config,
- ia_drc_instructions_struct* str_drc_instruction_str)
-{
- WORD32 err = 0, i, n, k, g, c, limiter_peak_target, idx;
- WORD32 additional_dmix_id_present, additional_dmix_id_cnt;
- ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc = NULL;
- WORD32 ch_cnt;
- WORD32 unique_idx[MAX_CHANNEL_COUNT];
- FLOAT32 unique_scaling[MAX_CHANNEL_COUNT];
- WORD32 match;
- WORD32 dmix_id_present;
- WORD32 repeat_parameters, repeat_parameters_cnt;
- WORD32 ducking_sequence;
- FLOAT32 factor;
-
- str_drc_instruction_str->drc_set_id = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (version == 0)
- {
- str_drc_instruction_str->drc_set_complexity_level = DRC_COMPLEXITY_LEVEL_MAX;
- }
- else
- {
- str_drc_instruction_str->drc_set_complexity_level = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- str_drc_instruction_str->drc_location = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- dmix_id_present = 1;
- if (version >= 1)
- {
- dmix_id_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- if (dmix_id_present == 1)
- {
- str_drc_instruction_str->downmix_id[0] = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (version >= 1)
- {
- str_drc_instruction_str->drc_apply_to_dwnmix = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- if (version == 0)
- {
- if (str_drc_instruction_str->downmix_id[0] == 0)
- {
- str_drc_instruction_str->drc_apply_to_dwnmix = 0;
- }
- else
- {
- str_drc_instruction_str->drc_apply_to_dwnmix = 1;
- }
- }
- additional_dmix_id_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if (additional_dmix_id_present)
- {
- additional_dmix_id_cnt = impd_read_bits_buf(it_bit_buff, 3);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- for(i=0; i<additional_dmix_id_cnt; i++)
- {
- str_drc_instruction_str->downmix_id[i+1] = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- str_drc_instruction_str->dwnmix_id_count = 1 + additional_dmix_id_cnt;
- } else
- {
- str_drc_instruction_str->dwnmix_id_count = 1;
- }
- }
- else
- {
- str_drc_instruction_str->downmix_id[0] = 0;
- str_drc_instruction_str->dwnmix_id_count = 1;
+impd_parse_drc_instructions_uni_drc(
+ ia_bit_buf_struct* it_bit_buff, WORD32 version, ia_drc_config* drc_config,
+ ia_drc_instructions_struct* str_drc_instruction_str) {
+ WORD32 err = 0, i, n, k, g, c, limiter_peak_target, idx;
+ WORD32 additional_dmix_id_present, additional_dmix_id_cnt;
+ ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc = NULL;
+ WORD32 ch_cnt;
+ WORD32 unique_idx[MAX_CHANNEL_COUNT];
+ FLOAT32 unique_scaling[MAX_CHANNEL_COUNT];
+ WORD32 match;
+ WORD32 dmix_id_present;
+ WORD32 repeat_parameters, repeat_parameters_cnt;
+ WORD32 ducking_sequence;
+ FLOAT32 factor;
+
+ str_drc_instruction_str->drc_set_id = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (version == 0) {
+ str_drc_instruction_str->drc_set_complexity_level =
+ DRC_COMPLEXITY_LEVEL_MAX;
+ } else {
+ str_drc_instruction_str->drc_set_complexity_level =
+ impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+ str_drc_instruction_str->drc_location = impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ dmix_id_present = 1;
+ if (version >= 1) {
+ dmix_id_present = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+ if (dmix_id_present == 1) {
+ str_drc_instruction_str->downmix_id[0] = impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (version >= 1) {
+ str_drc_instruction_str->drc_apply_to_dwnmix =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
}
-
- str_drc_instruction_str->drc_set_effect = impd_read_bits_buf(it_bit_buff, 16);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if ((str_drc_instruction_str->drc_set_effect & (EFFECT_BIT_DUCK_OTHER | EFFECT_BIT_DUCK_SELF)) == 0)
- {
- str_drc_instruction_str->limiter_peak_target_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (str_drc_instruction_str->limiter_peak_target_present)
- {
- limiter_peak_target = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- str_drc_instruction_str->limiter_peak_target = - limiter_peak_target * 0.125f;
- }
- }
-
- str_drc_instruction_str->drc_set_target_loudness_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- str_drc_instruction_str->drc_set_target_loudness_value_upper = 0;
- str_drc_instruction_str->drc_set_target_loudness_value_lower = -63;
-
- if (str_drc_instruction_str->drc_set_target_loudness_present == 1)
- {
- WORD32 bsDrcSetTargetLoudnessValueUpper, bsDrcSetTargetLoudnessValueLower;
- bsDrcSetTargetLoudnessValueUpper = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- str_drc_instruction_str->drc_set_target_loudness_value_upper = bsDrcSetTargetLoudnessValueUpper - 63;
- str_drc_instruction_str->drc_set_target_loudness_value_lower_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- if (str_drc_instruction_str->drc_set_target_loudness_value_lower_present == 1)
- {
- bsDrcSetTargetLoudnessValueLower = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- str_drc_instruction_str->drc_set_target_loudness_value_lower = bsDrcSetTargetLoudnessValueLower - 63;
- }
- }
-
-
- str_drc_instruction_str->depends_on_drc_set_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
-
- str_drc_instruction_str->no_independent_use = 0;
- if (str_drc_instruction_str->depends_on_drc_set_present)
- {
-
- str_drc_instruction_str->depends_on_drc_set = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- else
- {
-
- str_drc_instruction_str->no_independent_use = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- }
- if (version == 0)
- {
- str_drc_instruction_str->requires_eq = 0;
- }
- else
- {
-
- str_drc_instruction_str->requires_eq = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- }
-
- err = impd_sel_drc_coeff(drc_config, str_drc_instruction_str->drc_location, &str_p_loc_drc_coefficients_uni_drc);
- if (err) return (err);
-
- ch_cnt = drc_config->channel_layout.base_channel_count;
-
- for (c=0; c<MAX_CHANNEL_COUNT; c++)
- {
- unique_idx[c] = -10;
- unique_scaling[c] = -10.0f;
- }
-
- if (str_drc_instruction_str->drc_set_effect & (EFFECT_BIT_DUCK_OTHER | EFFECT_BIT_DUCK_SELF))
- {
- c=0;
- while (c<ch_cnt)
- {
- WORD32 bs_gain_set_idx;
- bs_gain_set_idx = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- str_drc_instruction_str->gain_set_index[c] = bs_gain_set_idx - 1;
- impd_dec_ducking_scaling(it_bit_buff,
- &(str_drc_instruction_str->str_ducking_modifiers_for_channel[c].ducking_scaling_flag),
- &(str_drc_instruction_str->str_ducking_modifiers_for_channel[c].ducking_scaling));
-
- c++;
-
- repeat_parameters = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
-
- if (repeat_parameters == 1)
- {
-
- repeat_parameters_cnt = impd_read_bits_buf(it_bit_buff, 5);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- repeat_parameters_cnt += 1;
- for (k=0; k<repeat_parameters_cnt; k++)
- {
- str_drc_instruction_str->gain_set_index[c] = str_drc_instruction_str->gain_set_index[c-1];
- str_drc_instruction_str->str_ducking_modifiers_for_channel[c].ducking_scaling_flag = str_drc_instruction_str->str_ducking_modifiers_for_channel[c-1].ducking_scaling_flag;
- str_drc_instruction_str->str_ducking_modifiers_for_channel[c].ducking_scaling = str_drc_instruction_str->str_ducking_modifiers_for_channel[c-1].ducking_scaling;
- c++;
- }
- }
- }
- if (c>ch_cnt)
- {
- return(UNEXPECTED_ERROR);
- }
- ducking_sequence = -1;
- g = 0;
- if (str_drc_instruction_str->drc_set_effect & EFFECT_BIT_DUCK_OTHER)
- {
- for (c=0; c<ch_cnt; c++)
- {
- match = 0;
- idx = str_drc_instruction_str->gain_set_index[c];
- factor = str_drc_instruction_str->str_ducking_modifiers_for_channel[c].ducking_scaling;
- if (idx < 0) {
- for (n=0; n<g; n++)
- {
- if (unique_scaling[n] == factor)
- {
- match = 1;
- str_drc_instruction_str->channel_group_of_ch[c] = n;
- break;
- }
- }
- if (match == 0)
- {
- unique_idx[g] = idx;
- unique_scaling[g] = factor;
- str_drc_instruction_str->channel_group_of_ch[c] = g;
- g++;
- }
- }
- else
- {
- if ((ducking_sequence > 0) && (ducking_sequence != idx))
- {
- /* drc for ducking can have only one ducking sequence */
- return(UNEXPECTED_ERROR);
- }
- ducking_sequence = idx;
- str_drc_instruction_str->channel_group_of_ch[c] = -1;
- }
- }
- str_drc_instruction_str->num_drc_ch_groups = g;
- if (ducking_sequence == -1)
- {
- /* ducking sequence not found */
- return(UNEXPECTED_ERROR);
- }
- } else if (str_drc_instruction_str->drc_set_effect & EFFECT_BIT_DUCK_SELF)
- {
- for (c=0; c<ch_cnt; c++)
- {
- match = 0;
- idx = str_drc_instruction_str->gain_set_index[c];
- factor = str_drc_instruction_str->str_ducking_modifiers_for_channel[c].ducking_scaling;
- if (idx >= 0) {
- for (n=0; n<g; n++) {
- if ((unique_idx[n] == idx) && (unique_scaling[n] == factor))
- {
- match = 1;
- str_drc_instruction_str->channel_group_of_ch[c] = n;
- break;
- }
- }
- if (match == 0)
- {
- unique_idx[g] = idx;
- unique_scaling[g] = factor;
- str_drc_instruction_str->channel_group_of_ch[c] = g;
- g++;
- }
- }
- else
- {
- str_drc_instruction_str->channel_group_of_ch[c] = -1;
- }
+ if (version == 0) {
+ if (str_drc_instruction_str->downmix_id[0] == 0) {
+ str_drc_instruction_str->drc_apply_to_dwnmix = 0;
+ } else {
+ str_drc_instruction_str->drc_apply_to_dwnmix = 1;
+ }
+ }
+ additional_dmix_id_present = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (additional_dmix_id_present) {
+ additional_dmix_id_cnt = impd_read_bits_buf(it_bit_buff, 3);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ for (i = 0; i < additional_dmix_id_cnt; i++) {
+ str_drc_instruction_str->downmix_id[i + 1] =
+ impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+ str_drc_instruction_str->dwnmix_id_count = 1 + additional_dmix_id_cnt;
+ } else {
+ str_drc_instruction_str->dwnmix_id_count = 1;
+ }
+ } else {
+ str_drc_instruction_str->downmix_id[0] = 0;
+ str_drc_instruction_str->dwnmix_id_count = 1;
+ }
+
+ str_drc_instruction_str->drc_set_effect = impd_read_bits_buf(it_bit_buff, 16);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if ((str_drc_instruction_str->drc_set_effect &
+ (EFFECT_BIT_DUCK_OTHER | EFFECT_BIT_DUCK_SELF)) == 0) {
+ str_drc_instruction_str->limiter_peak_target_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (str_drc_instruction_str->limiter_peak_target_present) {
+ limiter_peak_target = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ str_drc_instruction_str->limiter_peak_target =
+ -limiter_peak_target * 0.125f;
+ }
+ }
+
+ str_drc_instruction_str->drc_set_target_loudness_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ str_drc_instruction_str->drc_set_target_loudness_value_upper = 0;
+ str_drc_instruction_str->drc_set_target_loudness_value_lower = -63;
+
+ if (str_drc_instruction_str->drc_set_target_loudness_present == 1) {
+ WORD32 bsDrcSetTargetLoudnessValueUpper, bsDrcSetTargetLoudnessValueLower;
+ bsDrcSetTargetLoudnessValueUpper = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ str_drc_instruction_str->drc_set_target_loudness_value_upper =
+ bsDrcSetTargetLoudnessValueUpper - 63;
+ str_drc_instruction_str->drc_set_target_loudness_value_lower_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ if (str_drc_instruction_str->drc_set_target_loudness_value_lower_present ==
+ 1) {
+ bsDrcSetTargetLoudnessValueLower = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ str_drc_instruction_str->drc_set_target_loudness_value_lower =
+ bsDrcSetTargetLoudnessValueLower - 63;
+ }
+ }
+
+ str_drc_instruction_str->depends_on_drc_set_present =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ str_drc_instruction_str->no_independent_use = 0;
+ if (str_drc_instruction_str->depends_on_drc_set_present) {
+ str_drc_instruction_str->depends_on_drc_set =
+ impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ } else {
+ str_drc_instruction_str->no_independent_use =
+ impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+ if (version == 0) {
+ str_drc_instruction_str->requires_eq = 0;
+ } else {
+ str_drc_instruction_str->requires_eq = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ }
+
+ err = impd_sel_drc_coeff(drc_config, str_drc_instruction_str->drc_location,
+ &str_p_loc_drc_coefficients_uni_drc);
+ if (err) return (err);
+
+ ch_cnt = drc_config->channel_layout.base_channel_count;
+
+ for (c = 0; c < MAX_CHANNEL_COUNT; c++) {
+ unique_idx[c] = -10;
+ unique_scaling[c] = -10.0f;
+ }
+
+ if (str_drc_instruction_str->drc_set_effect &
+ (EFFECT_BIT_DUCK_OTHER | EFFECT_BIT_DUCK_SELF)) {
+ c = 0;
+ while (c < ch_cnt) {
+ WORD32 bs_gain_set_idx;
+ bs_gain_set_idx = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ str_drc_instruction_str->gain_set_index[c] = bs_gain_set_idx - 1;
+ impd_dec_ducking_scaling(
+ it_bit_buff,
+ &(str_drc_instruction_str->str_ducking_modifiers_for_channel[c]
+ .ducking_scaling_flag),
+ &(str_drc_instruction_str->str_ducking_modifiers_for_channel[c]
+ .ducking_scaling));
+
+ c++;
+
+ repeat_parameters = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ if (repeat_parameters == 1) {
+ repeat_parameters_cnt = impd_read_bits_buf(it_bit_buff, 5);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ repeat_parameters_cnt += 1;
+ for (k = 0; k < repeat_parameters_cnt; k++) {
+ str_drc_instruction_str->gain_set_index[c] =
+ str_drc_instruction_str->gain_set_index[c - 1];
+ str_drc_instruction_str->str_ducking_modifiers_for_channel[c]
+ .ducking_scaling_flag =
+ str_drc_instruction_str->str_ducking_modifiers_for_channel[c - 1]
+ .ducking_scaling_flag;
+ str_drc_instruction_str->str_ducking_modifiers_for_channel[c]
+ .ducking_scaling =
+ str_drc_instruction_str->str_ducking_modifiers_for_channel[c - 1]
+ .ducking_scaling;
+ c++;
+ }
+ }
+ }
+ if (c > ch_cnt) {
+ return (UNEXPECTED_ERROR);
+ }
+ ducking_sequence = -1;
+ g = 0;
+ if (str_drc_instruction_str->drc_set_effect & EFFECT_BIT_DUCK_OTHER) {
+ for (c = 0; c < ch_cnt; c++) {
+ match = 0;
+ idx = str_drc_instruction_str->gain_set_index[c];
+ factor = str_drc_instruction_str->str_ducking_modifiers_for_channel[c]
+ .ducking_scaling;
+ if (idx < 0) {
+ for (n = 0; n < g; n++) {
+ if (unique_scaling[n] == factor) {
+ match = 1;
+ str_drc_instruction_str->channel_group_of_ch[c] = n;
+ break;
}
- str_drc_instruction_str->num_drc_ch_groups = g;
- }
-
- for (g=0; g<str_drc_instruction_str->num_drc_ch_groups; g++)
- {
- WORD32 set = (str_drc_instruction_str->drc_set_effect & EFFECT_BIT_DUCK_OTHER) ? ducking_sequence : unique_idx[g];
- str_drc_instruction_str->gain_set_index_for_channel_group[g] = set;
- str_drc_instruction_str->str_ducking_modifiers_for_channel_group[g].ducking_scaling = unique_scaling[g];
- if (unique_scaling[g] != 1.0f)
- {
- str_drc_instruction_str->str_ducking_modifiers_for_channel_group[g].ducking_scaling_flag = 1;
+ }
+ if (match == 0) {
+ unique_idx[g] = idx;
+ unique_scaling[g] = factor;
+ str_drc_instruction_str->channel_group_of_ch[c] = g;
+ g++;
+ }
+ } else {
+ if ((ducking_sequence > 0) && (ducking_sequence != idx)) {
+ /* drc for ducking can have only one ducking sequence */
+ return (UNEXPECTED_ERROR);
+ }
+ ducking_sequence = idx;
+ str_drc_instruction_str->channel_group_of_ch[c] = -1;
+ }
+ }
+ str_drc_instruction_str->num_drc_ch_groups = g;
+ if (ducking_sequence == -1) {
+ /* ducking sequence not found */
+ return (UNEXPECTED_ERROR);
+ }
+ } else if (str_drc_instruction_str->drc_set_effect & EFFECT_BIT_DUCK_SELF) {
+ for (c = 0; c < ch_cnt; c++) {
+ match = 0;
+ idx = str_drc_instruction_str->gain_set_index[c];
+ factor = str_drc_instruction_str->str_ducking_modifiers_for_channel[c]
+ .ducking_scaling;
+ if (idx >= 0) {
+ for (n = 0; n < g; n++) {
+ if ((unique_idx[n] == idx) && (unique_scaling[n] == factor)) {
+ match = 1;
+ str_drc_instruction_str->channel_group_of_ch[c] = n;
+ break;
}
- else
- {
- str_drc_instruction_str->str_ducking_modifiers_for_channel_group[g].ducking_scaling_flag = 0;
+ }
+ if (match == 0) {
+ unique_idx[g] = idx;
+ unique_scaling[g] = factor;
+ str_drc_instruction_str->channel_group_of_ch[c] = g;
+ g++;
+ }
+ } else {
+ str_drc_instruction_str->channel_group_of_ch[c] = -1;
+ }
+ }
+ str_drc_instruction_str->num_drc_ch_groups = g;
+ }
+
+ for (g = 0; g < str_drc_instruction_str->num_drc_ch_groups; g++) {
+ WORD32 set =
+ (str_drc_instruction_str->drc_set_effect & EFFECT_BIT_DUCK_OTHER)
+ ? ducking_sequence
+ : unique_idx[g];
+ str_drc_instruction_str->gain_set_index_for_channel_group[g] = set;
+ str_drc_instruction_str->str_ducking_modifiers_for_channel_group[g]
+ .ducking_scaling = unique_scaling[g];
+ if (unique_scaling[g] != 1.0f) {
+ str_drc_instruction_str->str_ducking_modifiers_for_channel_group[g]
+ .ducking_scaling_flag = 1;
+ } else {
+ str_drc_instruction_str->str_ducking_modifiers_for_channel_group[g]
+ .ducking_scaling_flag = 0;
+ }
+ str_drc_instruction_str->band_count_of_ch_group[g] = 1;
+ }
+ } else {
+ if (((version == 0) ||
+ (str_drc_instruction_str->drc_apply_to_dwnmix != 0)) &&
+ (str_drc_instruction_str->downmix_id[0] != 0) &&
+ (str_drc_instruction_str->downmix_id[0] != ID_FOR_ANY_DOWNMIX) &&
+ (str_drc_instruction_str->dwnmix_id_count == 1)) {
+ for (i = 0; i < drc_config->dwnmix_instructions_count; i++) {
+ if (str_drc_instruction_str->downmix_id[0] ==
+ drc_config->dwnmix_instructions[i].downmix_id)
+ break;
+ }
+ if (i == drc_config->dwnmix_instructions_count) {
+ /* dwnmix_instructions not found */
+ return (UNEXPECTED_ERROR);
+ }
+ ch_cnt = drc_config->dwnmix_instructions[i].target_channel_count;
+ } else if (((version == 0) ||
+ (str_drc_instruction_str->drc_apply_to_dwnmix != 0)) &&
+ ((str_drc_instruction_str->downmix_id[0] ==
+ ID_FOR_ANY_DOWNMIX) ||
+ (str_drc_instruction_str->dwnmix_id_count > 1))) {
+ ch_cnt = 1;
+ }
+
+ c = 0;
+ while (c < ch_cnt) {
+ WORD32 bs_gain_set_idx;
+ WORD32 repeat_gain_set_idx, repeat_gain_set_idx_cnt, temp;
+
+ temp = impd_read_bits_buf(it_bit_buff, 7);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ bs_gain_set_idx = (temp >> 1) & 0x7f;
+ repeat_gain_set_idx = temp & 1;
+
+ str_drc_instruction_str->gain_set_index[c] = bs_gain_set_idx - 1;
+ c++;
+
+ if (repeat_gain_set_idx == 1) {
+ repeat_gain_set_idx_cnt = impd_read_bits_buf(it_bit_buff, 5);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ repeat_gain_set_idx_cnt += 1;
+ for (k = 0; k < repeat_gain_set_idx_cnt; k++) {
+ str_drc_instruction_str->gain_set_index[c] = bs_gain_set_idx - 1;
+ c++;
+ }
+ }
+ }
+ if (c > ch_cnt) {
+ return (UNEXPECTED_ERROR);
+ }
+
+ g = 0;
+ if ((str_drc_instruction_str->downmix_id[0] == ID_FOR_ANY_DOWNMIX) ||
+ (str_drc_instruction_str->dwnmix_id_count > 1)) {
+ WORD32 idx = str_drc_instruction_str->gain_set_index[0];
+ if (idx >= 0) {
+ unique_idx[0] = idx;
+ g = 1;
+ }
+ } else {
+ for (c = 0; c < ch_cnt; c++) {
+ WORD32 idx = str_drc_instruction_str->gain_set_index[c];
+ match = 0;
+ if (idx >= 0) {
+ for (n = 0; n < g; n++) {
+ if (unique_idx[n] == idx) {
+ match = 1;
+ str_drc_instruction_str->channel_group_of_ch[c] = n;
+ break;
}
- str_drc_instruction_str->band_count_of_ch_group[g] = 1;
+ }
+ if (match == 0) {
+ unique_idx[g] = idx;
+ str_drc_instruction_str->channel_group_of_ch[c] = g;
+ g++;
+ }
+ } else {
+ str_drc_instruction_str->channel_group_of_ch[c] = -1;
}
+ }
}
- else
- {
- if (
- ((version==0) || (str_drc_instruction_str->drc_apply_to_dwnmix != 0)) &&
- (str_drc_instruction_str->downmix_id[0] != 0) && (str_drc_instruction_str->downmix_id[0] != ID_FOR_ANY_DOWNMIX) && (str_drc_instruction_str->dwnmix_id_count==1))
- {
- for(i=0; i<drc_config->dwnmix_instructions_count; i++)
- {
- if (str_drc_instruction_str->downmix_id[0] == drc_config->dwnmix_instructions[i].downmix_id) break;
- }
- if (i == drc_config->dwnmix_instructions_count)
- {
- /* dwnmix_instructions not found */
- return(UNEXPECTED_ERROR);
- }
- ch_cnt = drc_config->dwnmix_instructions[i].target_channel_count;
- }
- else if (
- ((version==0) || (str_drc_instruction_str->drc_apply_to_dwnmix != 0)) &&
- ((str_drc_instruction_str->downmix_id[0] == ID_FOR_ANY_DOWNMIX) || (str_drc_instruction_str->dwnmix_id_count > 1)))
- {
- ch_cnt = 1;
- }
-
- c=0;
- while (c<ch_cnt)
- {
- WORD32 bs_gain_set_idx;
- WORD32 repeat_gain_set_idx, repeat_gain_set_idx_cnt, temp;
-
- temp = impd_read_bits_buf(it_bit_buff, 7);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- bs_gain_set_idx = (temp>>1)&0x7f;
- repeat_gain_set_idx = temp&1;
-
- str_drc_instruction_str->gain_set_index[c] = bs_gain_set_idx - 1;
- c++;
-
- if (repeat_gain_set_idx == 1)
- {
-
- repeat_gain_set_idx_cnt = impd_read_bits_buf(it_bit_buff, 5);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- repeat_gain_set_idx_cnt += 1;
- for (k=0; k<repeat_gain_set_idx_cnt; k++)
- {
- str_drc_instruction_str->gain_set_index[c] = bs_gain_set_idx - 1;
- c++;
- }
- }
- }
- if (c>ch_cnt)
- {
- return(UNEXPECTED_ERROR);
- }
- g = 0;
- if ((str_drc_instruction_str->downmix_id[0] == ID_FOR_ANY_DOWNMIX) || (str_drc_instruction_str->dwnmix_id_count > 1))
- {
- WORD32 idx = str_drc_instruction_str->gain_set_index[0];
- if (idx >= 0)
- {
- unique_idx[0] = idx;
- g = 1;
- }
- }
- else {
- for (c=0; c<ch_cnt; c++)
- {
- WORD32 idx = str_drc_instruction_str->gain_set_index[c];
- match = 0;
- if (idx>=0)
- {
- for (n=0; n<g; n++)
- {
- if (unique_idx[n] == idx)
- {
- match = 1;
- str_drc_instruction_str->channel_group_of_ch[c] = n;
- break;
- }
- }
- if (match == 0)
- {
- unique_idx[g] = idx;
- str_drc_instruction_str->channel_group_of_ch[c] = g;
- g++;
- }
- }
- else
- {
- str_drc_instruction_str->channel_group_of_ch[c] = -1;
- }
- }
- }
+ str_drc_instruction_str->num_drc_ch_groups = g;
+ for (g = 0; g < str_drc_instruction_str->num_drc_ch_groups; g++) {
+ WORD32 set, band_count;
- str_drc_instruction_str->num_drc_ch_groups = g;
- for (g=0; g<str_drc_instruction_str->num_drc_ch_groups; g++)
- {
- WORD32 set, band_count;
+ set = unique_idx[g];
+ str_drc_instruction_str->gain_set_index_for_channel_group[g] = set;
- set = unique_idx[g];
- str_drc_instruction_str->gain_set_index_for_channel_group[g] = set;
+ if (str_p_loc_drc_coefficients_uni_drc != NULL &&
+ set < str_p_loc_drc_coefficients_uni_drc->gain_set_count) {
+ band_count =
+ str_p_loc_drc_coefficients_uni_drc->gain_set_params[set].band_count;
+ } else {
+ band_count = 1;
+ }
- if (str_p_loc_drc_coefficients_uni_drc != NULL && set < str_p_loc_drc_coefficients_uni_drc->gain_set_count)
- {
- band_count = str_p_loc_drc_coefficients_uni_drc->gain_set_params[set].band_count;
- } else
- {
- band_count = 1;
- }
-
- err = impd_dec_gain_modifiers(it_bit_buff, version, band_count, &(str_drc_instruction_str->str_gain_modifiers_of_ch_group[g]));
- if (err) return (err);
- }
+ err = impd_dec_gain_modifiers(
+ it_bit_buff, version, band_count,
+ &(str_drc_instruction_str->str_gain_modifiers_of_ch_group[g]));
+ if (err) return (err);
}
+ }
- return(0);
+ return (0);
}
WORD32
-impd_parse_loudness_info(ia_bit_buf_struct* it_bit_buff,
- WORD32 version,
- ia_loudness_info_struct* loudness_info)
-{
- WORD32 err = 0, sample_peak_level, true_peak_level, i, temp;
-
- loudness_info->drc_set_id = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- if (version >= 1)
- {
- loudness_info->eq_set_id = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
- }
- else
- {
- loudness_info->eq_set_id = 0;
- }
-
- temp = impd_read_bits_buf(it_bit_buff, 8);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+impd_parse_loudness_info(ia_bit_buf_struct* it_bit_buff, WORD32 version,
+ ia_loudness_info_struct* loudness_info) {
+ WORD32 err = 0, sample_peak_level, true_peak_level, i, temp;
- loudness_info->downmix_id = (temp>>1)&0x7f;
- loudness_info->sample_peak_level_present = temp&1;
+ loudness_info->drc_set_id = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
- if(loudness_info->sample_peak_level_present)
- {
+ if (version >= 1) {
+ loudness_info->eq_set_id = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+ } else {
+ loudness_info->eq_set_id = 0;
+ }
- sample_peak_level = impd_read_bits_buf(it_bit_buff, 12);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ temp = impd_read_bits_buf(it_bit_buff, 8);
+ if (it_bit_buff->error) return it_bit_buff->error;
- if (sample_peak_level == 0)
- {
- loudness_info->sample_peak_level_present = 0;
- loudness_info->sample_peak_level = 0.0f;
- }
- else
- {
- loudness_info->sample_peak_level = 20.0f - sample_peak_level * 0.03125f;
- }
- }
+ loudness_info->downmix_id = (temp >> 1) & 0x7f;
+ loudness_info->sample_peak_level_present = temp & 1;
- loudness_info->true_peak_level_present = impd_read_bits_buf(it_bit_buff, 1);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ if (loudness_info->sample_peak_level_present) {
+ sample_peak_level = impd_read_bits_buf(it_bit_buff, 12);
+ if (it_bit_buff->error) return it_bit_buff->error;
- if(loudness_info->true_peak_level_present)
- {
+ if (sample_peak_level == 0) {
+ loudness_info->sample_peak_level_present = 0;
+ loudness_info->sample_peak_level = 0.0f;
+ } else {
+ loudness_info->sample_peak_level = 20.0f - sample_peak_level * 0.03125f;
+ }
+ }
- true_peak_level = impd_read_bits_buf(it_bit_buff, 12);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ loudness_info->true_peak_level_present = impd_read_bits_buf(it_bit_buff, 1);
+ if (it_bit_buff->error) return it_bit_buff->error;
- if (true_peak_level == 0)
- {
- loudness_info->true_peak_level_present = 0;
- loudness_info->true_peak_level = 0.0f;
- }
- else
- {
- loudness_info->true_peak_level = 20.0f - true_peak_level * 0.03125f;
- }
+ if (loudness_info->true_peak_level_present) {
+ true_peak_level = impd_read_bits_buf(it_bit_buff, 12);
+ if (it_bit_buff->error) return it_bit_buff->error;
- temp = impd_read_bits_buf(it_bit_buff, 6);
- if(it_bit_buff->error)
- return it_bit_buff->error;
-
- loudness_info->true_peak_level_measurement_system = (temp>>2)&0xf;
- loudness_info->true_peak_level_reliability = temp&3;
+ if (true_peak_level == 0) {
+ loudness_info->true_peak_level_present = 0;
+ loudness_info->true_peak_level = 0.0f;
+ } else {
+ loudness_info->true_peak_level = 20.0f - true_peak_level * 0.03125f;
}
- loudness_info->measurement_count = impd_read_bits_buf(it_bit_buff, 4);
- if(it_bit_buff->error)
- return it_bit_buff->error;
+ temp = impd_read_bits_buf(it_bit_buff, 6);
+ if (it_bit_buff->error) return it_bit_buff->error;
+
+ loudness_info->true_peak_level_measurement_system = (temp >> 2) & 0xf;
+ loudness_info->true_peak_level_reliability = temp & 3;
+ }
+ loudness_info->measurement_count = impd_read_bits_buf(it_bit_buff, 4);
+ if (it_bit_buff->error) return it_bit_buff->error;
- for (i=0; i<loudness_info->measurement_count; i++)
- {
- err = impd_parse_loudness_measure(it_bit_buff, &(loudness_info->loudness_measure[i]));
- if (err) return(err);
- }
+ for (i = 0; i < loudness_info->measurement_count; i++) {
+ err = impd_parse_loudness_measure(it_bit_buff,
+ &(loudness_info->loudness_measure[i]));
+ if (err) return (err);
+ }
- return(0);
+ return (0);
} \ No newline at end of file
diff --git a/decoder/drc_src/impd_drc_struct.h b/decoder/drc_src/impd_drc_struct.h
index f3fe501..a608da9 100644
--- a/decoder/drc_src/impd_drc_struct.h
+++ b/decoder/drc_src/impd_drc_struct.h
@@ -20,639 +20,653 @@
#ifndef IMPD_DRC_STURCT_H
#define IMPD_DRC_STURCT_H
-
#ifdef __cplusplus
-extern "C"
-{
+extern "C" {
#endif
-#define METHOD_DEFINITION_UNKNOWN_OTHER 0
-#define METHOD_DEFINITION_PROGRAM_LOUDNESS 1
-#define METHOD_DEFINITION_ANCHOR_LOUDNESS 2
-#define METHOD_DEFINITION_MAX_OF_LOUDNESS_RANGE 3
-#define METHOD_DEFINITION_MOMENTARY_LOUDNESS_MAX 4
-#define METHOD_DEFINITION_SHORT_TERM_LOUDNESS_MAX 5
-#define METHOD_DEFINITION_LOUDNESS_RANGE 6
-#define METHOD_DEFINITION_MIXING_LEVEL 7
-#define METHOD_DEFINITION_ROOM_TYPE 8
-#define METHOD_DEFINITION_SHORT_TERM_LOUDNESS 9
-
-#define MEASUREMENT_SYSTEM_UNKNOWN_OTHER 0
-#define MEASUREMENT_SYSTEM_EBU_R_128 1
-#define MEASUREMENT_SYSTEM_BS_1770_4 2
-#define MEASUREMENT_SYSTEM_BS_1770_3 MEASUREMENT_SYSTEM_BS_1770_4
+#define METHOD_DEFINITION_UNKNOWN_OTHER 0
+#define METHOD_DEFINITION_PROGRAM_LOUDNESS 1
+#define METHOD_DEFINITION_ANCHOR_LOUDNESS 2
+#define METHOD_DEFINITION_MAX_OF_LOUDNESS_RANGE 3
+#define METHOD_DEFINITION_MOMENTARY_LOUDNESS_MAX 4
+#define METHOD_DEFINITION_SHORT_TERM_LOUDNESS_MAX 5
+#define METHOD_DEFINITION_LOUDNESS_RANGE 6
+#define METHOD_DEFINITION_MIXING_LEVEL 7
+#define METHOD_DEFINITION_ROOM_TYPE 8
+#define METHOD_DEFINITION_SHORT_TERM_LOUDNESS 9
+
+#define MEASUREMENT_SYSTEM_UNKNOWN_OTHER 0
+#define MEASUREMENT_SYSTEM_EBU_R_128 1
+#define MEASUREMENT_SYSTEM_BS_1770_4 2
+#define MEASUREMENT_SYSTEM_BS_1770_3 MEASUREMENT_SYSTEM_BS_1770_4
#define MEASUREMENT_SYSTEM_BS_1770_4_PRE_PROCESSING 3
-#define MEASUREMENT_SYSTEM_BS_1770_3_PRE_PROCESSING MEASUREMENT_SYSTEM_BS_1770_4_PRE_PROCESSING
-#define MEASUREMENT_SYSTEM_USER 4
-#define MEASUREMENT_SYSTEM_EXPERT_PANEL 5
-#define MEASUREMENT_SYSTEM_BS_1771_1 6
-#define MEASUREMENT_SYSTEM_RESERVED_A 7
-#define MEASUREMENT_SYSTEM_RESERVED_B 8
-#define MEASUREMENT_SYSTEM_RESERVED_C 9
-#define MEASUREMENT_SYSTEM_RESERVED_D 10
-#define MEASUREMENT_SYSTEM_RESERVED_E 11
-
-#define RELIABILITY_UKNOWN 0
-#define RELIABILITY_UNVERIFIED 1
-#define RELIABILITY_CEILING 2
-#define RELIABILITY_ACCURATE 3
-
-#define EFFECT_BIT_COUNT 12
-
-#define EFFECT_BIT_NONE (-1)
-#define EFFECT_BIT_NIGHT 0x0001
-#define EFFECT_BIT_NOISY 0x0002
-#define EFFECT_BIT_LIMITED 0x0004
-#define EFFECT_BIT_LOWLEVEL 0x0008
-#define EFFECT_BIT_DIALOG 0x0010
-#define EFFECT_BIT_GENERAL_COMPR 0x0020
-#define EFFECT_BIT_EXPAND 0x0040
-#define EFFECT_BIT_ARTISTIC 0x0080
-#define EFFECT_BIT_CLIPPING 0x0100
-#define EFFECT_BIT_FADE 0x0200
-#define EFFECT_BIT_DUCK_OTHER 0x0400
-#define EFFECT_BIT_DUCK_SELF 0x0800
-
-#define GAIN_CODING_PROFILE_REGULAR 0
-#define GAIN_CODING_PROFILE_FADING 1
-#define GAIN_CODING_PROFILE_CLIPPING 2
-#define GAIN_CODING_PROFILE_CONSTANT 3
-#define GAIN_CODING_PROFILE_DUCKING GAIN_CODING_PROFILE_CLIPPING
-
-#define GAIN_INTERPOLATION_TYPE_SPLINE 0
-#define GAIN_INTERPOLATION_TYPE_LINEAR 1
-
-#define USER_METHOD_DEFINITION_DEFAULT 0
-#define USER_METHOD_DEFINITION_PROGRAM_LOUDNESS 1
-#define USER_METHOD_DEFINITION_ANCHOR_LOUDNESS 2
-
-#define USER_MEASUREMENT_SYSTEM_DEFAULT 0
-#define USER_MEASUREMENT_SYSTEM_BS_1770_4 1
-#define USER_MEASUREMENT_SYSTEM_BS_1770_3 USER_MEASUREMENT_SYSTEM_BS_1770_4
-#define USER_MEASUREMENT_SYSTEM_USER 2
-#define USER_MEASUREMENT_SYSTEM_EXPERT_PANEL 3
-#define USER_MEASUREMENT_SYSTEM_RESERVED_A 4
-#define USER_MEASUREMENT_SYSTEM_RESERVED_B 5
-#define USER_MEASUREMENT_SYSTEM_RESERVED_C 6
-#define USER_MEASUREMENT_SYSTEM_RESERVED_D 7
-#define USER_MEASUREMENT_SYSTEM_RESERVED_E 8
-
-#define USER_LOUDNESS_PREPROCESSING_DEFAULT 0
-#define USER_LOUDNESS_PREPROCESSING_OFF 1
-#define USER_LOUDNESS_PREPROCESSING_HIGHPASS 2
-
-#define LOUDNESS_DEVIATION_MAX_DEFAULT 63
-#define LOUDNESS_NORMALIZATION_GAIN_MAX_DEFAULT 1000
-
-#define SHORT_TERM_LOUDNESS_TO_AVG 0
-#define MOMENTARY_LOUDNESS_TO_AVG 1
-#define TOP_OF_LOUDNESS_RANGE_TO_AVG 2
-
-#define DRC_COMPLEXITY_LEVEL_MAX 0xF
-#define EQ_COMPLEXITY_LEVEL_MAX 0xF
-#define COMPLEXITY_LEVEL_SUPPORTED_TOTAL 20.0f
-
-#define COMPLEXITY_W_SUBBAND_EQ 2.5f
-#define COMPLEXITY_W_FIR 0.4f
-#define COMPLEXITY_W_IIR 5.0f
-#define COMPLEXITY_W_MOD_TIME 1.0f
-#define COMPLEXITY_W_MOD_SUBBAND 2.0f
-#define COMPLEXITY_W_LAP 2.0f
-#define COMPLEXITY_W_SHAPE 6.0f
-#define COMPLEXITY_W_SPLINE 5.0f
-#define COMPLEXITY_W_LINEAR 2.5f
-#define COMPLEXITY_W_PARAM_DRC_FILT 5.0f
-#define COMPLEXITY_W_PARAM_DRC_SUBBAND 5.0f
-#define COMPLEXITY_W_PARAM_LIM_FILT 4.5f
-#define COMPLEXITY_W_PARAM_DRC_ATTACK 136.0f
-
-#define LEFT_SIDE 0
-#define RIGHT_SIDE 1
-
-#define CHARACTERISTIC_SIGMOID 0
-#define CHARACTERISTIC_NODES 1
-#define CHARACTERISTIC_PASS_THRU 2
-
-#define GAINFORMAT_QMF32 0x1
-#define GAINFORMAT_QMFHYBRID39 0x2
-#define GAINFORMAT_QMF64 0x3
-#define GAINFORMAT_QMFHYBRID71 0x4
-#define GAINFORMAT_QMF128 0x5
-#define GAINFORMAT_QMFHYBRID135 0x6
-#define GAINFORMAT_UNIFORM 0x7
-
-#define DRC_INPUT_LOUDNESS_TARGET (-31.0f)
-
-#define SHAPE_FILTER_TYPE_OFF 0
-#define SHAPE_FILTER_TYPE_LF_CUT 1
-#define SHAPE_FILTER_TYPE_LF_BOOST 2
-#define SHAPE_FILTER_TYPE_HF_CUT 3
-#define SHAPE_FILTER_TYPE_HF_BOOST 4
-
-#define SHAPE_FILTER_DRC_GAIN_MAX_MINUS_ONE 1583.8931924611f
-
-typedef struct {
- WORD32 type;
- FLOAT32 gain_offset;
- FLOAT32 y1_bound;
- FLOAT32 warped_gain_max;
- FLOAT32 factor;
- FLOAT32 coeff_sum;
- FLOAT32 partial_coeff_sum;
- FLOAT32 g_norm;
- FLOAT32 a1;
- FLOAT32 a2;
- FLOAT32 b1;
- FLOAT32 b2;
- FLOAT32 audio_in_state_1[MAX_CHANNEL_COUNT];
- FLOAT32 audio_in_state_2[MAX_CHANNEL_COUNT];
- FLOAT32 audio_out_state_1[MAX_CHANNEL_COUNT];
- FLOAT32 audio_out_state_2[MAX_CHANNEL_COUNT];
+#define MEASUREMENT_SYSTEM_BS_1770_3_PRE_PROCESSING \
+ MEASUREMENT_SYSTEM_BS_1770_4_PRE_PROCESSING
+#define MEASUREMENT_SYSTEM_USER 4
+#define MEASUREMENT_SYSTEM_EXPERT_PANEL 5
+#define MEASUREMENT_SYSTEM_BS_1771_1 6
+#define MEASUREMENT_SYSTEM_RESERVED_A 7
+#define MEASUREMENT_SYSTEM_RESERVED_B 8
+#define MEASUREMENT_SYSTEM_RESERVED_C 9
+#define MEASUREMENT_SYSTEM_RESERVED_D 10
+#define MEASUREMENT_SYSTEM_RESERVED_E 11
+
+#define RELIABILITY_UKNOWN 0
+#define RELIABILITY_UNVERIFIED 1
+#define RELIABILITY_CEILING 2
+#define RELIABILITY_ACCURATE 3
+
+#define EFFECT_BIT_COUNT 12
+
+#define EFFECT_BIT_NONE (-1)
+#define EFFECT_BIT_NIGHT 0x0001
+#define EFFECT_BIT_NOISY 0x0002
+#define EFFECT_BIT_LIMITED 0x0004
+#define EFFECT_BIT_LOWLEVEL 0x0008
+#define EFFECT_BIT_DIALOG 0x0010
+#define EFFECT_BIT_GENERAL_COMPR 0x0020
+#define EFFECT_BIT_EXPAND 0x0040
+#define EFFECT_BIT_ARTISTIC 0x0080
+#define EFFECT_BIT_CLIPPING 0x0100
+#define EFFECT_BIT_FADE 0x0200
+#define EFFECT_BIT_DUCK_OTHER 0x0400
+#define EFFECT_BIT_DUCK_SELF 0x0800
+
+#define GAIN_CODING_PROFILE_REGULAR 0
+#define GAIN_CODING_PROFILE_FADING 1
+#define GAIN_CODING_PROFILE_CLIPPING 2
+#define GAIN_CODING_PROFILE_CONSTANT 3
+#define GAIN_CODING_PROFILE_DUCKING GAIN_CODING_PROFILE_CLIPPING
+
+#define GAIN_INTERPOLATION_TYPE_SPLINE 0
+#define GAIN_INTERPOLATION_TYPE_LINEAR 1
+
+#define USER_METHOD_DEFINITION_DEFAULT 0
+#define USER_METHOD_DEFINITION_PROGRAM_LOUDNESS 1
+#define USER_METHOD_DEFINITION_ANCHOR_LOUDNESS 2
+
+#define USER_MEASUREMENT_SYSTEM_DEFAULT 0
+#define USER_MEASUREMENT_SYSTEM_BS_1770_4 1
+#define USER_MEASUREMENT_SYSTEM_BS_1770_3 USER_MEASUREMENT_SYSTEM_BS_1770_4
+#define USER_MEASUREMENT_SYSTEM_USER 2
+#define USER_MEASUREMENT_SYSTEM_EXPERT_PANEL 3
+#define USER_MEASUREMENT_SYSTEM_RESERVED_A 4
+#define USER_MEASUREMENT_SYSTEM_RESERVED_B 5
+#define USER_MEASUREMENT_SYSTEM_RESERVED_C 6
+#define USER_MEASUREMENT_SYSTEM_RESERVED_D 7
+#define USER_MEASUREMENT_SYSTEM_RESERVED_E 8
+
+#define USER_LOUDNESS_PREPROCESSING_DEFAULT 0
+#define USER_LOUDNESS_PREPROCESSING_OFF 1
+#define USER_LOUDNESS_PREPROCESSING_HIGHPASS 2
+
+#define LOUDNESS_DEVIATION_MAX_DEFAULT 63
+#define LOUDNESS_NORMALIZATION_GAIN_MAX_DEFAULT 1000
+
+#define SHORT_TERM_LOUDNESS_TO_AVG 0
+#define MOMENTARY_LOUDNESS_TO_AVG 1
+#define TOP_OF_LOUDNESS_RANGE_TO_AVG 2
+
+#define DRC_COMPLEXITY_LEVEL_MAX 0xF
+#define EQ_COMPLEXITY_LEVEL_MAX 0xF
+#define COMPLEXITY_LEVEL_SUPPORTED_TOTAL 20.0f
+
+#define COMPLEXITY_W_SUBBAND_EQ 2.5f
+#define COMPLEXITY_W_FIR 0.4f
+#define COMPLEXITY_W_IIR 5.0f
+#define COMPLEXITY_W_MOD_TIME 1.0f
+#define COMPLEXITY_W_MOD_SUBBAND 2.0f
+#define COMPLEXITY_W_LAP 2.0f
+#define COMPLEXITY_W_SHAPE 6.0f
+#define COMPLEXITY_W_SPLINE 5.0f
+#define COMPLEXITY_W_LINEAR 2.5f
+#define COMPLEXITY_W_PARAM_DRC_FILT 5.0f
+#define COMPLEXITY_W_PARAM_DRC_SUBBAND 5.0f
+#define COMPLEXITY_W_PARAM_LIM_FILT 4.5f
+#define COMPLEXITY_W_PARAM_DRC_ATTACK 136.0f
+
+#define LEFT_SIDE 0
+#define RIGHT_SIDE 1
+
+#define CHARACTERISTIC_SIGMOID 0
+#define CHARACTERISTIC_NODES 1
+#define CHARACTERISTIC_PASS_THRU 2
+
+#define GAINFORMAT_QMF32 0x1
+#define GAINFORMAT_QMFHYBRID39 0x2
+#define GAINFORMAT_QMF64 0x3
+#define GAINFORMAT_QMFHYBRID71 0x4
+#define GAINFORMAT_QMF128 0x5
+#define GAINFORMAT_QMFHYBRID135 0x6
+#define GAINFORMAT_UNIFORM 0x7
+
+#define DRC_INPUT_LOUDNESS_TARGET (-31.0f)
+
+#define SHAPE_FILTER_TYPE_OFF 0
+#define SHAPE_FILTER_TYPE_LF_CUT 1
+#define SHAPE_FILTER_TYPE_LF_BOOST 2
+#define SHAPE_FILTER_TYPE_HF_CUT 3
+#define SHAPE_FILTER_TYPE_HF_BOOST 4
+
+#define SHAPE_FILTER_DRC_GAIN_MAX_MINUS_ONE 1583.8931924611f
+
+typedef struct {
+ WORD32 type;
+ FLOAT32 gain_offset;
+ FLOAT32 y1_bound;
+ FLOAT32 warped_gain_max;
+ FLOAT32 factor;
+ FLOAT32 coeff_sum;
+ FLOAT32 partial_coeff_sum;
+ FLOAT32 g_norm;
+ FLOAT32 a1;
+ FLOAT32 a2;
+ FLOAT32 b1;
+ FLOAT32 b2;
+ FLOAT32 audio_in_state_1[MAX_CHANNEL_COUNT];
+ FLOAT32 audio_in_state_2[MAX_CHANNEL_COUNT];
+ FLOAT32 audio_out_state_1[MAX_CHANNEL_COUNT];
+ FLOAT32 audio_out_state_2[MAX_CHANNEL_COUNT];
} ia_shape_filter_struct;
typedef struct {
- WORD32 shape_flter_block_flag;
- FLOAT32 drc_gain_last;
- ia_shape_filter_struct shape_filter[4];
+ WORD32 shape_flter_block_flag;
+ FLOAT32 drc_gain_last;
+ ia_shape_filter_struct shape_filter[4];
} shape_filter_block;
typedef struct {
- WORD32 level_estim_k_weighting_type;
- WORD32 level_estim_integration_time_present;
- WORD32 level_estim_integration_time;
- WORD32 drc_curve_definition_type;
- WORD32 drc_characteristic;
- WORD32 node_count;
- WORD32 node_level[PARAM_DRC_TYPE_FF_NODE_COUNT_MAX];
- WORD32 node_gain[PARAM_DRC_TYPE_FF_NODE_COUNT_MAX];
- WORD32 drc_gain_smooth_parameters_present;
- WORD32 gain_smooth_attack_time_slow;
- WORD32 gain_smooth_release_time_slow;
- WORD32 gain_smooth_time_fast_present;
- WORD32 gain_smooth_attack_time_fast;
- WORD32 gain_smooth_release_time_fast;
- WORD32 gain_smooth_threshold_present;
- WORD32 gain_smooth_attack_threshold;
- WORD32 gain_smooth_rel_threshold;
- WORD32 gain_smooth_hold_off_count_present;
- WORD32 gain_smooth_hold_off;
-
- WORD32 disable_paramteric_drc;
+ WORD32 level_estim_k_weighting_type;
+ WORD32 level_estim_integration_time_present;
+ WORD32 level_estim_integration_time;
+ WORD32 drc_curve_definition_type;
+ WORD32 drc_characteristic;
+ WORD32 node_count;
+ WORD32 node_level[PARAM_DRC_TYPE_FF_NODE_COUNT_MAX];
+ WORD32 node_gain[PARAM_DRC_TYPE_FF_NODE_COUNT_MAX];
+ WORD32 drc_gain_smooth_parameters_present;
+ WORD32 gain_smooth_attack_time_slow;
+ WORD32 gain_smooth_release_time_slow;
+ WORD32 gain_smooth_time_fast_present;
+ WORD32 gain_smooth_attack_time_fast;
+ WORD32 gain_smooth_release_time_fast;
+ WORD32 gain_smooth_threshold_present;
+ WORD32 gain_smooth_attack_threshold;
+ WORD32 gain_smooth_rel_threshold;
+ WORD32 gain_smooth_hold_off_count_present;
+ WORD32 gain_smooth_hold_off;
+
+ WORD32 disable_paramteric_drc;
} ia_parametric_drc_type_feed_forward_struct;
typedef struct {
- WORD32 parametric_lim_threshold_present;
- FLOAT32 parametric_lim_threshold;
- WORD32 parametric_lim_attack;
- WORD32 parametric_lim_release_present;
- WORD32 parametric_lim_release;
- WORD32 drc_characteristic;
+ WORD32 parametric_lim_threshold_present;
+ FLOAT32 parametric_lim_threshold;
+ WORD32 parametric_lim_attack;
+ WORD32 parametric_lim_release_present;
+ WORD32 parametric_lim_release;
+ WORD32 drc_characteristic;
- WORD32 disable_paramteric_drc;
+ WORD32 disable_paramteric_drc;
} ia_parametric_drc_lim_struct;
typedef struct {
- WORD32 parametric_drc_id;
- WORD32 parametric_drc_look_ahead_flag;
- WORD32 parametric_drc_look_ahead;
- WORD32 parametric_drc_preset_id_present;
- WORD32 parametric_drc_preset_id;
- WORD32 parametric_drc_type;
- WORD32 len_bit_size;
- ia_parametric_drc_type_feed_forward_struct str_parametric_drc_type_feed_forward;
- ia_parametric_drc_lim_struct parametric_drc_lim;
+ WORD32 parametric_drc_id;
+ WORD32 parametric_drc_look_ahead_flag;
+ WORD32 parametric_drc_look_ahead;
+ WORD32 parametric_drc_preset_id_present;
+ WORD32 parametric_drc_preset_id;
+ WORD32 parametric_drc_type;
+ WORD32 len_bit_size;
+ ia_parametric_drc_type_feed_forward_struct
+ str_parametric_drc_type_feed_forward;
+ ia_parametric_drc_lim_struct parametric_drc_lim;
- WORD32 drc_characteristic;
- WORD32 disable_paramteric_drc;
+ WORD32 drc_characteristic;
+ WORD32 disable_paramteric_drc;
} ia_parametric_drc_instructions_struct;
typedef struct {
- WORD32 parametric_drc_id;
- WORD32 side_chain_config_type;
- WORD32 downmix_id;
- WORD32 level_estim_channel_weight_format;
- FLOAT32 level_estim_ch_weight[MAX_CHANNEL_COUNT];
- WORD32 drc_input_loudness_present;
- FLOAT32 drc_input_loudness;
+ WORD32 parametric_drc_id;
+ WORD32 side_chain_config_type;
+ WORD32 downmix_id;
+ WORD32 level_estim_channel_weight_format;
+ FLOAT32 level_estim_ch_weight[MAX_CHANNEL_COUNT];
+ WORD32 drc_input_loudness_present;
+ FLOAT32 drc_input_loudness;
- WORD32 ch_count_from_dwnmix_id;
+ WORD32 ch_count_from_dwnmix_id;
} ia_parametric_drc_gain_set_params_struct;
typedef struct {
- WORD32 drc_location;
- WORD32 parametric_drc_frame_size_format;
- WORD32 parametric_drc_frame_size;
- WORD32 parametric_drc_delay_max_present;
- WORD32 parametric_drc_delay_max;
- WORD32 reset_parametric_drc;
- WORD32 parametric_drc_gain_set_count;
- ia_parametric_drc_gain_set_params_struct str_parametric_drc_gain_set_params[SEQUENCE_COUNT_MAX];
+ WORD32 drc_location;
+ WORD32 parametric_drc_frame_size_format;
+ WORD32 parametric_drc_frame_size;
+ WORD32 parametric_drc_delay_max_present;
+ WORD32 parametric_drc_delay_max;
+ WORD32 reset_parametric_drc;
+ WORD32 parametric_drc_gain_set_count;
+ ia_parametric_drc_gain_set_params_struct
+ str_parametric_drc_gain_set_params[SEQUENCE_COUNT_MAX];
} ia_drc_coeff_parametric_drc_struct;
typedef struct {
- WORD32 base_channel_count;
- WORD32 layout_signaling_present;
- WORD32 defined_layout;
- WORD32 speaker_position[SPEAKER_POS_COUNT_MAX];
+ WORD32 base_channel_count;
+ WORD32 layout_signaling_present;
+ WORD32 defined_layout;
+ WORD32 speaker_position[SPEAKER_POS_COUNT_MAX];
} ia_channel_layout_struct;
typedef struct {
- WORD32 downmix_id;
- WORD32 target_channel_count;
- WORD32 target_layout;
- WORD32 downmix_coefficients_present;
- FLOAT32 downmix_coefficient[DOWNMIX_COEFF_COUNT_MAX];
+ WORD32 downmix_id;
+ WORD32 target_channel_count;
+ WORD32 target_layout;
+ WORD32 downmix_coefficients_present;
+ FLOAT32 downmix_coefficient[DOWNMIX_COEFF_COUNT_MAX];
} ia_downmix_instructions_struct;
typedef struct {
- WORD32 gain_seq_idx;
- WORD32 drc_characteristic;
- WORD32 drc_characteristic_present;
- WORD32 drc_characteristic_format_is_cicp;
- WORD32 drc_characteristic_left_index;
- WORD32 drc_characteristic_right_index;
- WORD32 crossover_freq_idx;
- WORD32 start_subband_index;
+ WORD32 gain_seq_idx;
+ WORD32 drc_characteristic;
+ WORD32 drc_characteristic_present;
+ WORD32 drc_characteristic_format_is_cicp;
+ WORD32 drc_characteristic_left_index;
+ WORD32 drc_characteristic_right_index;
+ WORD32 crossover_freq_idx;
+ WORD32 start_subband_index;
} ia_gain_params_struct;
typedef struct {
- WORD32 ducking_scaling_flag;
- FLOAT32 ducking_scaling;
- FLOAT32 ducking_scaling_quantized;
+ WORD32 ducking_scaling_flag;
+ FLOAT32 ducking_scaling;
+ FLOAT32 ducking_scaling_quantized;
} ia_ducking_modifiers_struct;
typedef struct {
- WORD32 target_characteristic_left_present [DRC_BAND_COUNT_MAX];
- WORD32 target_characteristic_left_index [DRC_BAND_COUNT_MAX];
- WORD32 target_characteristic_right_present[DRC_BAND_COUNT_MAX];
- WORD32 target_characteristic_right_index [DRC_BAND_COUNT_MAX];
- WORD32 shape_filter_flag;
- WORD32 shape_filter_idx;
- WORD32 gain_scaling_flag [BAND_COUNT_MAX];
- FLOAT32 attn_scaling [BAND_COUNT_MAX];
- FLOAT32 ampl_scaling[BAND_COUNT_MAX];
- WORD32 gain_offset_flag [BAND_COUNT_MAX];
- FLOAT32 gain_offset [BAND_COUNT_MAX];
+ WORD32 target_characteristic_left_present[DRC_BAND_COUNT_MAX];
+ WORD32 target_characteristic_left_index[DRC_BAND_COUNT_MAX];
+ WORD32 target_characteristic_right_present[DRC_BAND_COUNT_MAX];
+ WORD32 target_characteristic_right_index[DRC_BAND_COUNT_MAX];
+ WORD32 shape_filter_flag;
+ WORD32 shape_filter_idx;
+ WORD32 gain_scaling_flag[BAND_COUNT_MAX];
+ FLOAT32 attn_scaling[BAND_COUNT_MAX];
+ FLOAT32 ampl_scaling[BAND_COUNT_MAX];
+ WORD32 gain_offset_flag[BAND_COUNT_MAX];
+ FLOAT32 gain_offset[BAND_COUNT_MAX];
} ia_gain_modifiers_struct;
typedef struct {
- WORD32 gain_coding_profile;
- WORD32 gain_interpolation_type;
- WORD32 full_frame;
- WORD32 time_alignment;
- WORD32 time_delt_min_flag;
- WORD32 time_delt_min_val;
- WORD32 band_count;
- WORD32 drc_band_type;
- ia_gain_params_struct gain_params[BAND_COUNT_MAX];
+ WORD32 gain_coding_profile;
+ WORD32 gain_interpolation_type;
+ WORD32 full_frame;
+ WORD32 time_alignment;
+ WORD32 time_delt_min_flag;
+ WORD32 time_delt_min_val;
+ WORD32 band_count;
+ WORD32 drc_band_type;
+ ia_gain_params_struct gain_params[BAND_COUNT_MAX];
- WORD32 num_gain_max_values;
- ia_tables_struct str_tables;
+ WORD32 num_gain_max_values;
+ ia_tables_struct str_tables;
} ia_gain_set_params_struct;
#define SPLIT_CHARACTERISTIC_NODE_COUNT_MAX 4
typedef struct {
- WORD32 characteristic_format;
- FLOAT32 in_out_ratio;
- FLOAT32 gain;
- FLOAT32 exp;
- WORD32 flip_sign;
- WORD32 characteristic_node_count;
- FLOAT32 node_level[SPLIT_CHARACTERISTIC_NODE_COUNT_MAX+1];
- FLOAT32 node_gain [SPLIT_CHARACTERISTIC_NODE_COUNT_MAX+1];
+ WORD32 characteristic_format;
+ FLOAT32 in_out_ratio;
+ FLOAT32 gain;
+ FLOAT32 exp;
+ WORD32 flip_sign;
+ WORD32 characteristic_node_count;
+ FLOAT32 node_level[SPLIT_CHARACTERISTIC_NODE_COUNT_MAX + 1];
+ FLOAT32 node_gain[SPLIT_CHARACTERISTIC_NODE_COUNT_MAX + 1];
} ia_split_drc_characteristic_struct;
typedef struct {
- WORD32 corner_freq_index;
- WORD32 filter_strength_index;
+ WORD32 corner_freq_index;
+ WORD32 filter_strength_index;
} ia_shape_filter_params_struct;
typedef struct {
- WORD32 lf_cut_filter_present;
- ia_shape_filter_params_struct str_lf_cut_params;
- WORD32 lf_boost_filter_present;
- ia_shape_filter_params_struct str_lf_boost_params;
- WORD32 hf_cut_filter_present;
- ia_shape_filter_params_struct str_hfCutParams;
- WORD32 hf_boost_filter_present;
- ia_shape_filter_params_struct str_hf_boost_params;
+ WORD32 lf_cut_filter_present;
+ ia_shape_filter_params_struct str_lf_cut_params;
+ WORD32 lf_boost_filter_present;
+ ia_shape_filter_params_struct str_lf_boost_params;
+ WORD32 hf_cut_filter_present;
+ ia_shape_filter_params_struct str_hfCutParams;
+ WORD32 hf_boost_filter_present;
+ ia_shape_filter_params_struct str_hf_boost_params;
} ia_shape_filter_block_params_struct;
typedef struct {
- WORD32 drc_location;
- WORD32 drc_characteristic;
+ WORD32 drc_location;
+ WORD32 drc_characteristic;
} ia_drc_coefficients_basic_struct;
typedef struct {
- WORD32 version;
- WORD32 drc_location;
- WORD32 drc_frame_size_present;
- WORD32 drc_frame_size;
- WORD32 gain_set_count;
- ia_gain_set_params_struct gain_set_params[GAIN_SET_COUNT_MAX];
- WORD32 drc_characteristic_left_present;
- WORD32 characteristic_left_count;
- ia_split_drc_characteristic_struct str_split_characteristic_left [SPLIT_CHARACTERISTIC_COUNT_MAX];
- WORD32 drc_characteristic_right_present;
- WORD32 characteristic_right_count;
- ia_split_drc_characteristic_struct str_split_characteristic_right[SPLIT_CHARACTERISTIC_COUNT_MAX];
- WORD32 shape_filters_present;
- WORD32 shape_num_filter;
- ia_shape_filter_block_params_struct str_shape_filter_block_params[SHAPE_FILTER_COUNT_MAX+1];
- WORD32 gain_sequence_count;
- WORD32 gain_set_params_index_for_gain_sequence[SEQUENCE_COUNT_MAX];
- WORD32 gain_set_count_plus;
+ WORD32 version;
+ WORD32 drc_location;
+ WORD32 drc_frame_size_present;
+ WORD32 drc_frame_size;
+ WORD32 gain_set_count;
+ ia_gain_set_params_struct gain_set_params[GAIN_SET_COUNT_MAX];
+ WORD32 drc_characteristic_left_present;
+ WORD32 characteristic_left_count;
+ ia_split_drc_characteristic_struct
+ str_split_characteristic_left[SPLIT_CHARACTERISTIC_COUNT_MAX];
+ WORD32 drc_characteristic_right_present;
+ WORD32 characteristic_right_count;
+ ia_split_drc_characteristic_struct
+ str_split_characteristic_right[SPLIT_CHARACTERISTIC_COUNT_MAX];
+ WORD32 shape_filters_present;
+ WORD32 shape_num_filter;
+ ia_shape_filter_block_params_struct
+ str_shape_filter_block_params[SHAPE_FILTER_COUNT_MAX + 1];
+ WORD32 gain_sequence_count;
+ WORD32 gain_set_params_index_for_gain_sequence[SEQUENCE_COUNT_MAX];
+ WORD32 gain_set_count_plus;
} ia_uni_drc_coeffs_struct;
typedef struct {
- WORD32 drc_set_id;
- WORD32 drc_location;
- WORD32 dwnmix_id_count;
- WORD32 downmix_id[DOWNMIX_ID_COUNT_MAX];
- WORD32 drc_set_effect;
- WORD32 limiter_peak_target_present;
- FLOAT32 limiter_peak_target;
- WORD32 drc_set_target_loudness_present;
- WORD32 drc_set_target_loudness_value_upper;
- WORD32 drc_set_target_loudness_value_lower_present;
- WORD32 drc_set_target_loudness_value_lower;
+ WORD32 drc_set_id;
+ WORD32 drc_location;
+ WORD32 dwnmix_id_count;
+ WORD32 downmix_id[DOWNMIX_ID_COUNT_MAX];
+ WORD32 drc_set_effect;
+ WORD32 limiter_peak_target_present;
+ FLOAT32 limiter_peak_target;
+ WORD32 drc_set_target_loudness_present;
+ WORD32 drc_set_target_loudness_value_upper;
+ WORD32 drc_set_target_loudness_value_lower_present;
+ WORD32 drc_set_target_loudness_value_lower;
} ia_drc_instructions_basic_struct;
typedef struct {
- WORD32 drc_set_id;
- WORD32 drc_set_complexity_level;
- WORD32 requires_eq;
- WORD32 drc_apply_to_dwnmix;
- WORD32 drc_location;
- WORD32 dwnmix_id_count;
- WORD32 downmix_id[DOWNMIX_ID_COUNT_MAX];
- WORD32 depends_on_drc_set_present;
- WORD32 depends_on_drc_set;
- WORD32 no_independent_use;
- WORD32 drc_set_effect;
- WORD32 gain_set_index[MAX_CHANNEL_COUNT];
- ia_gain_modifiers_struct str_gain_modifiers_of_ch_group[CHANNEL_GROUP_COUNT_MAX];
- ia_ducking_modifiers_struct str_ducking_modifiers_for_channel[MAX_CHANNEL_COUNT];
- WORD32 limiter_peak_target_present;
- FLOAT32 limiter_peak_target;
- WORD32 drc_set_target_loudness_present;
- WORD32 drc_set_target_loudness_value_upper;
- WORD32 drc_set_target_loudness_value_lower_present;
- WORD32 drc_set_target_loudness_value_lower;
-
- WORD32 audio_num_chan;
- WORD32 num_drc_ch_groups;
- WORD32 gain_set_index_for_channel_group[CHANNEL_GROUP_COUNT_MAX];
- WORD32 band_count_of_ch_group[CHANNEL_GROUP_COUNT_MAX];
- WORD32 gain_interpolation_type_for_channel_group[CHANNEL_GROUP_COUNT_MAX];
- WORD32 time_delta_min_for_channel_group[CHANNEL_GROUP_COUNT_MAX];
- WORD32 time_alignment_for_channel_group[CHANNEL_GROUP_COUNT_MAX];
- ia_ducking_modifiers_struct str_ducking_modifiers_for_channel_group[CHANNEL_GROUP_COUNT_MAX];
- WORD32 channel_group_of_ch[MAX_CHANNEL_COUNT];
- WORD32 num_chan_per_ch_group[CHANNEL_GROUP_COUNT_MAX];
- WORD32 gain_element_count;
- WORD32 multiband_audio_sig_count;
- WORD32 ch_group_parametric_drc_flag[CHANNEL_GROUP_COUNT_MAX];
- WORD32 gain_set_idx_of_ch_group_parametric_drc[CHANNEL_GROUP_COUNT_MAX];
- WORD32 parametric_drc_look_ahead_samples[CHANNEL_GROUP_COUNT_MAX];
- WORD32 parametric_drc_look_ahead_samples_max;
+ WORD32 drc_set_id;
+ WORD32 drc_set_complexity_level;
+ WORD32 requires_eq;
+ WORD32 drc_apply_to_dwnmix;
+ WORD32 drc_location;
+ WORD32 dwnmix_id_count;
+ WORD32 downmix_id[DOWNMIX_ID_COUNT_MAX];
+ WORD32 depends_on_drc_set_present;
+ WORD32 depends_on_drc_set;
+ WORD32 no_independent_use;
+ WORD32 drc_set_effect;
+ WORD32 gain_set_index[MAX_CHANNEL_COUNT];
+ ia_gain_modifiers_struct
+ str_gain_modifiers_of_ch_group[CHANNEL_GROUP_COUNT_MAX];
+ ia_ducking_modifiers_struct
+ str_ducking_modifiers_for_channel[MAX_CHANNEL_COUNT];
+ WORD32 limiter_peak_target_present;
+ FLOAT32 limiter_peak_target;
+ WORD32 drc_set_target_loudness_present;
+ WORD32 drc_set_target_loudness_value_upper;
+ WORD32 drc_set_target_loudness_value_lower_present;
+ WORD32 drc_set_target_loudness_value_lower;
+
+ WORD32 audio_num_chan;
+ WORD32 num_drc_ch_groups;
+ WORD32 gain_set_index_for_channel_group[CHANNEL_GROUP_COUNT_MAX];
+ WORD32 band_count_of_ch_group[CHANNEL_GROUP_COUNT_MAX];
+ WORD32 gain_interpolation_type_for_channel_group[CHANNEL_GROUP_COUNT_MAX];
+ WORD32 time_delta_min_for_channel_group[CHANNEL_GROUP_COUNT_MAX];
+ WORD32 time_alignment_for_channel_group[CHANNEL_GROUP_COUNT_MAX];
+ ia_ducking_modifiers_struct
+ str_ducking_modifiers_for_channel_group[CHANNEL_GROUP_COUNT_MAX];
+ WORD32 channel_group_of_ch[MAX_CHANNEL_COUNT];
+ WORD32 num_chan_per_ch_group[CHANNEL_GROUP_COUNT_MAX];
+ WORD32 gain_element_count;
+ WORD32 multiband_audio_sig_count;
+ WORD32 ch_group_parametric_drc_flag[CHANNEL_GROUP_COUNT_MAX];
+ WORD32 gain_set_idx_of_ch_group_parametric_drc[CHANNEL_GROUP_COUNT_MAX];
+ WORD32 parametric_drc_look_ahead_samples[CHANNEL_GROUP_COUNT_MAX];
+ WORD32 parametric_drc_look_ahead_samples_max;
} ia_drc_instructions_struct;
typedef struct {
- WORD32 method_def;
- FLOAT32 method_val;
- WORD32 measurement_system;
- WORD32 reliability;
+ WORD32 method_def;
+ FLOAT32 method_val;
+ WORD32 measurement_system;
+ WORD32 reliability;
} ia_loudness_measure_struct;
typedef struct {
- WORD32 drc_set_id;
- WORD32 eq_set_id;
- WORD32 downmix_id;
- WORD32 sample_peak_level_present;
- FLOAT32 sample_peak_level;
- WORD32 true_peak_level_present;
- FLOAT32 true_peak_level;
- WORD32 true_peak_level_measurement_system;
- WORD32 true_peak_level_reliability;
- WORD32 measurement_count;
- ia_loudness_measure_struct loudness_measure[MEASUREMENT_COUNT_MAX];
+ WORD32 drc_set_id;
+ WORD32 eq_set_id;
+ WORD32 downmix_id;
+ WORD32 sample_peak_level_present;
+ FLOAT32 sample_peak_level;
+ WORD32 true_peak_level_present;
+ FLOAT32 true_peak_level;
+ WORD32 true_peak_level_measurement_system;
+ WORD32 true_peak_level_reliability;
+ WORD32 measurement_count;
+ ia_loudness_measure_struct loudness_measure[MEASUREMENT_COUNT_MAX];
} ia_loudness_info_struct;
typedef struct {
- WORD32 loud_eq_set_id;
- WORD32 drc_location;
- WORD32 dwnmix_id_count;
- WORD32 downmix_id [DOWNMIX_ID_COUNT_MAX];
- WORD32 drc_set_id_count;
- WORD32 drc_set_id [DRC_SET_ID_COUNT_MAX];
- WORD32 eq_set_id_count;
- WORD32 eq_set_id [EQ_SET_ID_COUNT_MAX];
- WORD32 loudness_after_drc;
- WORD32 loudness_after_eq;
- WORD32 loud_eq_gain_sequence_count;
- WORD32 gain_seq_idx [LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
- WORD32 drc_characteristic_format_is_cicp [LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
- WORD32 drc_characteristic [LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
- WORD32 drc_characteristic_left_index [LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
- WORD32 drc_characteristic_right_index [LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
- WORD32 frequency_range_index [LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
- FLOAT32 loud_eq_scaling [LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
- FLOAT32 loud_eq_offset [LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
+ WORD32 loud_eq_set_id;
+ WORD32 drc_location;
+ WORD32 dwnmix_id_count;
+ WORD32 downmix_id[DOWNMIX_ID_COUNT_MAX];
+ WORD32 drc_set_id_count;
+ WORD32 drc_set_id[DRC_SET_ID_COUNT_MAX];
+ WORD32 eq_set_id_count;
+ WORD32 eq_set_id[EQ_SET_ID_COUNT_MAX];
+ WORD32 loudness_after_drc;
+ WORD32 loudness_after_eq;
+ WORD32 loud_eq_gain_sequence_count;
+ WORD32 gain_seq_idx[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
+ WORD32 drc_characteristic_format_is_cicp[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
+ WORD32 drc_characteristic[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
+ WORD32 drc_characteristic_left_index[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
+ WORD32 drc_characteristic_right_index[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
+ WORD32 frequency_range_index[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
+ FLOAT32 loud_eq_scaling[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
+ FLOAT32 loud_eq_offset[LOUD_EQ_GAIN_SEQUENCE_COUNT_MAX];
} ia_loud_eq_instructions_struct;
typedef struct {
- WORD32 filt_ele_idx;
- WORD32 filt_ele_gain_flag;
- FLOAT32 filt_ele_gain;
+ WORD32 filt_ele_idx;
+ WORD32 filt_ele_gain_flag;
+ FLOAT32 filt_ele_gain;
} ia_filt_ele_struct;
typedef struct {
- WORD32 filter_element_count;
- ia_filt_ele_struct str_filter_element[FILTER_ELEMENT_COUNT_MAX];
+ WORD32 filter_element_count;
+ ia_filt_ele_struct str_filter_element[FILTER_ELEMENT_COUNT_MAX];
} ia_filt_block_struct;
typedef struct {
- WORD32 eq_filter_format;
- WORD32 bs_real_zero_radius_one_count;
- WORD32 real_zero_count;
- WORD32 generic_zero_count;
- WORD32 real_pole_count;
- WORD32 cmplx_pole_count;
- WORD32 zero_sign [REAL_ZERO_RADIUS_ONE_COUNT_MAX];
- FLOAT32 real_zero_radius [REAL_ZERO_COUNT_MAX];
- FLOAT32 generic_zero_radius [COMPLEX_ZERO_COUNT_MAX];
- FLOAT32 generic_zero_angle [COMPLEX_ZERO_COUNT_MAX];
- FLOAT32 real_pole_radius [REAL_POLE_COUNT_MAX];
- FLOAT32 complex_pole_radius [COMPLEX_POLE_COUNT_MAX];
- FLOAT32 complex_pole_angle [COMPLEX_POLE_COUNT_MAX];
- WORD32 fir_filt_order;
- WORD32 fir_symmetry;
- FLOAT32 fir_coeff [FIR_ORDER_MAX/2];
+ WORD32 eq_filter_format;
+ WORD32 bs_real_zero_radius_one_count;
+ WORD32 real_zero_count;
+ WORD32 generic_zero_count;
+ WORD32 real_pole_count;
+ WORD32 cmplx_pole_count;
+ WORD32 zero_sign[REAL_ZERO_RADIUS_ONE_COUNT_MAX];
+ FLOAT32 real_zero_radius[REAL_ZERO_COUNT_MAX];
+ FLOAT32 generic_zero_radius[COMPLEX_ZERO_COUNT_MAX];
+ FLOAT32 generic_zero_angle[COMPLEX_ZERO_COUNT_MAX];
+ FLOAT32 real_pole_radius[REAL_POLE_COUNT_MAX];
+ FLOAT32 complex_pole_radius[COMPLEX_POLE_COUNT_MAX];
+ FLOAT32 complex_pole_angle[COMPLEX_POLE_COUNT_MAX];
+ WORD32 fir_filt_order;
+ WORD32 fir_symmetry;
+ FLOAT32 fir_coeff[FIR_ORDER_MAX / 2];
} ia_unique_td_filt_element;
typedef struct {
- WORD32 num_eq_nodes;
- FLOAT32 eq_slope [EQ_NODE_COUNT_MAX];
- WORD32 eq_freq_delta [EQ_NODE_COUNT_MAX];
- FLOAT32 eq_gain_initial;
- FLOAT32 eq_gain_delta [EQ_NODE_COUNT_MAX];
+ WORD32 num_eq_nodes;
+ FLOAT32 eq_slope[EQ_NODE_COUNT_MAX];
+ WORD32 eq_freq_delta[EQ_NODE_COUNT_MAX];
+ FLOAT32 eq_gain_initial;
+ FLOAT32 eq_gain_delta[EQ_NODE_COUNT_MAX];
} ia_eq_subband_gain_spline_struct;
typedef struct {
- FLOAT32 eq_subband_gain [EQ_SUBBAND_GAIN_COUNT_MAX];
+ FLOAT32 eq_subband_gain[EQ_SUBBAND_GAIN_COUNT_MAX];
} ia_eq_subband_gain_vector;
typedef struct {
- WORD32 eq_delay_max_present;
- WORD32 eq_delay_max;
- WORD32 unique_filter_block_count;
- ia_filt_block_struct str_filter_block [FILTER_BLOCK_COUNT_MAX];
- WORD32 unique_td_filter_element_count;
- ia_unique_td_filt_element unique_td_filt_ele [FILTER_ELEMENT_COUNT_MAX];
- WORD32 unique_eq_subband_gains_count;
- WORD32 eq_subband_gain_representation;
- WORD32 eq_subband_gain_format;
- WORD32 eq_subband_gain_count;
- ia_eq_subband_gain_spline_struct str_eq_subband_gain_spline [UNIQUE_SUBBAND_GAIN_COUNT_MAX];
- ia_eq_subband_gain_vector str_eq_subband_gain_vector [UNIQUE_SUBBAND_GAIN_COUNT_MAX];
+ WORD32 eq_delay_max_present;
+ WORD32 eq_delay_max;
+ WORD32 unique_filter_block_count;
+ ia_filt_block_struct str_filter_block[FILTER_BLOCK_COUNT_MAX];
+ WORD32 unique_td_filter_element_count;
+ ia_unique_td_filt_element unique_td_filt_ele[FILTER_ELEMENT_COUNT_MAX];
+ WORD32 unique_eq_subband_gains_count;
+ WORD32 eq_subband_gain_representation;
+ WORD32 eq_subband_gain_format;
+ WORD32 eq_subband_gain_count;
+ ia_eq_subband_gain_spline_struct
+ str_eq_subband_gain_spline[UNIQUE_SUBBAND_GAIN_COUNT_MAX];
+ ia_eq_subband_gain_vector
+ str_eq_subband_gain_vector[UNIQUE_SUBBAND_GAIN_COUNT_MAX];
} ia_eq_coeff_struct;
typedef struct {
- WORD32 filter_block_count;
- WORD32 filter_block_index[EQ_FILTER_BLOCK_COUNT_MAX];
+ WORD32 filter_block_count;
+ WORD32 filter_block_index[EQ_FILTER_BLOCK_COUNT_MAX];
} ia_filter_block_refs_struct;
typedef struct {
- WORD32 eq_cascade_gain_present [EQ_CHANNEL_GROUP_COUNT_MAX];
- FLOAT32 eq_cascade_gain [EQ_CHANNEL_GROUP_COUNT_MAX];
- ia_filter_block_refs_struct str_filter_block_refs [EQ_CHANNEL_GROUP_COUNT_MAX];
- WORD32 eq_phase_alignment_present;
- WORD32 eq_phase_alignment [EQ_CHANNEL_GROUP_COUNT_MAX][EQ_CHANNEL_GROUP_COUNT_MAX];
+ WORD32 eq_cascade_gain_present[EQ_CHANNEL_GROUP_COUNT_MAX];
+ FLOAT32 eq_cascade_gain[EQ_CHANNEL_GROUP_COUNT_MAX];
+ ia_filter_block_refs_struct str_filter_block_refs[EQ_CHANNEL_GROUP_COUNT_MAX];
+ WORD32 eq_phase_alignment_present;
+ WORD32 eq_phase_alignment[EQ_CHANNEL_GROUP_COUNT_MAX]
+ [EQ_CHANNEL_GROUP_COUNT_MAX];
} ia_td_filter_cascade_struct;
typedef struct {
- WORD32 eq_set_id;
- WORD32 eq_set_complexity_level;
- WORD32 dwnmix_id_count;
- WORD32 downmix_id[DOWNMIX_ID_COUNT_MAX];
- WORD32 eq_apply_to_downmix;
- WORD32 drc_set_id_count;
- WORD32 drc_set_id[DRC_SET_ID_COUNT_MAX];
- WORD32 eq_set_purpose;
- WORD32 depends_on_eq_set_present;
- WORD32 depends_on_eq_set;
- WORD32 no_independent_eq_use;
- WORD32 eq_channel_count;
- WORD32 eq_ch_group_count;
- WORD32 eq_ch_group_of_channel [MAX_CHANNEL_COUNT];
- WORD32 td_filter_cascade_present;
- ia_td_filter_cascade_struct str_td_filter_cascade;
- WORD32 subband_gains_present;
- WORD32 subband_gains_index [EQ_CHANNEL_GROUP_COUNT_MAX];
- WORD32 eq_transition_duration_present;
- WORD32 eq_transition_duration;
+ WORD32 eq_set_id;
+ WORD32 eq_set_complexity_level;
+ WORD32 dwnmix_id_count;
+ WORD32 downmix_id[DOWNMIX_ID_COUNT_MAX];
+ WORD32 eq_apply_to_downmix;
+ WORD32 drc_set_id_count;
+ WORD32 drc_set_id[DRC_SET_ID_COUNT_MAX];
+ WORD32 eq_set_purpose;
+ WORD32 depends_on_eq_set_present;
+ WORD32 depends_on_eq_set;
+ WORD32 no_independent_eq_use;
+ WORD32 eq_channel_count;
+ WORD32 eq_ch_group_count;
+ WORD32 eq_ch_group_of_channel[MAX_CHANNEL_COUNT];
+ WORD32 td_filter_cascade_present;
+ ia_td_filter_cascade_struct str_td_filter_cascade;
+ WORD32 subband_gains_present;
+ WORD32 subband_gains_index[EQ_CHANNEL_GROUP_COUNT_MAX];
+ WORD32 eq_transition_duration_present;
+ WORD32 eq_transition_duration;
} ia_eq_instructions_struct;
typedef struct {
- WORD32 drc_config_ext_type[EXT_COUNT_MAX];
- WORD32 ext_bit_size[EXT_COUNT_MAX-1];
-
- WORD32 parametric_drc_present;
- ia_drc_coeff_parametric_drc_struct str_drc_coeff_param_drc;
- WORD32 parametric_drc_instructions_count;
- ia_parametric_drc_instructions_struct str_parametric_drc_instructions[PARAM_DRC_INSTRUCTIONS_COUNT_MAX];
- WORD32 drc_extension_v1_present;
- WORD32 loud_eq_instructions_flag;
- WORD32 loud_eq_instructions_count;
- ia_loud_eq_instructions_struct loud_eq_instructions [LOUD_EQ_INSTRUCTIONS_COUNT_MAX];
- WORD32 eq_flag;
- ia_eq_coeff_struct str_eq_coeff;
- WORD32 eq_instructions_count;
- ia_eq_instructions_struct str_eq_instructions [EQ_INSTRUCTIONS_COUNT_MAX];
+ WORD32 drc_config_ext_type[EXT_COUNT_MAX];
+ WORD32 ext_bit_size[EXT_COUNT_MAX - 1];
+
+ WORD32 parametric_drc_present;
+ ia_drc_coeff_parametric_drc_struct str_drc_coeff_param_drc;
+ WORD32 parametric_drc_instructions_count;
+ ia_parametric_drc_instructions_struct
+ str_parametric_drc_instructions[PARAM_DRC_INSTRUCTIONS_COUNT_MAX];
+ WORD32 drc_extension_v1_present;
+ WORD32 loud_eq_instructions_flag;
+ WORD32 loud_eq_instructions_count;
+ ia_loud_eq_instructions_struct
+ loud_eq_instructions[LOUD_EQ_INSTRUCTIONS_COUNT_MAX];
+ WORD32 eq_flag;
+ ia_eq_coeff_struct str_eq_coeff;
+ WORD32 eq_instructions_count;
+ ia_eq_instructions_struct str_eq_instructions[EQ_INSTRUCTIONS_COUNT_MAX];
} ia_drc_config_ext;
-typedef struct ia_drc_config{
- WORD32 sample_rate_present;
- WORD32 sampling_rate;
- WORD32 dwnmix_instructions_count;
- WORD32 drc_coefficients_drc_count;
- WORD32 drc_instructions_uni_drc_count;
- WORD32 drc_instructions_count_plus;
- WORD32 drc_description_basic_present;
- WORD32 drc_coefficients_basic_count;
- WORD32 drc_instructions_basic_count;
- WORD32 drc_config_ext_present;
- WORD32 apply_drc;
- ia_drc_config_ext str_drc_config_ext;
- ia_drc_coefficients_basic_struct str_drc_coefficients_basic[DRC_COEFF_COUNT_MAX];
- ia_drc_instructions_basic_struct str_drc_instructions_basic[DRC_INSTRUCTIONS_COUNT_MAX];
- ia_uni_drc_coeffs_struct str_p_loc_drc_coefficients_uni_drc[DRC_COEFF_COUNT_MAX];
- ia_drc_instructions_struct str_drc_instruction_str[DRC_INSTRUCTIONS_COUNT_MAX];
- ia_channel_layout_struct channel_layout;
- ia_downmix_instructions_struct dwnmix_instructions[DOWNMIX_INSTRUCTION_COUNT_MAX];
+typedef struct ia_drc_config {
+ WORD32 sample_rate_present;
+ WORD32 sampling_rate;
+ WORD32 dwnmix_instructions_count;
+ WORD32 drc_coefficients_drc_count;
+ WORD32 drc_instructions_uni_drc_count;
+ WORD32 drc_instructions_count_plus;
+ WORD32 drc_description_basic_present;
+ WORD32 drc_coefficients_basic_count;
+ WORD32 drc_instructions_basic_count;
+ WORD32 drc_config_ext_present;
+ WORD32 apply_drc;
+ ia_drc_config_ext str_drc_config_ext;
+ ia_drc_coefficients_basic_struct
+ str_drc_coefficients_basic[DRC_COEFF_COUNT_MAX];
+ ia_drc_instructions_basic_struct
+ str_drc_instructions_basic[DRC_INSTRUCTIONS_COUNT_MAX];
+ ia_uni_drc_coeffs_struct
+ str_p_loc_drc_coefficients_uni_drc[DRC_COEFF_COUNT_MAX];
+ ia_drc_instructions_struct
+ str_drc_instruction_str[DRC_INSTRUCTIONS_COUNT_MAX];
+ ia_channel_layout_struct channel_layout;
+ ia_downmix_instructions_struct
+ dwnmix_instructions[DOWNMIX_INSTRUCTION_COUNT_MAX];
} ia_drc_config;
typedef struct {
- WORD32 loudness_info_set_ext_type[EXT_COUNT_MAX];
- WORD32 ext_bit_size[EXT_COUNT_MAX-1];
+ WORD32 loudness_info_set_ext_type[EXT_COUNT_MAX];
+ WORD32 ext_bit_size[EXT_COUNT_MAX - 1];
} ia_loudness_info_set_ext_struct;
-typedef struct ia_drc_loudness_info_set_struct{
- WORD32 loudness_info_album_count;
- WORD32 loudness_info_count;
- WORD32 loudness_info_set_ext_present;
- ia_loudness_info_struct str_loudness_info_album[LOUDNESS_INFO_COUNT_MAX];
- ia_loudness_info_struct loudness_info[LOUDNESS_INFO_COUNT_MAX];
- ia_loudness_info_set_ext_struct str_loudness_info_set_ext;
+typedef struct ia_drc_loudness_info_set_struct {
+ WORD32 loudness_info_album_count;
+ WORD32 loudness_info_count;
+ WORD32 loudness_info_set_ext_present;
+ ia_loudness_info_struct str_loudness_info_album[LOUDNESS_INFO_COUNT_MAX];
+ ia_loudness_info_struct loudness_info[LOUDNESS_INFO_COUNT_MAX];
+ ia_loudness_info_set_ext_struct str_loudness_info_set_ext;
} ia_drc_loudness_info_set_struct;
typedef struct {
- FLOAT32 loc_db_gain;
- FLOAT32 slope;
- WORD32 time;
+ FLOAT32 loc_db_gain;
+ FLOAT32 slope;
+ WORD32 time;
} ia_node_struct;
typedef struct {
- WORD32 drc_gain_coding_mode;
- WORD32 num_nodes;
- ia_node_struct str_node[NODE_COUNT_MAX];
+ WORD32 drc_gain_coding_mode;
+ WORD32 num_nodes;
+ ia_node_struct str_node[NODE_COUNT_MAX];
} ia_spline_nodes_struct;
typedef struct {
- ia_spline_nodes_struct str_spline_nodes [1];
+ ia_spline_nodes_struct str_spline_nodes[1];
} ia_drc_gain_sequence_struct;
typedef struct {
- WORD32 uni_drc_gain_ext_type[EXT_COUNT_MAX];
- WORD32 ext_bit_size[EXT_COUNT_MAX-1];
+ WORD32 uni_drc_gain_ext_type[EXT_COUNT_MAX];
+ WORD32 ext_bit_size[EXT_COUNT_MAX - 1];
} ia_uni_drc_gain_ext_struct;
-typedef struct ia_drc_gain_struct{
- WORD32 num_drc_gain_sequences;
- ia_drc_gain_sequence_struct drc_gain_sequence[SEQUENCE_COUNT_MAX];
- WORD32 uni_drc_gain_ext_flag;
- ia_uni_drc_gain_ext_struct uni_drc_gain_ext;
+typedef struct ia_drc_gain_struct {
+ WORD32 num_drc_gain_sequences;
+ ia_drc_gain_sequence_struct drc_gain_sequence[SEQUENCE_COUNT_MAX];
+ WORD32 uni_drc_gain_ext_flag;
+ ia_uni_drc_gain_ext_struct uni_drc_gain_ext;
} ia_drc_gain_struct;
typedef struct {
- WORD32 delta_tmin_default;
- WORD32 drc_frame_size;
- WORD32 num_gain_values_max_default;
- WORD32 delay_mode;
- WORD32 lfe_channel_map_count;
- WORD32 lfe_channel_map[MAX_CHANNEL_COUNT];
+ WORD32 delta_tmin_default;
+ WORD32 drc_frame_size;
+ WORD32 num_gain_values_max_default;
+ WORD32 delay_mode;
+ WORD32 lfe_channel_map_count;
+ WORD32 lfe_channel_map[MAX_CHANNEL_COUNT];
} ia_drc_params_bs_dec_struct;
-typedef struct ia_drc_bits_dec_struct
-{
-
- ia_tables_struct tables_default;
- ia_drc_params_bs_dec_struct ia_drc_params_struct;
-
-}ia_drc_bits_dec_struct;
+typedef struct ia_drc_bits_dec_struct {
+ ia_tables_struct tables_default;
+ ia_drc_params_bs_dec_struct ia_drc_params_struct;
+} ia_drc_bits_dec_struct;
#ifdef __cplusplus
}
diff --git a/decoder/drc_src/impd_drc_tables.c b/decoder/drc_src/impd_drc_tables.c
index 849c300..b099b5e 100644
--- a/decoder/drc_src/impd_drc_tables.c
+++ b/decoder/drc_src/impd_drc_tables.c
@@ -28,93 +28,75 @@
#include "impd_drc_rom.h"
WORD32 impd_init_tbls(const WORD32 num_gain_max_values,
- ia_tables_struct* str_tables)
-{
- impd_gen_delta_time_code_tbl (num_gain_max_values,
- str_tables->delta_time_code_table);
- return(0);
+ ia_tables_struct* str_tables) {
+ impd_gen_delta_time_code_tbl(num_gain_max_values,
+ str_tables->delta_time_code_table);
+ return (0);
}
-void impd_get_slope_code_tbl_and_size(ia_slope_code_table_struct const** slope_code_tbl_entry,
- WORD32* num_slope_code_tbl_entries)
-{
- *slope_code_tbl_entry = &(slopeCodeTableEntryBySize[0]);
- *num_slope_code_tbl_entries = kNumSlopeValuesTable;
+void impd_get_slope_code_tbl_and_size(
+ ia_slope_code_table_struct const** slope_code_tbl_entry,
+ WORD32* num_slope_code_tbl_entries) {
+ *slope_code_tbl_entry = &(slopeCodeTableEntryBySize[0]);
+ *num_slope_code_tbl_entries = kNumSlopeValuesTable;
}
-
-void
-impd_get_delta_gain_code_tbl(const WORD32 gain_coding_profile,
- ia_delta_gain_code_table_struct const** delta_time_code_tbl,
- WORD32 *num_entries)
-{
- if (gain_coding_profile==GAIN_CODING_PROFILE_CLIPPING)
- {
- *delta_time_code_tbl = deltaGainCodeTableProfile2BySize;
- *num_entries = kNumDeltaGainValuesTableProfile2;
- }
- else
- {
- *delta_time_code_tbl = deltaGainCodeTableBySize;
- *num_entries = kNumDeltaGainValuesTable;
- }
+void impd_get_delta_gain_code_tbl(
+ const WORD32 gain_coding_profile,
+ ia_delta_gain_code_table_struct const** delta_time_code_tbl,
+ WORD32* num_entries) {
+ if (gain_coding_profile == GAIN_CODING_PROFILE_CLIPPING) {
+ *delta_time_code_tbl = deltaGainCodeTableProfile2BySize;
+ *num_entries = kNumDeltaGainValuesTableProfile2;
+ } else {
+ *delta_time_code_tbl = deltaGainCodeTableBySize;
+ *num_entries = kNumDeltaGainValuesTable;
+ }
}
-void
-impd_gen_delta_time_code_tbl (const WORD32 num_gain_max_values,
- ia_delta_time_code_table_entry_struct* delta_time_code_tbl_item)
-{
- WORD32 n, k;
-
- WORD32 Z = 1;
- while((1<<Z)<2*num_gain_max_values)
- {
- Z++;
- }
-
- delta_time_code_tbl_item[0].size = -1;
- delta_time_code_tbl_item[0].code = -1;
- delta_time_code_tbl_item[0].value = -1;
-
- delta_time_code_tbl_item[1].size = 2;
- delta_time_code_tbl_item[1].code = 0x0;
- delta_time_code_tbl_item[1].value = 1;
- for (n=0; n<4; n++)
- {
- delta_time_code_tbl_item[n+2].size = 4;
- delta_time_code_tbl_item[n+2].code = 0x4 + n;
- delta_time_code_tbl_item[n+2].value = n+2;
- }
- for (n=0; n<8; n++)
- {
- delta_time_code_tbl_item[n+6].size = 5;
- delta_time_code_tbl_item[n+6].code = 0x10 + n;
- delta_time_code_tbl_item[n+6].value = n+6;
- }
-
- k = 2*num_gain_max_values-14+1;
- for (n=0; n<k; n++)
- {
- delta_time_code_tbl_item[n+14].size = 2+Z;
- delta_time_code_tbl_item[n+14].code = (0x3<<Z) + n;
- delta_time_code_tbl_item[n+14].value = n+14;
- }
-
+void impd_gen_delta_time_code_tbl(
+ const WORD32 num_gain_max_values,
+ ia_delta_time_code_table_entry_struct* delta_time_code_tbl_item) {
+ WORD32 n, k;
+
+ WORD32 Z = 1;
+ while ((1 << Z) < 2 * num_gain_max_values) {
+ Z++;
+ }
+
+ delta_time_code_tbl_item[0].size = -1;
+ delta_time_code_tbl_item[0].code = -1;
+ delta_time_code_tbl_item[0].value = -1;
+
+ delta_time_code_tbl_item[1].size = 2;
+ delta_time_code_tbl_item[1].code = 0x0;
+ delta_time_code_tbl_item[1].value = 1;
+ for (n = 0; n < 4; n++) {
+ delta_time_code_tbl_item[n + 2].size = 4;
+ delta_time_code_tbl_item[n + 2].code = 0x4 + n;
+ delta_time_code_tbl_item[n + 2].value = n + 2;
+ }
+ for (n = 0; n < 8; n++) {
+ delta_time_code_tbl_item[n + 6].size = 5;
+ delta_time_code_tbl_item[n + 6].code = 0x10 + n;
+ delta_time_code_tbl_item[n + 6].value = n + 6;
+ }
+
+ k = 2 * num_gain_max_values - 14 + 1;
+ for (n = 0; n < k; n++) {
+ delta_time_code_tbl_item[n + 14].size = 2 + Z;
+ delta_time_code_tbl_item[n + 14].code = (0x3 << Z) + n;
+ delta_time_code_tbl_item[n + 14].value = n + 14;
+ }
}
WORD32
-impd_get_delta_tmin (const WORD32 sampling_rate)
-{
- WORD32 lowerBound = (WORD32) (0.5f + 0.0005f * sampling_rate);
- WORD32 result = 1;
- if (sampling_rate < 1000)
- {
- return(UNEXPECTED_ERROR);
- }
- while (result <= lowerBound) result = result << 1;
- return result;
+impd_get_delta_tmin(const WORD32 sampling_rate) {
+ WORD32 lowerBound = (WORD32)(0.5f + 0.0005f * sampling_rate);
+ WORD32 result = 1;
+ if (sampling_rate < 1000) {
+ return (UNEXPECTED_ERROR);
+ }
+ while (result <= lowerBound) result = result << 1;
+ return result;
}
-
-
-
-
diff --git a/decoder/drc_src/impd_drc_tables.h b/decoder/drc_src/impd_drc_tables.h
index c9a7b4a..7734763 100644
--- a/decoder/drc_src/impd_drc_tables.h
+++ b/decoder/drc_src/impd_drc_tables.h
@@ -20,23 +20,24 @@
#ifndef IMPD_DRC_TABLES_H
#define IMPD_DRC_TABLES_H
-const ia_filter_bank_params_struct normal_cross_freq[FILTER_BANK_PARAMETER_COUNT] = {
- {2.0f/1024.0f, 0.0000373252f, 0.9913600345f},
- {3.0f/1024.0f, 0.0000836207f, 0.9870680830f},
- {4.0f/1024.0f, 0.0001480220f, 0.9827947083f},
- {5.0f/1024.0f, 0.0002302960f, 0.9785398263f},
- {6.0f/1024.0f, 0.0003302134f, 0.9743033527f},
- {2.0f/256.0f, 0.0005820761f, 0.9658852897f},
- {3.0f/256.0f, 0.0012877837f, 0.9492662926f},
- {2.0f/128.0f, 0.0022515827f, 0.9329321561f},
- {3.0f/128.0f, 0.0049030350f, 0.9010958535f},
- {2.0f/64.0f, 0.0084426929f, 0.8703307793f},
- {3.0f/64.0f, 0.0178631928f, 0.8118317459f},
- {2.0f/32.0f, 0.0299545822f, 0.7570763753f},
- {3.0f/32.0f, 0.0604985076f, 0.6574551915f},
- {2.0f/16.0f, 0.0976310729f, 0.5690355937f},
- {3.0f/16.0f, 0.1866943331f, 0.4181633458f},
- {2.0f/8.0f, 0.2928932188f, 0.2928932188f},
+const ia_filter_bank_params_struct
+ normal_cross_freq[FILTER_BANK_PARAMETER_COUNT] = {
+ {2.0f / 1024.0f, 0.0000373252f, 0.9913600345f},
+ {3.0f / 1024.0f, 0.0000836207f, 0.9870680830f},
+ {4.0f / 1024.0f, 0.0001480220f, 0.9827947083f},
+ {5.0f / 1024.0f, 0.0002302960f, 0.9785398263f},
+ {6.0f / 1024.0f, 0.0003302134f, 0.9743033527f},
+ {2.0f / 256.0f, 0.0005820761f, 0.9658852897f},
+ {3.0f / 256.0f, 0.0012877837f, 0.9492662926f},
+ {2.0f / 128.0f, 0.0022515827f, 0.9329321561f},
+ {3.0f / 128.0f, 0.0049030350f, 0.9010958535f},
+ {2.0f / 64.0f, 0.0084426929f, 0.8703307793f},
+ {3.0f / 64.0f, 0.0178631928f, 0.8118317459f},
+ {2.0f / 32.0f, 0.0299545822f, 0.7570763753f},
+ {3.0f / 32.0f, 0.0604985076f, 0.6574551915f},
+ {2.0f / 16.0f, 0.0976310729f, 0.5690355937f},
+ {3.0f / 16.0f, 0.1866943331f, 0.4181633458f},
+ {2.0f / 8.0f, 0.2928932188f, 0.2928932188f},
};
#endif
diff --git a/decoder/drc_src/impd_drc_uni_bitstream_dec_api.h b/decoder/drc_src/impd_drc_uni_bitstream_dec_api.h
index 1c0bfe3..e3cdf4b 100644
--- a/decoder/drc_src/impd_drc_uni_bitstream_dec_api.h
+++ b/decoder/drc_src/impd_drc_uni_bitstream_dec_api.h
@@ -20,45 +20,32 @@
#ifndef IMPD_DRC_UNI_BITSTREAM_DEC_API_H
#define IMPD_DRC_UNI_BITSTREAM_DEC_API_H
-
-WORD32 impd_init_drc_bitstream_dec(ia_drc_bits_dec_struct* p_uni_drc_bs_dec_struct,
- WORD32 sample_rate,
- WORD32 frame_size,
- WORD32 delay_mode,
- WORD32 lfe_channel_map_count,
- WORD32* lfe_channel_map);
-
-WORD32 impd_process_drc_bitstream_dec(ia_drc_bits_dec_struct* p_uni_drc_bs_dec_struct,
- ia_bit_buf_struct* it_bit_buff,
- ia_drc_config* pstr_drc_config,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- UWORD8* bitstream_config,
- WORD32 num_bytes,
- WORD32 num_bits_offset,
- WORD32* num_bits_read);
-
-WORD32 impd_process_drc_bitstream_dec_config(ia_drc_bits_dec_struct* p_uni_drc_bs_dec_struct,
- ia_bit_buf_struct* it_bit_buff,
- ia_drc_config* pstr_drc_config,
- UWORD8* bitstream_config,
- WORD32 num_bytes);
-
-WORD32 impd_process_drc_bitstream_dec_gain(ia_drc_bits_dec_struct* p_uni_drc_bs_dec_struct,
- ia_bit_buf_struct* it_bit_buff,
- ia_drc_config* pstr_drc_config,
- ia_drc_gain_struct* pstr_drc_gain,
- UWORD8* bitstream_gain,
- WORD32 num_bytes,
- WORD32 num_bits_offset,
- WORD32* num_bits_read);
-
-WORD32 impd_process_drc_bitstream_dec_loudness_info_set(ia_drc_bits_dec_struct* p_uni_drc_bs_dec_struct,
- ia_bit_buf_struct* it_bit_buff,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- UWORD8* bitstream_loudness,
- WORD32 num_bytes_loudness
- );
+WORD32 impd_init_drc_bitstream_dec(
+ ia_drc_bits_dec_struct* p_uni_drc_bs_dec_struct, WORD32 sample_rate,
+ WORD32 frame_size, WORD32 delay_mode, WORD32 lfe_channel_map_count,
+ WORD32* lfe_channel_map);
+
+WORD32 impd_process_drc_bitstream_dec(
+ ia_drc_bits_dec_struct* p_uni_drc_bs_dec_struct,
+ ia_bit_buf_struct* it_bit_buff, ia_drc_config* pstr_drc_config,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ UWORD8* bitstream_config, WORD32 num_bytes, WORD32 num_bits_offset,
+ WORD32* num_bits_read);
+
+WORD32 impd_process_drc_bitstream_dec_config(
+ ia_drc_bits_dec_struct* p_uni_drc_bs_dec_struct,
+ ia_bit_buf_struct* it_bit_buff, ia_drc_config* pstr_drc_config,
+ UWORD8* bitstream_config, WORD32 num_bytes);
+
+WORD32 impd_process_drc_bitstream_dec_gain(
+ ia_drc_bits_dec_struct* p_uni_drc_bs_dec_struct,
+ ia_bit_buf_struct* it_bit_buff, ia_drc_config* pstr_drc_config,
+ ia_drc_gain_struct* pstr_drc_gain, UWORD8* bitstream_gain, WORD32 num_bytes,
+ WORD32 num_bits_offset, WORD32* num_bits_read);
+
+WORD32 impd_process_drc_bitstream_dec_loudness_info_set(
+ ia_drc_bits_dec_struct* p_uni_drc_bs_dec_struct,
+ ia_bit_buf_struct* it_bit_buff,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ UWORD8* bitstream_loudness, WORD32 num_bytes_loudness);
#endif
-
-
-
diff --git a/decoder/drc_src/impd_drc_uni_common.h b/decoder/drc_src/impd_drc_uni_common.h
index e59af5d..f661405 100644
--- a/decoder/drc_src/impd_drc_uni_common.h
+++ b/decoder/drc_src/impd_drc_uni_common.h
@@ -21,112 +21,107 @@
#define IMPD_DRC_UNI_COMMON_H
#ifdef __cplusplus
-extern "C"
-{
+extern "C" {
#endif
-#define AMD1_SYNTAX 0
-#define MPEG_D_DRC_EXTENSION_V1 0
-#define AMD1_PARAMETRIC_LIMITER 0
-
-#define MPEG_H_SYNTAX 0
-
-#define EQ_IS_SUPPORTED 1
-
-#define MEASURE_AVERAGE_BITRATE 0
-#define DEBUG_NODES 0
-
-#define DRC_GAIN_DEBUG_FILE 0
-#define DEBUG_BITSTREAM 0
-#define DEBUG_DRC_SELECTION 0
-#define DEBUG_WARNINGS 0
-#define ENABLE_ADDITIONAL_TESTS 1
-
-#define SPEAKER_POS_COUNT_MAX 128
-#define DOWNMIX_COEFF_COUNT_MAX 32*32
-#define MAX_CHANNEL_COUNT 128
-#define BAND_COUNT_MAX 8
-#define SEQUENCE_COUNT_MAX 24
-#define GAIN_SET_COUNT_MAX SEQUENCE_COUNT_MAX
-#define MEASUREMENT_COUNT_MAX 16
-#define DOWNMIX_INSTRUCTION_COUNT_MAX 16
-#define DRC_COEFF_COUNT_MAX 8
-#define DRC_INSTRUCTIONS_COUNT_MAX (DOWNMIX_INSTRUCTION_COUNT_MAX + 20)
-#define LOUDNESS_INFO_COUNT_MAX (DOWNMIX_INSTRUCTION_COUNT_MAX + 20)
-#define AUDIO_CODEC_FRAME_SIZE_MAX 4096
-#define DRC_CODEC_FRAME_SIZE_MAX (AUDIO_CODEC_FRAME_SIZE_MAX/8)
-#define NODE_COUNT_MAX DRC_CODEC_FRAME_SIZE_MAX
-#define CHANNEL_GROUP_COUNT_MAX SEQUENCE_COUNT_MAX
-#define SUB_DRC_COUNT 4
-#define SEL_DRC_COUNT 3
-#define DOWNMIX_ID_COUNT_MAX 8
-#define MAX_SIGNAL_DELAY 4500
-
-
-#define DELAY_MODE_REGULAR_DELAY 0
-#define DELAY_MODE_LOW_DELAY 1
-#define DELAY_MODE_DEFAULT DELAY_MODE_REGULAR_DELAY
-
-#define FEATURE_REQUEST_COUNT_MAX 10
-#define EFFECT_TYPE_REQUEST_COUNT_MAX 10
-
-#define SELECTION_CANDIDATE_COUNT_MAX 32
-
-#define PROC_COMPLETE 1
-#define UNEXPECTED_ERROR 2
-#define PARAM_ERROR 3
-#define EXTERNAL_ERROR 4
-#define ERRORHANDLING 5
-#define BITSTREAM_ERROR 6
-
-#define UNDEFINED_LOUDNESS_VALUE 1000.0f
-#define ID_FOR_BASE_LAYOUT 0x0
-#define ID_FOR_ANY_DOWNMIX 0x7F
-#define ID_FOR_NO_DRC 0x0
-#define ID_FOR_ANY_DRC 0x3F
-#define ID_FOR_ANY_EQ 0x3F
-
-#define LOCATION_MP4_INSTREAM_UNIDRC 0x1
-#define LOCATION_MP4_DYN_RANGE_INFO 0x2
-#define LOCATION_MP4_COMPRESSION_VALUE 0x3
-#define LOCATION_SELECTED LOCATION_MP4_INSTREAM_UNIDRC
-
-#define AUDIO_CODEC_SUBBAND_COUNT_MAX 256
-
-#define SUBBAND_DOMAIN_MODE_OFF 0
-#define SUBBAND_DOMAIN_MODE_QMF64 1
-#define SUBBAND_DOMAIN_MODE_QMF71 2
-#define SUBBAND_DOMAIN_MODE_STFT256 3
-
-#define AUDIO_CODEC_SUBBAND_COUNT_QMF64 64
-#define AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64 64
-#define AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_QMF64 320
-
-#define AUDIO_CODEC_SUBBAND_COUNT_QMF71 71
-#define AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF71 64
-#define AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_QMF71 320+384
-
-#define AUDIO_CODEC_SUBBAND_COUNT_STFT256 256
-#define AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_STFT256 256
-#define AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_STFT256 256
-
-#define MAX_NUM_DOWNMIX_ID_REQUESTS 15
-#define MAX_NUM_DRC_FEATURE_REQUESTS 7
-#define MAX_NUM_DRC_EFFECT_TYPE_REQUESTS 15
+#define AMD1_SYNTAX 0
+#define MPEG_D_DRC_EXTENSION_V1 0
+#define AMD1_PARAMETRIC_LIMITER 0
+
+#define MPEG_H_SYNTAX 0
+
+#define EQ_IS_SUPPORTED 1
+
+#define MEASURE_AVERAGE_BITRATE 0
+#define DEBUG_NODES 0
+
+#define DRC_GAIN_DEBUG_FILE 0
+#define DEBUG_BITSTREAM 0
+#define DEBUG_DRC_SELECTION 0
+#define DEBUG_WARNINGS 0
+#define ENABLE_ADDITIONAL_TESTS 1
+
+#define SPEAKER_POS_COUNT_MAX 128
+#define DOWNMIX_COEFF_COUNT_MAX 32 * 32
+#define MAX_CHANNEL_COUNT 128
+#define BAND_COUNT_MAX 8
+#define SEQUENCE_COUNT_MAX 24
+#define GAIN_SET_COUNT_MAX SEQUENCE_COUNT_MAX
+#define MEASUREMENT_COUNT_MAX 16
+#define DOWNMIX_INSTRUCTION_COUNT_MAX 16
+#define DRC_COEFF_COUNT_MAX 8
+#define DRC_INSTRUCTIONS_COUNT_MAX (DOWNMIX_INSTRUCTION_COUNT_MAX + 20)
+#define LOUDNESS_INFO_COUNT_MAX (DOWNMIX_INSTRUCTION_COUNT_MAX + 20)
+#define AUDIO_CODEC_FRAME_SIZE_MAX 4096
+#define DRC_CODEC_FRAME_SIZE_MAX (AUDIO_CODEC_FRAME_SIZE_MAX / 8)
+#define NODE_COUNT_MAX DRC_CODEC_FRAME_SIZE_MAX
+#define CHANNEL_GROUP_COUNT_MAX SEQUENCE_COUNT_MAX
+#define SUB_DRC_COUNT 4
+#define SEL_DRC_COUNT 3
+#define DOWNMIX_ID_COUNT_MAX 8
+#define MAX_SIGNAL_DELAY 4500
+
+#define DELAY_MODE_REGULAR_DELAY 0
+#define DELAY_MODE_LOW_DELAY 1
+#define DELAY_MODE_DEFAULT DELAY_MODE_REGULAR_DELAY
+
+#define FEATURE_REQUEST_COUNT_MAX 10
+#define EFFECT_TYPE_REQUEST_COUNT_MAX 10
+
+#define SELECTION_CANDIDATE_COUNT_MAX 32
+
+#define PROC_COMPLETE 1
+#define UNEXPECTED_ERROR 2
+#define PARAM_ERROR 3
+#define EXTERNAL_ERROR 4
+#define ERRORHANDLING 5
+#define BITSTREAM_ERROR 6
+
+#define UNDEFINED_LOUDNESS_VALUE 1000.0f
+#define ID_FOR_BASE_LAYOUT 0x0
+#define ID_FOR_ANY_DOWNMIX 0x7F
+#define ID_FOR_NO_DRC 0x0
+#define ID_FOR_ANY_DRC 0x3F
+#define ID_FOR_ANY_EQ 0x3F
+
+#define LOCATION_MP4_INSTREAM_UNIDRC 0x1
+#define LOCATION_MP4_DYN_RANGE_INFO 0x2
+#define LOCATION_MP4_COMPRESSION_VALUE 0x3
+#define LOCATION_SELECTED LOCATION_MP4_INSTREAM_UNIDRC
+
+#define AUDIO_CODEC_SUBBAND_COUNT_MAX 256
+
+#define SUBBAND_DOMAIN_MODE_OFF 0
+#define SUBBAND_DOMAIN_MODE_QMF64 1
+#define SUBBAND_DOMAIN_MODE_QMF71 2
+#define SUBBAND_DOMAIN_MODE_STFT256 3
+
+#define AUDIO_CODEC_SUBBAND_COUNT_QMF64 64
+#define AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF64 64
+#define AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_QMF64 320
+
+#define AUDIO_CODEC_SUBBAND_COUNT_QMF71 71
+#define AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_QMF71 64
+#define AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_QMF71 320 + 384
+
+#define AUDIO_CODEC_SUBBAND_COUNT_STFT256 256
+#define AUDIO_CODEC_SUBBAND_DOWNSAMPLING_FACTOR_STFT256 256
+#define AUDIO_CODEC_SUBBAND_ANALYSE_DELAY_STFT256 256
+
+#define MAX_NUM_DOWNMIX_ID_REQUESTS 15
+#define MAX_NUM_DRC_FEATURE_REQUESTS 7
+#define MAX_NUM_DRC_EFFECT_TYPE_REQUESTS 15
#define MAX_SIGNATURE_DATA_LENGTH_PLUS_ONE 256
-#define EXT_COUNT_MAX 2
-#define UNIDRCGAINEXT_TERM 0x0
-#define UNIDRCLOUDEXT_TERM 0x0
-#define UNIDRCCONFEXT_TERM 0x0
-#define UNIDRCINTERFACEEXT_TERM 0x0
+#define EXT_COUNT_MAX 2
+#define UNIDRCGAINEXT_TERM 0x0
+#define UNIDRCLOUDEXT_TERM 0x0
+#define UNIDRCCONFEXT_TERM 0x0
+#define UNIDRCINTERFACEEXT_TERM 0x0
+#define MAXPACKETLOSSTIME 2.5f
-
-
-#define MAXPACKETLOSSTIME 2.5f
-
-#define SLOPE_FACTOR_DB_TO_LINEAR 0.1151f
+#define SLOPE_FACTOR_DB_TO_LINEAR 0.1151f
#ifndef min
#define min(a, b) ((a) < (b) ? (a) : (b))
@@ -139,27 +134,25 @@ extern "C"
#define bool WORD32
#endif
-typedef struct ia_drc_sel_proc_output_struct
-{
- FLOAT32 output_peak_level_db;
- FLOAT32 loudness_normalization_gain_db;
- FLOAT32 output_loudness;
-
- WORD32 sel_drc_set_ids[SUB_DRC_COUNT];
- WORD32 sel_downmix_ids[SUB_DRC_COUNT];
- WORD32 num_sel_drc_sets;
-
- WORD32 active_downmix_id;
- WORD32 base_channel_count;
- WORD32 target_channel_count;
- WORD32 target_layout;
- WORD32 downmix_matrix_present;
- FLOAT32 downmix_matrix[MAX_CHANNEL_COUNT][MAX_CHANNEL_COUNT];
-
- FLOAT32 boost;
- FLOAT32 compress;
- WORD32 drc_characteristic_target;
-
+typedef struct ia_drc_sel_proc_output_struct {
+ FLOAT32 output_peak_level_db;
+ FLOAT32 loudness_normalization_gain_db;
+ FLOAT32 output_loudness;
+
+ WORD32 sel_drc_set_ids[SUB_DRC_COUNT];
+ WORD32 sel_downmix_ids[SUB_DRC_COUNT];
+ WORD32 num_sel_drc_sets;
+
+ WORD32 active_downmix_id;
+ WORD32 base_channel_count;
+ WORD32 target_channel_count;
+ WORD32 target_layout;
+ WORD32 downmix_matrix_present;
+ FLOAT32 downmix_matrix[MAX_CHANNEL_COUNT][MAX_CHANNEL_COUNT];
+
+ FLOAT32 boost;
+ FLOAT32 compress;
+ WORD32 drc_characteristic_target;
} ia_drc_sel_proc_output_struct;
diff --git a/decoder/drc_src/impd_drc_uni_dec.h b/decoder/drc_src/impd_drc_uni_dec.h
index 3370068..6004418 100644
--- a/decoder/drc_src/impd_drc_uni_dec.h
+++ b/decoder/drc_src/impd_drc_uni_dec.h
@@ -21,22 +21,18 @@
#define IMPD_DRC_UNI_DEC_H
#ifdef __cplusplus
-extern "C"
-{
+extern "C" {
#endif
-WORD32 impd_select_drc_coefficients(ia_drc_config* drc_config,
- ia_uni_drc_coeffs_struct** drc_coefficients_drc,
- WORD32* drc_coefficients_selected);
+WORD32 impd_select_drc_coefficients(
+ ia_drc_config* drc_config, ia_uni_drc_coeffs_struct** drc_coefficients_drc,
+ WORD32* drc_coefficients_selected);
-WORD32 impd_init_selected_drc_set(ia_drc_config* drc_config,
- ia_drc_params_struct* ia_drc_params_struct,
- WORD32 audio_num_chan,
- WORD32 drc_set_id_selected,
- WORD32 downmix_id_selected,
- ia_filter_banks_struct* ia_filter_banks_struct,
- ia_overlap_params_struct* pstr_overlap_params
- );
+WORD32 impd_init_selected_drc_set(
+ ia_drc_config* drc_config, ia_drc_params_struct* ia_drc_params_struct,
+ WORD32 audio_num_chan, WORD32 drc_set_id_selected,
+ WORD32 downmix_id_selected, ia_filter_banks_struct* ia_filter_banks_struct,
+ ia_overlap_params_struct* pstr_overlap_params);
#ifdef __cplusplus
}
diff --git a/decoder/drc_src/impd_drc_uni_eq.h b/decoder/drc_src/impd_drc_uni_eq.h
index d83521f..faabf48 100644
--- a/decoder/drc_src/impd_drc_uni_eq.h
+++ b/decoder/drc_src/impd_drc_uni_eq.h
@@ -23,24 +23,23 @@
#ifndef COMPILE_FOR_DRC_ENCODER
#endif
-#define EQ_CHANNEL_COUNT_MAX 8
-#define EQ_AUDIO_DELAY_MAX 1024
-#define EQ_FIR_FILTER_SIZE_MAX 128
-#define EQ_SUBBAND_COUNT_MAX 256
-#define EQ_INTERMEDIATE_2ND_ORDER_PARAMS_COUNT_MAX 32
-#define EQ_INTERMEDIATE_PARAMETER_COUNT_MAX 32
-#define EQ_FILTER_SECTION_COUNT_MAX 8
-#define EQ_FILTER_ELEMENT_COUNT_MAX 4
-#define EQ_FILTER_COUNT_MAX 4
-#define MATCHING_PHASE_FILTER_COUNT_MAX 32
+#define EQ_CHANNEL_COUNT_MAX 8
+#define EQ_AUDIO_DELAY_MAX 1024
+#define EQ_FIR_FILTER_SIZE_MAX 128
+#define EQ_SUBBAND_COUNT_MAX 256
+#define EQ_INTERMEDIATE_2ND_ORDER_PARAMS_COUNT_MAX 32
+#define EQ_INTERMEDIATE_PARAMETER_COUNT_MAX 32
+#define EQ_FILTER_SECTION_COUNT_MAX 8
+#define EQ_FILTER_ELEMENT_COUNT_MAX 4
+#define EQ_FILTER_COUNT_MAX 4
+#define MATCHING_PHASE_FILTER_COUNT_MAX 32
-#define EQ_FILTER_DOMAIN_NONE 0
-#define EQ_FILTER_DOMAIN_TIME (1<<0)
-#define EQ_FILTER_DOMAIN_SUBBAND (1<<1)
+#define EQ_FILTER_DOMAIN_NONE 0
+#define EQ_FILTER_DOMAIN_TIME (1 << 0)
+#define EQ_FILTER_DOMAIN_SUBBAND (1 << 1)
#ifdef __cplusplus
-extern "C"
-{
+extern "C" {
#endif
#ifdef __cplusplus
diff --git a/decoder/drc_src/impd_drc_uni_gain_dec.h b/decoder/drc_src/impd_drc_uni_gain_dec.h
index 1137db4..918cc17 100644
--- a/decoder/drc_src/impd_drc_uni_gain_dec.h
+++ b/decoder/drc_src/impd_drc_uni_gain_dec.h
@@ -20,115 +20,93 @@
#ifndef IMPD_DRC_UNI_GAIN_DEC_H
#define IMPD_DRC_UNI_GAIN_DEC_H
-
-
-
-
#ifdef __cplusplus
-extern "C"
-{
+extern "C" {
#endif
typedef struct {
- ia_node_struct str_node;
- ia_node_struct prev_node;
- FLOAT32 lpcm_gains[2 * AUDIO_CODEC_FRAME_SIZE_MAX + MAX_SIGNAL_DELAY];
+ ia_node_struct str_node;
+ ia_node_struct prev_node;
+ FLOAT32 lpcm_gains[2 * AUDIO_CODEC_FRAME_SIZE_MAX + MAX_SIGNAL_DELAY];
} ia_interp_buf_struct;
typedef struct {
#if DRC_GAIN_DEBUG_FILE
- FILE* f_gain_debug;
+ FILE* f_gain_debug;
#endif
- WORD32 buf_interpolation_count;
- ia_interp_buf_struct* buf_interpolation;
+ WORD32 buf_interpolation_count;
+ ia_interp_buf_struct* buf_interpolation;
} ia_gain_buffer_struct;
typedef struct {
- ia_gain_buffer_struct pstr_gain_buf[SEL_DRC_COUNT];
+ ia_gain_buffer_struct pstr_gain_buf[SEL_DRC_COUNT];
} ia_drc_gain_buffers_struct;
typedef struct {
- WORD32 gain_interpolation_type;
- WORD32 gain_modification_flag;
- WORD32 ducking_flag;
- WORD32 clipping_flag;
- ia_ducking_modifiers_struct* pstr_ducking_modifiers;
- ia_gain_modifiers_struct* pstr_gain_modifiers;
- WORD32 limiter_peak_target_present;
- FLOAT32 limiter_peak_target;
- FLOAT32 loudness_normalization_gain_db;
- WORD32 delta_tmin;
- WORD32 characteristic_index;
- FLOAT32 compress;
- FLOAT32 boost;
+ WORD32 gain_interpolation_type;
+ WORD32 gain_modification_flag;
+ WORD32 ducking_flag;
+ WORD32 clipping_flag;
+ ia_ducking_modifiers_struct* pstr_ducking_modifiers;
+ ia_gain_modifiers_struct* pstr_gain_modifiers;
+ WORD32 limiter_peak_target_present;
+ FLOAT32 limiter_peak_target;
+ FLOAT32 loudness_normalization_gain_db;
+ WORD32 delta_tmin;
+ WORD32 characteristic_index;
+ FLOAT32 compress;
+ FLOAT32 boost;
} ia_interp_params_struct;
-
typedef struct {
- WORD32 drc_instructions_index;
- WORD32 drc_coeff_idx;
- WORD32 dwnmix_instructions_index;
+ WORD32 drc_instructions_index;
+ WORD32 drc_coeff_idx;
+ WORD32 dwnmix_instructions_index;
} ia_sel_drc_struct;
typedef struct {
- WORD32 sample_rate;
- WORD32 delta_tmin_default;
- WORD32 drc_frame_size;
- WORD32 delay_mode;
- WORD32 sub_band_domain_mode;
- WORD32 gain_delay_samples;
- WORD32 audio_delay_samples;
- WORD32 drc_set_counter;
- WORD32 multiband_sel_drc_idx;
-
- ia_sel_drc_struct sel_drc_array[SEL_DRC_COUNT];
+ WORD32 sample_rate;
+ WORD32 delta_tmin_default;
+ WORD32 drc_frame_size;
+ WORD32 delay_mode;
+ WORD32 sub_band_domain_mode;
+ WORD32 gain_delay_samples;
+ WORD32 audio_delay_samples;
+ WORD32 drc_set_counter;
+ WORD32 multiband_sel_drc_idx;
+
+ ia_sel_drc_struct sel_drc_array[SEL_DRC_COUNT];
} ia_drc_params_struct;
WORD32
-impd_gain_buf_init(WORD32 index,
- WORD32 gain_element_count,
- WORD32 drc_frame_size,
- ia_gain_buffer_struct* pstr_gain_buf);
+impd_gain_buf_init(WORD32 index, WORD32 gain_element_count,
+ WORD32 drc_frame_size, ia_gain_buffer_struct* pstr_gain_buf);
WORD32
-impd_advance_buf(WORD32 drc_frame_size,
- ia_gain_buffer_struct* pstr_gain_buf);
-
+impd_advance_buf(WORD32 drc_frame_size, ia_gain_buffer_struct* pstr_gain_buf);
WORD32
-impd_map_gain (
- FLOAT32 gain_in_db,
- FLOAT32* gain_out_db);
+impd_map_gain(FLOAT32 gain_in_db, FLOAT32* gain_out_db);
WORD32
-impd_conv_to_linear_domain (ia_interp_params_struct* interp_params_str,
- WORD32 drc_band,
- FLOAT32 loc_db_gain,
- FLOAT32 in_param_db_slope,
- FLOAT32* out_param_lin_gain,
- FLOAT32* out_param_lin_slope);
+impd_conv_to_linear_domain(ia_interp_params_struct* interp_params_str,
+ WORD32 drc_band, FLOAT32 loc_db_gain,
+ FLOAT32 in_param_db_slope,
+ FLOAT32* out_param_lin_gain,
+ FLOAT32* out_param_lin_slope);
WORD32
impd_interpolate_drc_gain(ia_interp_params_struct* interp_params_str,
- WORD32 drc_band,
- WORD32 gain_step_tdomain,
- FLOAT32 gain0,
- FLOAT32 gain1,
- FLOAT32 slope0,
- FLOAT32 slope1,
- FLOAT32* result);
+ WORD32 drc_band, WORD32 gain_step_tdomain,
+ FLOAT32 gain0, FLOAT32 gain1, FLOAT32 slope0,
+ FLOAT32 slope1, FLOAT32* result);
WORD32
-impd_concatenate_segments(WORD32 drc_frame_size,
- WORD32 drc_band,
- ia_interp_params_struct* interp_params_str,
- ia_spline_nodes_struct* str_spline_nodes,
- ia_interp_buf_struct* buf_interpolation);
-
-
-
-
+impd_concatenate_segments(WORD32 drc_frame_size, WORD32 drc_band,
+ ia_interp_params_struct* interp_params_str,
+ ia_spline_nodes_struct* str_spline_nodes,
+ ia_interp_buf_struct* buf_interpolation);
#ifdef __cplusplus
}
diff --git a/decoder/drc_src/impd_drc_uni_interface.h b/decoder/drc_src/impd_drc_uni_interface.h
index 222a3e3..afeedcd 100644
--- a/decoder/drc_src/impd_drc_uni_interface.h
+++ b/decoder/drc_src/impd_drc_uni_interface.h
@@ -20,97 +20,97 @@
#ifndef IMPD_DRC_UNI_INTERFACE_H
#define IMPD_DRC_UNI_INTERFACE_H
-
typedef struct {
- WORD32 ext_size_bits;
- WORD32 ext_bit_size;
- WORD32 uni_drc_interface_ext_type;
+ WORD32 ext_size_bits;
+ WORD32 ext_bit_size;
+ WORD32 uni_drc_interface_ext_type;
} ia_specific_interface_extension_struct;
typedef struct {
- WORD32 interface_ext_count;
- ia_specific_interface_extension_struct specific_interface_ext[EXT_COUNT_MAX];
+ WORD32 interface_ext_count;
+ ia_specific_interface_extension_struct specific_interface_ext[EXT_COUNT_MAX];
} ia_drc_uni_interface_ext_struct;
typedef struct {
- WORD32 change_compress;
- WORD32 change_boost;
- FLOAT32 compress;
- FLOAT32 boost;
- WORD32 change_drc_characteristic_target;
- WORD32 drc_characteristic_target;
+ WORD32 change_compress;
+ WORD32 change_boost;
+ FLOAT32 compress;
+ FLOAT32 boost;
+ WORD32 change_drc_characteristic_target;
+ WORD32 drc_characteristic_target;
} ia_drc_parameter_interface_struct;
typedef struct {
- WORD32 dynamic_range_control_on;
- WORD32 num_drc_feature_requests;
- WORD32 drc_feature_req_type[MAX_NUM_DRC_FEATURE_REQUESTS];
- WORD32 requested_num_drc_effects[MAX_NUM_DRC_FEATURE_REQUESTS];
- WORD32 desired_num_drc_effects_of_requested[MAX_NUM_DRC_FEATURE_REQUESTS];
- WORD32 requested_drc_effect_type[MAX_NUM_DRC_FEATURE_REQUESTS][MAX_NUM_DRC_EFFECT_TYPE_REQUESTS];
- WORD32 requested_dyn_rng_measurement_type[MAX_NUM_DRC_FEATURE_REQUESTS];
- WORD32 requested_dyn_range_is_single_val_flag[MAX_NUM_DRC_FEATURE_REQUESTS];
- FLOAT32 requested_dyn_range_value[MAX_NUM_DRC_FEATURE_REQUESTS];
- FLOAT32 requested_dyn_range_min_val[MAX_NUM_DRC_FEATURE_REQUESTS];
- FLOAT32 requested_dyn_range_max_val[MAX_NUM_DRC_FEATURE_REQUESTS];
- WORD32 requested_drc_characteristic[MAX_NUM_DRC_FEATURE_REQUESTS];
+ WORD32 dynamic_range_control_on;
+ WORD32 num_drc_feature_requests;
+ WORD32 drc_feature_req_type[MAX_NUM_DRC_FEATURE_REQUESTS];
+ WORD32 requested_num_drc_effects[MAX_NUM_DRC_FEATURE_REQUESTS];
+ WORD32 desired_num_drc_effects_of_requested[MAX_NUM_DRC_FEATURE_REQUESTS];
+ WORD32 requested_drc_effect_type[MAX_NUM_DRC_FEATURE_REQUESTS]
+ [MAX_NUM_DRC_EFFECT_TYPE_REQUESTS];
+ WORD32 requested_dyn_rng_measurement_type[MAX_NUM_DRC_FEATURE_REQUESTS];
+ WORD32 requested_dyn_range_is_single_val_flag[MAX_NUM_DRC_FEATURE_REQUESTS];
+ FLOAT32 requested_dyn_range_value[MAX_NUM_DRC_FEATURE_REQUESTS];
+ FLOAT32 requested_dyn_range_min_val[MAX_NUM_DRC_FEATURE_REQUESTS];
+ FLOAT32 requested_dyn_range_max_val[MAX_NUM_DRC_FEATURE_REQUESTS];
+ WORD32 requested_drc_characteristic[MAX_NUM_DRC_FEATURE_REQUESTS];
} ia_dyn_rng_ctrl_interface_struct;
typedef struct {
- WORD32 album_mode;
- WORD32 peak_limiter;
- WORD32 change_loudness_deviation_max;
- WORD32 loudness_deviation_max;
- WORD32 change_loudness_measur_method;
- WORD32 loudness_measurement_method;
- WORD32 change_loudness_measur_system;
- WORD32 loudness_measurement_system;
- WORD32 change_loudness_measur_pre_proc;
- WORD32 loudness_measurement_pre_proc;
- WORD32 change_device_cut_off_freq;
- WORD32 device_cut_off_frequency;
- WORD32 change_loudness_norm_gain_db_max;
- FLOAT32 loudness_norm_gain_db_max;
- WORD32 change_loudness_norm_gain_modification_db;
- FLOAT32 loudness_norm_gain_modification_db;
- WORD32 change_output_peak_level_max;
- FLOAT32 output_peak_level_max;
+ WORD32 album_mode;
+ WORD32 peak_limiter;
+ WORD32 change_loudness_deviation_max;
+ WORD32 loudness_deviation_max;
+ WORD32 change_loudness_measur_method;
+ WORD32 loudness_measurement_method;
+ WORD32 change_loudness_measur_system;
+ WORD32 loudness_measurement_system;
+ WORD32 change_loudness_measur_pre_proc;
+ WORD32 loudness_measurement_pre_proc;
+ WORD32 change_device_cut_off_freq;
+ WORD32 device_cut_off_frequency;
+ WORD32 change_loudness_norm_gain_db_max;
+ FLOAT32 loudness_norm_gain_db_max;
+ WORD32 change_loudness_norm_gain_modification_db;
+ FLOAT32 loudness_norm_gain_modification_db;
+ WORD32 change_output_peak_level_max;
+ FLOAT32 output_peak_level_max;
} ia_loudness_norm_parameter_interface_struct;
typedef struct {
- WORD32 loudness_normalization_on;
- FLOAT32 target_loudness;
+ WORD32 loudness_normalization_on;
+ FLOAT32 target_loudness;
} ia_loudness_norm_ctrl_interface_struct;
typedef struct {
- WORD32 target_config_request_type;
- WORD32 num_downmix_id_requests;
- WORD32 requested_dwnmix_id[MAX_NUM_DOWNMIX_ID_REQUESTS];
- WORD32 requested_target_layout;
- WORD32 requested_target_ch_count;
+ WORD32 target_config_request_type;
+ WORD32 num_downmix_id_requests;
+ WORD32 requested_dwnmix_id[MAX_NUM_DOWNMIX_ID_REQUESTS];
+ WORD32 requested_target_layout;
+ WORD32 requested_target_ch_count;
} ia_system_interface_struct;
typedef struct {
- WORD32 interface_signat_type;
- WORD32 interface_signat_data_len;
- UWORD32 interface_signat_data[MAX_SIGNATURE_DATA_LENGTH_PLUS_ONE*8];
+ WORD32 interface_signat_type;
+ WORD32 interface_signat_data_len;
+ UWORD32 interface_signat_data[MAX_SIGNATURE_DATA_LENGTH_PLUS_ONE * 8];
} ia_drc_uni_interface_signat_struct;
-typedef struct ia_drc_interface_struct{
- WORD32 interface_signat_flag;
- WORD32 system_interface_flag;
- WORD32 loudness_norm_ctrl_interface_flag;
- WORD32 loudness_norm_parameter_interface_flag;
- WORD32 drc_interface_flag;
- WORD32 drc_parameter_interface_flag;
- WORD32 drc_uni_interface_ext_flag;
- ia_drc_uni_interface_signat_struct drc_uni_interface_signature;
- ia_system_interface_struct system_interface;
- ia_loudness_norm_ctrl_interface_struct loudness_norm_ctrl_interface;
- ia_loudness_norm_parameter_interface_struct loudness_norm_param_interface;
- ia_dyn_rng_ctrl_interface_struct drc_ctrl_interface;
- ia_drc_parameter_interface_struct drc_parameter_interface;
- ia_drc_uni_interface_ext_struct drc_uni_interface_ext;
+typedef struct ia_drc_interface_struct {
+ WORD32 interface_signat_flag;
+ WORD32 system_interface_flag;
+ WORD32 loudness_norm_ctrl_interface_flag;
+ WORD32 loudness_norm_parameter_interface_flag;
+ WORD32 drc_interface_flag;
+ WORD32 drc_parameter_interface_flag;
+ WORD32 drc_uni_interface_ext_flag;
+ ia_drc_uni_interface_signat_struct drc_uni_interface_signature;
+ ia_system_interface_struct system_interface;
+ ia_loudness_norm_ctrl_interface_struct loudness_norm_ctrl_interface;
+ ia_loudness_norm_parameter_interface_struct loudness_norm_param_interface;
+ ia_dyn_rng_ctrl_interface_struct drc_ctrl_interface;
+ ia_drc_parameter_interface_struct drc_parameter_interface;
+ ia_drc_uni_interface_ext_struct drc_uni_interface_ext;
} ia_drc_interface_struct;
#endif
diff --git a/decoder/drc_src/impd_drc_uni_loud_eq.h b/decoder/drc_src/impd_drc_uni_loud_eq.h
index 4f85f81..5145a23 100644
--- a/decoder/drc_src/impd_drc_uni_loud_eq.h
+++ b/decoder/drc_src/impd_drc_uni_loud_eq.h
@@ -20,10 +20,8 @@
#ifndef IMPD_DRC_UNI_LOUD_EQ_H
#define IMPD_DRC_UNI_LOUD_EQ_H
-
#ifdef __cplusplus
-extern "C"
-{
+extern "C" {
#endif
#ifdef __cplusplus
diff --git a/decoder/drc_src/impd_drc_uni_multi_band.h b/decoder/drc_src/impd_drc_uni_multi_band.h
index 0b60ee6..b380db8 100644
--- a/decoder/drc_src/impd_drc_uni_multi_band.h
+++ b/decoder/drc_src/impd_drc_uni_multi_band.h
@@ -20,51 +20,45 @@
#ifndef IMPD_DRC_UNI_MULTI_BAND_H
#define IMPD_DRC_UNI_MULTI_BAND_H
-#define DRC_SUBBAND_COUNT_WITH_AUDIO_CODEC_FILTERBANK_MAX FILTER_BANK_PARAMETER_COUNT
+#define DRC_SUBBAND_COUNT_WITH_AUDIO_CODEC_FILTERBANK_MAX \
+ FILTER_BANK_PARAMETER_COUNT
#ifdef __cplusplus
-extern "C"
-{
+extern "C" {
#endif
typedef struct {
- FLOAT32 overlap_weight[AUDIO_CODEC_SUBBAND_COUNT_MAX];
+ FLOAT32 overlap_weight[AUDIO_CODEC_SUBBAND_COUNT_MAX];
} ia_band_overlap_params_struct;
typedef struct {
- ia_band_overlap_params_struct str_band_overlap_params[BAND_COUNT_MAX];
+ ia_band_overlap_params_struct str_band_overlap_params[BAND_COUNT_MAX];
} ia_group_overlap_params_struct;
typedef struct {
- ia_group_overlap_params_struct str_group_overlap_params[CHANNEL_GROUP_COUNT_MAX];
+ ia_group_overlap_params_struct
+ str_group_overlap_params[CHANNEL_GROUP_COUNT_MAX];
} ia_overlap_params_struct;
-
-
WORD32
-impd_fcenter_norm_sb_init(WORD32 num_subbands,
- FLOAT32* fcenter_norm_subband);
+impd_fcenter_norm_sb_init(WORD32 num_subbands, FLOAT32* fcenter_norm_subband);
WORD32
-impd_generate_slope (WORD32 num_subbands,
- FLOAT32* fcenter_norm_subband,
- FLOAT32 fcross_norm_lo,
- FLOAT32 fcross_norm_hi,
- FLOAT32* response);
+impd_generate_slope(WORD32 num_subbands, FLOAT32* fcenter_norm_subband,
+ FLOAT32 fcross_norm_lo, FLOAT32 fcross_norm_hi,
+ FLOAT32* response);
WORD32
-impd_generate_overlap_weights (WORD32 num_drc_bands,
- WORD32 drc_band_type,
- ia_gain_params_struct* gain_params,
- WORD32 dec_subband_count,
- ia_group_overlap_params_struct* pstr_group_overlap_params);
+impd_generate_overlap_weights(
+ WORD32 num_drc_bands, WORD32 drc_band_type,
+ ia_gain_params_struct* gain_params, WORD32 dec_subband_count,
+ ia_group_overlap_params_struct* pstr_group_overlap_params);
WORD32
-impd_init_overlap_weight ( ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc,
- ia_drc_instructions_struct* str_drc_instruction_str,
- WORD32 sub_band_domain_mode,
- ia_overlap_params_struct* pstr_overlap_params);
-
+impd_init_overlap_weight(
+ ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc,
+ ia_drc_instructions_struct* str_drc_instruction_str,
+ WORD32 sub_band_domain_mode, ia_overlap_params_struct* pstr_overlap_params);
#ifdef __cplusplus
}
diff --git a/decoder/drc_src/impd_drc_uni_parser.h b/decoder/drc_src/impd_drc_uni_parser.h
index 7713304..d2e6dd4 100644
--- a/decoder/drc_src/impd_drc_uni_parser.h
+++ b/decoder/drc_src/impd_drc_uni_parser.h
@@ -22,86 +22,77 @@
WORD32
impd_dec_ducking_scaling(ia_bit_buf_struct* it_bit_buff,
- WORD32* ducking_scaling_flag,
- FLOAT32* ducking_scaling);
+ WORD32* ducking_scaling_flag,
+ FLOAT32* ducking_scaling);
WORD32
-impd_parse_loudness_info(ia_bit_buf_struct* it_bit_buff,
- WORD32 version,
- ia_loudness_info_struct* loudness_info);
-
+impd_parse_loudness_info(ia_bit_buf_struct* it_bit_buff, WORD32 version,
+ ia_loudness_info_struct* loudness_info);
WORD32
-impd_parse_loudness_info_set_ext(ia_bit_buf_struct* it_bit_buff,
- ia_drc_loudness_info_set_struct* loudness_info_set);
+impd_parse_loudness_info_set_ext(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_drc_loudness_info_set_struct* loudness_info_set);
WORD32
-impd_sel_drc_coeff(ia_drc_config* drc_config,
- WORD32 location,
- ia_uni_drc_coeffs_struct** str_p_loc_drc_coefficients_uni_drc);
+impd_sel_drc_coeff(
+ ia_drc_config* drc_config, WORD32 location,
+ ia_uni_drc_coeffs_struct** str_p_loc_drc_coefficients_uni_drc);
WORD32
-impd_drc_parse_instructions_basic(ia_bit_buf_struct* it_bit_buff,
- ia_drc_config* drc_config,
- ia_drc_instructions_basic_struct* str_drc_instructions_basic);
+impd_drc_parse_instructions_basic(
+ ia_bit_buf_struct* it_bit_buff, ia_drc_config* drc_config,
+ ia_drc_instructions_basic_struct* str_drc_instructions_basic);
WORD32
-impd_parse_drc_instructions_uni_drc(ia_bit_buf_struct* it_bit_buff,
- WORD32 version,
- ia_drc_config* drc_config,
- ia_channel_layout_struct* channel_layout,
- ia_drc_params_bs_dec_struct* ia_drc_params_struct,
- ia_drc_instructions_struct* str_drc_instruction_str);
-
+impd_parse_drc_instructions_uni_drc(
+ ia_bit_buf_struct* it_bit_buff, WORD32 version, ia_drc_config* drc_config,
+ ia_channel_layout_struct* channel_layout,
+ ia_drc_params_bs_dec_struct* ia_drc_params_struct,
+ ia_drc_instructions_struct* str_drc_instruction_str);
WORD32
-impd_parse_gain_set_params(ia_bit_buf_struct* it_bit_buff,
- WORD32 version,
- WORD32* gain_seq_idx,
- ia_gain_set_params_struct* gain_set_params);
+impd_parse_gain_set_params(ia_bit_buf_struct* it_bit_buff, WORD32 version,
+ WORD32* gain_seq_idx,
+ ia_gain_set_params_struct* gain_set_params);
WORD32
-impd_drc_parse_coeff(ia_bit_buf_struct* it_bit_buff,
- WORD32 version,
- ia_drc_params_bs_dec_struct* ia_drc_params_struct,
- ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc);
+impd_drc_parse_coeff(
+ ia_bit_buf_struct* it_bit_buff, WORD32 version,
+ ia_drc_params_bs_dec_struct* ia_drc_params_struct,
+ ia_uni_drc_coeffs_struct* str_p_loc_drc_coefficients_uni_drc);
WORD32
-impd_parse_dwnmix_instructions(ia_bit_buf_struct* it_bit_buff,
- WORD32 version,
- ia_drc_params_bs_dec_struct* ia_drc_params_struct,
- ia_channel_layout_struct* channel_layout,
- ia_downmix_instructions_struct* dwnmix_instructions);
-
+impd_parse_dwnmix_instructions(
+ ia_bit_buf_struct* it_bit_buff, WORD32 version,
+ ia_drc_params_bs_dec_struct* ia_drc_params_struct,
+ ia_channel_layout_struct* channel_layout,
+ ia_downmix_instructions_struct* dwnmix_instructions);
WORD32
-impd_parse_drc_config(
- ia_bit_buf_struct* it_bit_buff,
- ia_drc_params_bs_dec_struct* ia_drc_params_struct,
- ia_drc_config* drc_config
- );
+impd_parse_drc_config(ia_bit_buf_struct* it_bit_buff,
+ ia_drc_params_bs_dec_struct* ia_drc_params_struct,
+ ia_drc_config* drc_config);
WORD32
-impd_parse_loudness_info_set(ia_bit_buf_struct* it_bit_buff,
- ia_drc_params_bs_dec_struct* ia_drc_params_struct,
- ia_drc_loudness_info_set_struct* loudness_info_set);
+impd_parse_loudness_info_set(
+ ia_bit_buf_struct* it_bit_buff,
+ ia_drc_params_bs_dec_struct* ia_drc_params_struct,
+ ia_drc_loudness_info_set_struct* loudness_info_set);
WORD32
-impd_parse_drc_gain_sequence(
- ia_bit_buf_struct* it_bit_buff,
- ia_drc_bits_dec_struct *pstr_drc_uni_bs_dec,
- ia_gain_set_params_struct* gain_set_params,
- ia_drc_gain_sequence_struct* drc_gain_sequence);
+impd_parse_drc_gain_sequence(ia_bit_buf_struct* it_bit_buff,
+ ia_drc_bits_dec_struct* pstr_drc_uni_bs_dec,
+ ia_gain_set_params_struct* gain_set_params,
+ ia_drc_gain_sequence_struct* drc_gain_sequence);
WORD32
impd_parse_uni_drc_gain_ext(ia_bit_buf_struct* it_bit_buff,
- ia_uni_drc_gain_ext_struct* uni_drc_gain_ext);
-
-WORD32 impd_drc_uni_gain_read(
- ia_bit_buf_struct* it_bit_buff,
- ia_drc_bits_dec_struct *pstr_drc_uni_bs_dec,
- ia_drc_config* drc_config,
- ia_drc_gain_struct* pstr_uni_drc_gain);
+ ia_uni_drc_gain_ext_struct* uni_drc_gain_ext);
+WORD32 impd_drc_uni_gain_read(ia_bit_buf_struct* it_bit_buff,
+ ia_drc_bits_dec_struct* pstr_drc_uni_bs_dec,
+ ia_drc_config* drc_config,
+ ia_drc_gain_struct* pstr_uni_drc_gain);
#endif
diff --git a/decoder/drc_src/impd_drc_uni_process_audio.h b/decoder/drc_src/impd_drc_uni_process_audio.h
index da57588..d5a8266 100644
--- a/decoder/drc_src/impd_drc_uni_process_audio.h
+++ b/decoder/drc_src/impd_drc_uni_process_audio.h
@@ -21,37 +21,32 @@
#define IMPD_DRC_UNI_PROCESS_AUDIO_H
#ifdef __cplusplus
-extern "C"
-{
+extern "C" {
#endif
typedef struct {
- WORD32 multiband_audio_sig_count;
- WORD32 frame_size;
- FLOAT32** non_interleaved_audio;
+ WORD32 multiband_audio_sig_count;
+ WORD32 frame_size;
+ FLOAT32** non_interleaved_audio;
} ia_audio_band_buffer_struct;
-
-
WORD32
impd_apply_gains_subband(ia_drc_instructions_struct* pstr_drc_instruction_arr,
- const WORD32 drc_instructions_index,
- ia_drc_params_struct* ia_drc_params_struct,
- ia_gain_buffer_struct* pstr_gain_buf,
- ia_overlap_params_struct* pstr_overlap_params,
- FLOAT32* deinterleaved_audio_re[],
- FLOAT32* deinterleaved_audio_im[]);
-
+ const WORD32 drc_instructions_index,
+ ia_drc_params_struct* ia_drc_params_struct,
+ ia_gain_buffer_struct* pstr_gain_buf,
+ ia_overlap_params_struct* pstr_overlap_params,
+ FLOAT32* deinterleaved_audio_re[],
+ FLOAT32* deinterleaved_audio_im[]);
WORD32
impd_filter_banks_process(ia_drc_instructions_struct* pstr_drc_instruction_arr,
- const WORD32 drc_instructions_index,
- ia_drc_params_struct* ia_drc_params_struct,
- FLOAT32* audio_io_buf[],
- ia_audio_band_buffer_struct* audio_band_buffer,
- ia_filter_banks_struct* ia_filter_banks_struct,
- const WORD32 passThru);
-
+ const WORD32 drc_instructions_index,
+ ia_drc_params_struct* ia_drc_params_struct,
+ FLOAT32* audio_io_buf[],
+ ia_audio_band_buffer_struct* audio_band_buffer,
+ ia_filter_banks_struct* ia_filter_banks_struct,
+ const WORD32 passThru);
#ifdef __cplusplus
}
diff --git a/decoder/drc_src/impd_drc_uni_sel_proc_drc_set_sel.h b/decoder/drc_src/impd_drc_uni_sel_proc_drc_set_sel.h
index 7b31d5a..90b0327 100644
--- a/decoder/drc_src/impd_drc_uni_sel_proc_drc_set_sel.h
+++ b/decoder/drc_src/impd_drc_uni_sel_proc_drc_set_sel.h
@@ -24,28 +24,27 @@
extern "C" {
#endif /* __cplusplus */
-
-#define SELECTION_FLAG_DRC_TARGET_LOUDNESS_MATCH (1<<0)
-#define SELECTION_FLAG_EXPLICIT_PEAK_INFO_PRESENT (1<<1)
+#define SELECTION_FLAG_DRC_TARGET_LOUDNESS_MATCH (1 << 0)
+#define SELECTION_FLAG_EXPLICIT_PEAK_INFO_PRESENT (1 << 1)
typedef struct {
- WORD32 drc_instructions_index;
- WORD32 downmix_id_request_index;
- WORD32 eq_set_id;
- FLOAT32 output_peak_level;
- FLOAT32 loudness_norm_db_gain_adjusted;
- FLOAT32 output_loudness;
- FLOAT32 mixing_level;
- WORD32 selection_flags;
+ WORD32 drc_instructions_index;
+ WORD32 downmix_id_request_index;
+ WORD32 eq_set_id;
+ FLOAT32 output_peak_level;
+ FLOAT32 loudness_norm_db_gain_adjusted;
+ FLOAT32 output_loudness;
+ FLOAT32 mixing_level;
+ WORD32 selection_flags;
} ia_selection_candidate_info_struct;
-
WORD32
-impd_validate_requested_drc_feature(ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct);
+impd_validate_requested_drc_feature(
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct);
WORD32
impd_map_requested_effect_bit_idx(WORD32 requested_effect_type,
- WORD32* effect_bit_idx);
+ WORD32* effect_bit_idx);
WORD32
impd_get_fading_drc_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc);
@@ -55,88 +54,84 @@ impd_get_ducking_drc_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc);
WORD32
impd_get_selected_drc_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- WORD32 drc_set_id_selected);
+ WORD32 drc_set_id_selected);
WORD32
impd_get_dependent_drc_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc);
WORD32
-impd_get_dependent_drc_instructions(const ia_drc_config* drc_config,
- const ia_drc_instructions_struct* str_drc_instruction_str,
- ia_drc_instructions_struct** ppstr_drc_instructions_dependent);
-
+impd_get_dependent_drc_instructions(
+ const ia_drc_config* drc_config,
+ const ia_drc_instructions_struct* str_drc_instruction_str,
+ ia_drc_instructions_struct** ppstr_drc_instructions_dependent);
WORD32
-impd_select_drcs_without_compr_effects (ia_drc_config* pstr_drc_config,
- WORD32* match_found_flag,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info);
+impd_select_drcs_without_compr_effects(
+ ia_drc_config* pstr_drc_config, WORD32* match_found_flag,
+ WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info);
WORD32
-impd_match_effect_type_attempt(ia_drc_config* pstr_drc_config,
- WORD32 requested_effect_type,
- WORD32 stateRequested,
- WORD32* match_found_flag,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info);
+impd_match_effect_type_attempt(
+ ia_drc_config* pstr_drc_config, WORD32 requested_effect_type,
+ WORD32 stateRequested, WORD32* match_found_flag,
+ WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info);
WORD32
-impd_match_effect_types(ia_drc_config* pstr_drc_config,
- WORD32 total_effect_type_requested,
- WORD32 desired_effect_type_requested,
- WORD32* requested_effect_type,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info);
-
-WORD32 impd_match_dynamic_range(ia_drc_config* pstr_drc_config,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
- WORD32 num_drc_requests,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info);
+impd_match_effect_types(
+ ia_drc_config* pstr_drc_config, WORD32 total_effect_type_requested,
+ WORD32 desired_effect_type_requested, WORD32* requested_effect_type,
+ WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info);
+
+WORD32 impd_match_dynamic_range(
+ ia_drc_config* pstr_drc_config,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
+ WORD32 num_drc_requests, WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info);
WORD32
-impd_match_drc_characteristic_attempt(ia_drc_config* pstr_drc_config,
- WORD32 requested_drc_characteristic,
- WORD32* match_found_flag,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info);
+impd_match_drc_characteristic_attempt(
+ ia_drc_config* pstr_drc_config, WORD32 requested_drc_characteristic,
+ WORD32* match_found_flag, WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info);
WORD32
-impd_match_drc_characteristic(ia_drc_config* pstr_drc_config,
- WORD32 requested_drc_characteristic,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info);
+impd_match_drc_characteristic(
+ ia_drc_config* pstr_drc_config, WORD32 requested_drc_characteristic,
+ WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info);
-VOID impd_select_drc_coeff3(ia_drc_config* drc_config,
- ia_uni_drc_coeffs_struct** str_p_loc_drc_coefficients_uni_drc);
+VOID impd_select_drc_coeff3(
+ ia_drc_config* drc_config,
+ ia_uni_drc_coeffs_struct** str_p_loc_drc_coefficients_uni_drc);
WORD32
-impd_drc_set_preselection(ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
- ia_drc_config* pstr_drc_config,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- WORD32 restrict_to_drc_with_album_loudness,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info);
-
-WORD32 impd_drc_set_final_selection(ia_drc_config* pstr_drc_config,
- ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info
-);
-
-WORD32 impd_match_eq_set_purpose(ia_drc_config* drc_config,
- WORD32 eq_set_purpose_requested,
- WORD32* eq_set_id_valid_flag,
- WORD32* selection_candidate_count,
- ia_selection_candidate_info_struct* selection_candidate_info,
- ia_selection_candidate_info_struct* selection_candidate_info_step_2
- );
+impd_drc_set_preselection(
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
+ ia_drc_config* pstr_drc_config,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ WORD32 restrict_to_drc_with_album_loudness,
+ WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info);
+
+WORD32 impd_drc_set_final_selection(
+ ia_drc_config* pstr_drc_config,
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
+ WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info);
+
+WORD32 impd_match_eq_set_purpose(
+ ia_drc_config* drc_config, WORD32 eq_set_purpose_requested,
+ WORD32* eq_set_id_valid_flag, WORD32* selection_candidate_count,
+ ia_selection_candidate_info_struct* selection_candidate_info,
+ ia_selection_candidate_info_struct* selection_candidate_info_step_2);
WORD32
impd_select_drc_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- WORD32* drc_set_id_selected
- );
+ WORD32* drc_set_id_selected);
#ifdef __cplusplus
}
diff --git a/decoder/drc_src/impd_drc_uni_sel_proc_init.h b/decoder/drc_src/impd_drc_uni_sel_proc_init.h
index 5603008..977ba6a 100644
--- a/decoder/drc_src/impd_drc_uni_sel_proc_init.h
+++ b/decoder/drc_src/impd_drc_uni_sel_proc_init.h
@@ -28,12 +28,14 @@ WORD32
impd_drc_sel_proc_init_dflt(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc);
WORD32
-impd_drc_sel_proc_init_sel_proc_params(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct);
+impd_drc_sel_proc_init_sel_proc_params(
+ ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct);
WORD32
-impd_drc_sel_proc_init_interface_params(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
- ia_drc_interface_struct* pstr_drc_interface);
+impd_drc_sel_proc_init_interface_params(
+ ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
+ ia_drc_interface_struct* pstr_drc_interface);
#ifdef __cplusplus
}
diff --git a/decoder/drc_src/impd_drc_uni_sel_proc_loudness_control.h b/decoder/drc_src/impd_drc_uni_sel_proc_loudness_control.h
index 057d338..cf8c36c 100644
--- a/decoder/drc_src/impd_drc_uni_sel_proc_loudness_control.h
+++ b/decoder/drc_src/impd_drc_uni_sel_proc_loudness_control.h
@@ -26,62 +26,55 @@ extern "C" {
WORD32
impd_signal_peak_level_info(ia_drc_config* pstr_drc_config,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- ia_drc_instructions_struct* str_drc_instruction_str,
- const WORD32 requested_dwnmix_id,
- const WORD32 album_mode,
- const WORD32 num_compression_eq_count,
- const WORD32* num_compression_eq_id,
- WORD32* peak_info_count,
- WORD32 eq_set_id[],
- FLOAT32 signal_peak_level[],
- WORD32 explicit_peak_information_present[]);
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ ia_drc_instructions_struct* str_drc_instruction_str,
+ const WORD32 requested_dwnmix_id,
+ const WORD32 album_mode,
+ const WORD32 num_compression_eq_count,
+ const WORD32* num_compression_eq_id,
+ WORD32* peak_info_count, WORD32 eq_set_id[],
+ FLOAT32 signal_peak_level[],
+ WORD32 explicit_peak_information_present[]);
WORD32
-impd_extract_loudness_peak_to_average_info(ia_loudness_info_struct* loudness_info,
- const WORD32 dyn_range_measurement_type,
- WORD32 * loudness_peak_2_avg_value_present,
- FLOAT32* loudness_peak_2_avg_value);
+impd_extract_loudness_peak_to_average_info(
+ ia_loudness_info_struct* loudness_info,
+ const WORD32 dyn_range_measurement_type,
+ WORD32* loudness_peak_2_avg_value_present,
+ FLOAT32* loudness_peak_2_avg_value);
WORD32
impd_overall_loudness_present(const ia_loudness_info_struct* loudness_info,
WORD32* loudness_info_present);
WORD32
-impd_find_overall_loudness_info(ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- const WORD32 requested_dwnmix_id,
- const WORD32 drc_set_id_requested,
- WORD32* overall_loudness_info_present,
- WORD32* loudness_info_count,
- ia_loudness_info_struct* loudness_info[]);
+impd_find_overall_loudness_info(
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ const WORD32 requested_dwnmix_id, const WORD32 drc_set_id_requested,
+ WORD32* overall_loudness_info_present, WORD32* loudness_info_count,
+ ia_loudness_info_struct* loudness_info[]);
WORD32
-impd_high_pass_loudness_adjust_info(const ia_loudness_info_struct* loudness_info,
- WORD32* loudness_hp_adjust_present,
- FLOAT32* loudness_hp_adjust);
+impd_high_pass_loudness_adjust_info(
+ const ia_loudness_info_struct* loudness_info,
+ WORD32* loudness_hp_adjust_present, FLOAT32* loudness_hp_adjust);
WORD32
impd_find_high_pass_loudness_adjust(
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- const WORD32 requested_dwnmix_id,
- const WORD32 drc_set_id_requested,
- const WORD32 album_mode,
- const FLOAT32 device_cutoff_freq,
- WORD32* loudness_hp_adjust_present,
- FLOAT32* loudness_hp_adjust);
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ const WORD32 requested_dwnmix_id, const WORD32 drc_set_id_requested,
+ const WORD32 album_mode, const FLOAT32 device_cutoff_freq,
+ WORD32* loudness_hp_adjust_present, FLOAT32* loudness_hp_adjust);
WORD32
-impd_init_loudness_control (ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- const WORD32 requested_dwnmix_id,
- const WORD32 drc_set_id_requested,
- const WORD32 num_compression_eq_count,
- const WORD32* num_compression_eq_id,
- WORD32* loudness_info_count,
- WORD32 eq_set_id[],
- FLOAT32 loudness_normalization_gain_db[],
- FLOAT32 loudness[]);
+impd_init_loudness_control(
+ ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ const WORD32 requested_dwnmix_id, const WORD32 drc_set_id_requested,
+ const WORD32 num_compression_eq_count, const WORD32* num_compression_eq_id,
+ WORD32* loudness_info_count, WORD32 eq_set_id[],
+ FLOAT32 loudness_normalization_gain_db[], FLOAT32 loudness[]);
#ifdef __cplusplus
}
diff --git a/decoder/drc_src/impd_drc_uni_shape_filter.h b/decoder/drc_src/impd_drc_uni_shape_filter.h
index 17cb04a..25adbe9 100644
--- a/decoder/drc_src/impd_drc_uni_shape_filter.h
+++ b/decoder/drc_src/impd_drc_uni_shape_filter.h
@@ -20,6 +20,4 @@
#ifndef IMPD_DRC_UNI_SHAPE_FILTER_H
#define IMPD_DRC_UNI_SHAPE_FILTER_H
-
-
#endif
diff --git a/decoder/drc_src/impd_drc_uni_tables.h b/decoder/drc_src/impd_drc_uni_tables.h
index 89b864b..517a9db 100644
--- a/decoder/drc_src/impd_drc_uni_tables.h
+++ b/decoder/drc_src/impd_drc_uni_tables.h
@@ -21,70 +21,69 @@
#define IMPD_DRC_UNI_TABLES_H
#ifdef __cplusplus
-extern "C"
-{
+extern "C" {
#endif
-#define N_DELTA_TIME_CODE_TABLE_ENTRIES_MAX (512+14)
+#define N_DELTA_TIME_CODE_TABLE_ENTRIES_MAX (512 + 14)
typedef struct {
- WORD32 size;
- WORD32 code;
- WORD32 value;
+ WORD32 size;
+ WORD32 code;
+ WORD32 value;
} ia_delta_time_code_table_entry_struct;
typedef struct {
- WORD32 size;
- WORD32 code;
- FLOAT32 value;
- WORD32 index;
+ WORD32 size;
+ WORD32 code;
+ FLOAT32 value;
+ WORD32 index;
} ia_slope_code_table_struct;
typedef struct {
- WORD32 size;
- WORD32 code;
- FLOAT32 value;
+ WORD32 size;
+ WORD32 code;
+ FLOAT32 value;
} ia_delta_gain_code_table_struct;
typedef struct {
- ia_delta_time_code_table_entry_struct delta_time_code_table[N_DELTA_TIME_CODE_TABLE_ENTRIES_MAX];
+ ia_delta_time_code_table_entry_struct
+ delta_time_code_table[N_DELTA_TIME_CODE_TABLE_ENTRIES_MAX];
} ia_tables_struct;
typedef struct {
- FLOAT32 in_out_ratio;
- FLOAT32 exp_lo;
- FLOAT32 exp_hi;
+ FLOAT32 in_out_ratio;
+ FLOAT32 exp_lo;
+ FLOAT32 exp_hi;
} ia_cicp_sigmoid_characteristic_param_struct;
typedef struct {
- FLOAT32 inLevel;
- FLOAT32 gain;
+ FLOAT32 inLevel;
+ FLOAT32 gain;
} ia_characteristic_node_coordinate_struct;
typedef struct {
- WORD32 coordinateCount;
- ia_characteristic_node_coordinate_struct characteristicNodeCoordinate[5];
+ WORD32 coordinateCount;
+ ia_characteristic_node_coordinate_struct characteristicNodeCoordinate[5];
} ia_cicp_node_characteristic_param;
WORD32
-impd_init_tbls(const WORD32 num_gain_max_values,
- ia_tables_struct* str_tables);
+impd_init_tbls(const WORD32 num_gain_max_values, ia_tables_struct* str_tables);
-void
-impd_gen_delta_time_code_tbl (const WORD32 num_gain_max_values,
- ia_delta_time_code_table_entry_struct* delta_time_code_tbl_item);
+void impd_gen_delta_time_code_tbl(
+ const WORD32 num_gain_max_values,
+ ia_delta_time_code_table_entry_struct* delta_time_code_tbl_item);
-void
-impd_get_delta_gain_code_tbl(const WORD32 gain_coding_profile,
- ia_delta_gain_code_table_struct const** delta_time_code_tbl,
- WORD32 *num_entries);
+void impd_get_delta_gain_code_tbl(
+ const WORD32 gain_coding_profile,
+ ia_delta_gain_code_table_struct const** delta_time_code_tbl,
+ WORD32* num_entries);
-void
-impd_get_slope_code_tbl_and_size(ia_slope_code_table_struct const** slope_code_tbl_entry,
- WORD32* num_slope_code_tbl_entries);
+void impd_get_slope_code_tbl_and_size(
+ ia_slope_code_table_struct const** slope_code_tbl_entry,
+ WORD32* num_slope_code_tbl_entries);
WORD32
-impd_get_delta_tmin (const WORD32 sampling_rate);
+impd_get_delta_tmin(const WORD32 sampling_rate);
#ifdef __cplusplus
}
diff --git a/decoder/drc_src/impd_error_handler.h b/decoder/drc_src/impd_error_handler.h
index 6de2968..fd475fe 100644
--- a/decoder/drc_src/impd_error_handler.h
+++ b/decoder/drc_src/impd_error_handler.h
@@ -34,25 +34,25 @@
/*****************************************************************************/
/* Constant hash defines */
/*****************************************************************************/
-#define IA_ERROR_NON_FATAL_IDX 0x0
-#define IA_ERROR_FATAL_IDX 0x1
+#define IA_ERROR_NON_FATAL_IDX 0x0
+#define IA_ERROR_FATAL_IDX 0x1
-#define IA_ERROR_CLASS_0 0x0
-#define IA_ERROR_CLASS_1 0x1
-#define IA_ERROR_CLASS_2 0x2
-#define IA_ERROR_CLASS_3 0x3
-#define IA_ERROR_CLASS_4 0x4
-#define IA_ERROR_CLASS_5 0x5
-#define IA_ERROR_CLASS_6 0x6
-#define IA_ERROR_CLASS_7 0x7
-#define IA_ERROR_CLASS_8 0x8
-#define IA_ERROR_CLASS_9 0x9
-#define IA_ERROR_CLASS_A 0xA
-#define IA_ERROR_CLASS_B 0xB
-#define IA_ERROR_CLASS_C 0xC
-#define IA_ERROR_CLASS_D 0xD
-#define IA_ERROR_CLASS_E 0xE
-#define IA_ERROR_CLASS_F 0xF
+#define IA_ERROR_CLASS_0 0x0
+#define IA_ERROR_CLASS_1 0x1
+#define IA_ERROR_CLASS_2 0x2
+#define IA_ERROR_CLASS_3 0x3
+#define IA_ERROR_CLASS_4 0x4
+#define IA_ERROR_CLASS_5 0x5
+#define IA_ERROR_CLASS_6 0x6
+#define IA_ERROR_CLASS_7 0x7
+#define IA_ERROR_CLASS_8 0x8
+#define IA_ERROR_CLASS_9 0x9
+#define IA_ERROR_CLASS_A 0xA
+#define IA_ERROR_CLASS_B 0xB
+#define IA_ERROR_CLASS_C 0xC
+#define IA_ERROR_CLASS_D 0xD
+#define IA_ERROR_CLASS_E 0xE
+#define IA_ERROR_CLASS_F 0xF
/* each module, hence, needs to copy the following structure */
/* the first index is for FATAL/NONFATAL */
@@ -63,11 +63,10 @@
/*****************************************************************************/
/* Type definitions */
/*****************************************************************************/
-typedef struct
-{
- pWORD8 pb_module_name;
- pWORD8 ppb_class_names[16];
- WORD8 **ppppb_error_msg_pointers[2][16];
+typedef struct {
+ pWORD8 pb_module_name;
+ pWORD8 ppb_class_names[16];
+ WORD8 **ppppb_error_msg_pointers[2][16];
} ia_error_info_struct;
/*****************************************************************************/
@@ -76,19 +75,17 @@ typedef struct
/* this error handler maps the code generated by a module to a error string */
/* pb_context is a string to specify where the module broke */
IA_ERRORCODE ia_error_handler(ia_error_info_struct *p_mod_err_info,
- WORD8 *pb_context, IA_ERRORCODE code);
+ WORD8 *pb_context, IA_ERRORCODE code);
/*****************************************************************************/
/* Macro functions */
/*****************************************************************************/
/* the following macro does a line job of returning back to the parent */
/* in case a fatal error occurs after calling the errorhandler */
-#define _IA_HANDLE_ERROR(p_mod_err_info, context, e) \
- if((e) != IA_NO_ERROR) \
- { \
- ia_error_handler((p_mod_err_info), (context), (e)); \
- if((e) & IA_FATAL_ERROR) \
- return (e); \
- }
+#define _IA_HANDLE_ERROR(p_mod_err_info, context, e) \
+ if ((e) != IA_NO_ERROR) { \
+ ia_error_handler((p_mod_err_info), (context), (e)); \
+ if ((e)&IA_FATAL_ERROR) return (e); \
+ }
#endif
diff --git a/decoder/drc_src/impd_error_standards.h b/decoder/drc_src/impd_error_standards.h
index 8bce654..2ef331c 100644
--- a/decoder/drc_src/impd_error_standards.h
+++ b/decoder/drc_src/impd_error_standards.h
@@ -33,8 +33,8 @@ typedef WORD32 IA_ERRORCODE;
/*****************************************************************************/
/* Constant hash defines */
/*****************************************************************************/
-#define IA_NO_ERROR 0x00000000
+#define IA_NO_ERROR 0x00000000
/* error handling 'AND' definition */
-#define IA_FATAL_ERROR 0x80000000
+#define IA_FATAL_ERROR 0x80000000
#endif /* __IMPD_ERROR_STANDARDS_H__ */
diff --git a/decoder/drc_src/impd_memory_standards.h b/decoder/drc_src/impd_memory_standards.h
index a7ef91c..0cb5aa6 100644
--- a/decoder/drc_src/impd_memory_standards.h
+++ b/decoder/drc_src/impd_memory_standards.h
@@ -25,85 +25,84 @@
/* Type definitions */
/*****************************************************************************/
/* standard memory table descriptor for libraries */
-typedef struct
-{
- UWORD32 ui_size; /* size of the memory in bytes */
- UWORD32 ui_alignment; /* alignment in bytes */
- UWORD32 ui_type; /* type of memory */
- UWORD32 ui_placement[2]; /* 64 bit placement info */
- UWORD32 ui_priority; /* the importance for placement */
- UWORD32 ui_placed[2]; /* the o_red location for placement */
-}ia_mem_info_struct;
+typedef struct {
+ UWORD32 ui_size; /* size of the memory in bytes */
+ UWORD32 ui_alignment; /* alignment in bytes */
+ UWORD32 ui_type; /* type of memory */
+ UWORD32 ui_placement[2]; /* 64 bit placement info */
+ UWORD32 ui_priority; /* the importance for placement */
+ UWORD32 ui_placed[2]; /* the o_red location for placement */
+} ia_mem_info_struct;
/*****************************************************************************/
/* Constant hash defines */
/*****************************************************************************/
/* when you don't need alignment, pass this to memory library */
-#define IA_MEM_NO_ALIGN 0x01
+#define IA_MEM_NO_ALIGN 0x01
/* ittiam standard memory types */
/* to be used inter frames */
-#define IA_MEMTYPE_PERSIST 0x00
+#define IA_MEMTYPE_PERSIST 0x00
/* read write, to be used intra frames */
-#define IA_MEMTYPE_SCRATCH 0x01
+#define IA_MEMTYPE_SCRATCH 0x01
/* read only memory, intra frame */
-#define IA_MEMTYPE_INPUT 0x02
+#define IA_MEMTYPE_INPUT 0x02
/* read-write memory, for usable output, intra frame */
-#define IA_MEMTYPE_OUTPUT 0x03
+#define IA_MEMTYPE_OUTPUT 0x03
/* readonly memory, inter frame */
-#define IA_MEMTYPE_TABLE 0x04
+#define IA_MEMTYPE_TABLE 0x04
/* input buffer before mem tabs allocation */
-#define IA_MEMTYPE_PRE_FRAME_INPUT 0x05
+#define IA_MEMTYPE_PRE_FRAME_INPUT 0x05
/* input buffer before mem tabs allocation */
-#define IA_MEMTYPE_PRE_FRAME_SCRATCH 0x06
+#define IA_MEMTYPE_PRE_FRAME_SCRATCH 0x06
/* for local variables */
-#define IA_MEMTYPE_AUTO_VAR 0x80
+#define IA_MEMTYPE_AUTO_VAR 0x80
/* ittiam standard memory priorities */
-#define IA_MEMPRIORITY_ANYWHERE 0x00
-#define IA_MEMPRIORITY_LOWEST 0x01
-#define IA_MEMPRIORITY_LOW 0x02
-#define IA_MEMPRIORITY_NORM 0x03
-#define IA_MEMPRIORITY_ABOVE_NORM 0x04
-#define IA_MEMPRIORITY_HIGH 0x05
-#define IA_MEMPRIORITY_HIGHER 0x06
-#define IA_MEMPRIORITY_CRITICAL 0x07
+#define IA_MEMPRIORITY_ANYWHERE 0x00
+#define IA_MEMPRIORITY_LOWEST 0x01
+#define IA_MEMPRIORITY_LOW 0x02
+#define IA_MEMPRIORITY_NORM 0x03
+#define IA_MEMPRIORITY_ABOVE_NORM 0x04
+#define IA_MEMPRIORITY_HIGH 0x05
+#define IA_MEMPRIORITY_HIGHER 0x06
+#define IA_MEMPRIORITY_CRITICAL 0x07
/* ittiam standard memory placements */
/* placement is defined by 64 bits */
-#define IA_MEMPLACE_FAST_RAM_0 0x000001
-#define IA_MEMPLACE_FAST_RAM_1 0x000002
-#define IA_MEMPLACE_FAST_RAM_2 0x000004
-#define IA_MEMPLACE_FAST_RAM_3 0x000008
-#define IA_MEMPLACE_FAST_RAM_4 0x000010
-#define IA_MEMPLACE_FAST_RAM_5 0x000020
-#define IA_MEMPLACE_FAST_RAM_6 0x000040
-#define IA_MEMPLACE_FAST_RAM_7 0x000080
+#define IA_MEMPLACE_FAST_RAM_0 0x000001
+#define IA_MEMPLACE_FAST_RAM_1 0x000002
+#define IA_MEMPLACE_FAST_RAM_2 0x000004
+#define IA_MEMPLACE_FAST_RAM_3 0x000008
+#define IA_MEMPLACE_FAST_RAM_4 0x000010
+#define IA_MEMPLACE_FAST_RAM_5 0x000020
+#define IA_MEMPLACE_FAST_RAM_6 0x000040
+#define IA_MEMPLACE_FAST_RAM_7 0x000080
-#define IA_MEMPLACE_INT_RAM_0 0x000100
-#define IA_MEMPLACE_INT_RAM_1 0x000200
-#define IA_MEMPLACE_INT_RAM_2 0x000400
-#define IA_MEMPLACE_INT_RAM_3 0x000800
-#define IA_MEMPLACE_INT_RAM_4 0x001000
-#define IA_MEMPLACE_INT_RAM_5 0x002000
-#define IA_MEMPLACE_INT_RAM_6 0x004000
-#define IA_MEMPLACE_INT_RAM_7 0x008000
+#define IA_MEMPLACE_INT_RAM_0 0x000100
+#define IA_MEMPLACE_INT_RAM_1 0x000200
+#define IA_MEMPLACE_INT_RAM_2 0x000400
+#define IA_MEMPLACE_INT_RAM_3 0x000800
+#define IA_MEMPLACE_INT_RAM_4 0x001000
+#define IA_MEMPLACE_INT_RAM_5 0x002000
+#define IA_MEMPLACE_INT_RAM_6 0x004000
+#define IA_MEMPLACE_INT_RAM_7 0x008000
-#define IA_MEMPLACE_EXT_RAM_0 0x010000
-#define IA_MEMPLACE_EXT_RAM_1 0x020000
-#define IA_MEMPLACE_EXT_RAM_2 0x040000
-#define IA_MEMPLACE_EXT_RAM_3 0x080000
-#define IA_MEMPLACE_EXT_RAM_4 0x100000
-#define IA_MEMPLACE_EXT_RAM_5 0x200000
-#define IA_MEMPLACE_EXT_RAM_6 0x400000
-#define IA_MEMPLACE_EXT_RAM_7 0x800000
+#define IA_MEMPLACE_EXT_RAM_0 0x010000
+#define IA_MEMPLACE_EXT_RAM_1 0x020000
+#define IA_MEMPLACE_EXT_RAM_2 0x040000
+#define IA_MEMPLACE_EXT_RAM_3 0x080000
+#define IA_MEMPLACE_EXT_RAM_4 0x100000
+#define IA_MEMPLACE_EXT_RAM_5 0x200000
+#define IA_MEMPLACE_EXT_RAM_6 0x400000
+#define IA_MEMPLACE_EXT_RAM_7 0x800000
-#define IA_MEMPLACE_DONTCARE_H 0xFFFFFFFF
-#define IA_MEMPLACE_DONTCARE_L 0xFFFFFFFF
+#define IA_MEMPLACE_DONTCARE_H 0xFFFFFFFF
+#define IA_MEMPLACE_DONTCARE_L 0xFFFFFFFF
/* the simple common PC RAM */
-#define IA_PC_RAM_H 0x00000000
-#define IA_PC_RAM_L IA_MEMPLACE_EXT_RAM_0
+#define IA_PC_RAM_H 0x00000000
+#define IA_PC_RAM_L IA_MEMPLACE_EXT_RAM_0
#endif
diff --git a/decoder/drc_src/impd_parametric_drc_dec.h b/decoder/drc_src/impd_parametric_drc_dec.h
index d0ab76b..6829246 100644
--- a/decoder/drc_src/impd_parametric_drc_dec.h
+++ b/decoder/drc_src/impd_parametric_drc_dec.h
@@ -20,179 +20,173 @@
#ifndef IMPD_PARAMETRIC_DRC_DEC_H
#define IMPD_PARAMETRIC_DRC_DEC_H
-
-
#ifdef __cplusplus
-extern "C"
-{
+extern "C" {
#endif
typedef struct ia_2nd_order_filt_coeff_struct_t {
- FLOAT32 b0, b1, b2;
- FLOAT32 a1, a2;
+ FLOAT32 b0, b1, b2;
+ FLOAT32 a1, a2;
} ia_2nd_order_filt_coeff_struct;
typedef struct ia_2nd_order_filt_state_struct_t {
- FLOAT32 z1, z2;
+ FLOAT32 z1, z2;
} ia_2nd_order_filt_state_struct;
typedef struct ia_parametric_drc_type_ff_params_struct_t {
-
- WORD32 audio_num_chan;
- WORD32 frame_size;
- WORD32 sub_band_domain_mode;
- WORD32 sub_band_count;
- WORD32 level_estim_integration_time;
- WORD32 level_estim_frame_index;
- WORD32 level_estim_frame_count;
- FLOAT32 level[PARAM_DRC_TYPE_FF_LEVEL_ESTIM_FRAME_COUNT_MAX];
- WORD32 start_up_phase;
- FLOAT32 level_estim_ch_weight[MAX_CHANNEL_COUNT];
- WORD32 level_estim_k_weighting_type;
- ia_2nd_order_filt_coeff_struct pre_filt_coeff;
- ia_2nd_order_filt_coeff_struct rlb_filt_coeff;
- ia_2nd_order_filt_state_struct pre_filt_state[MAX_CHANNEL_COUNT];
- ia_2nd_order_filt_state_struct rlb_filt_state[MAX_CHANNEL_COUNT];
- FLOAT32 weighting_filt[AUDIO_CODEC_SUBBAND_COUNT_MAX];
- WORD32 sub_band_compensation_type;
- ia_2nd_order_filt_coeff_struct filt_coeff_subband;
- ia_2nd_order_filt_state_struct filt_state_subband_real[MAX_CHANNEL_COUNT];
- ia_2nd_order_filt_state_struct filt_state_subband_imag[MAX_CHANNEL_COUNT];
- FLOAT32 ref_level_parametric_drc;
-
- WORD32 node_count;
- WORD32 node_level[PARAM_DRC_TYPE_FF_NODE_COUNT_MAX];
- WORD32 node_gain[PARAM_DRC_TYPE_FF_NODE_COUNT_MAX];
-
- FLOAT32 gain_smooth_attack_alpha_slow;
- FLOAT32 gain_smooth_rel_alpha_slow;
- FLOAT32 gain_smooth_attack_alpha_fast;
- FLOAT32 gain_smooth_rel_alpha_fast;
- WORD32 gain_smooth_attack_threshold;
- WORD32 gain_smooth_rel_threshold;
- WORD32 gain_smooth_hold_off_count;
- FLOAT32 db_level_smooth;
- FLOAT32 db_gain_smooth;
- WORD32 hold_counter;
+ WORD32 audio_num_chan;
+ WORD32 frame_size;
+ WORD32 sub_band_domain_mode;
+ WORD32 sub_band_count;
+ WORD32 level_estim_integration_time;
+ WORD32 level_estim_frame_index;
+ WORD32 level_estim_frame_count;
+ FLOAT32 level[PARAM_DRC_TYPE_FF_LEVEL_ESTIM_FRAME_COUNT_MAX];
+ WORD32 start_up_phase;
+ FLOAT32 level_estim_ch_weight[MAX_CHANNEL_COUNT];
+ WORD32 level_estim_k_weighting_type;
+ ia_2nd_order_filt_coeff_struct pre_filt_coeff;
+ ia_2nd_order_filt_coeff_struct rlb_filt_coeff;
+ ia_2nd_order_filt_state_struct pre_filt_state[MAX_CHANNEL_COUNT];
+ ia_2nd_order_filt_state_struct rlb_filt_state[MAX_CHANNEL_COUNT];
+ FLOAT32 weighting_filt[AUDIO_CODEC_SUBBAND_COUNT_MAX];
+ WORD32 sub_band_compensation_type;
+ ia_2nd_order_filt_coeff_struct filt_coeff_subband;
+ ia_2nd_order_filt_state_struct filt_state_subband_real[MAX_CHANNEL_COUNT];
+ ia_2nd_order_filt_state_struct filt_state_subband_imag[MAX_CHANNEL_COUNT];
+ FLOAT32 ref_level_parametric_drc;
+
+ WORD32 node_count;
+ WORD32 node_level[PARAM_DRC_TYPE_FF_NODE_COUNT_MAX];
+ WORD32 node_gain[PARAM_DRC_TYPE_FF_NODE_COUNT_MAX];
+
+ FLOAT32 gain_smooth_attack_alpha_slow;
+ FLOAT32 gain_smooth_rel_alpha_slow;
+ FLOAT32 gain_smooth_attack_alpha_fast;
+ FLOAT32 gain_smooth_rel_alpha_fast;
+ WORD32 gain_smooth_attack_threshold;
+ WORD32 gain_smooth_rel_threshold;
+ WORD32 gain_smooth_hold_off_count;
+ FLOAT32 db_level_smooth;
+ FLOAT32 db_gain_smooth;
+ WORD32 hold_counter;
} ia_parametric_drc_type_ff_params_struct;
typedef struct ia_parametric_drc_type_lim_params_struct_t {
-
- WORD32 audio_num_chan;
- WORD32 frame_size;
- FLOAT32 level_estim_ch_weight[MAX_CHANNEL_COUNT];
-
- UWORD32 attack;
- FLOAT32 attack_constant;
- FLOAT32 release_constant;
- FLOAT32 attack_ms;
- FLOAT32 release_ms;
- FLOAT32 threshold;
- UWORD32 channels;
- UWORD32 sampling_rate;
- FLOAT32 cor;
- FLOAT32* max_buf;
- FLOAT32* max_buf_slow;
- UWORD32 max_buf_idx;
- UWORD32 max_buf_slow_idx;
- UWORD32 sec_len;
- UWORD32 num_max_buf_sec;
- UWORD32 max_buf_sec_idx;
- UWORD32 max_buf_sec_ctr;
- FLOAT64 smooth_state_0;
+ WORD32 audio_num_chan;
+ WORD32 frame_size;
+ FLOAT32 level_estim_ch_weight[MAX_CHANNEL_COUNT];
+
+ UWORD32 attack;
+ FLOAT32 attack_constant;
+ FLOAT32 release_constant;
+ FLOAT32 attack_ms;
+ FLOAT32 release_ms;
+ FLOAT32 threshold;
+ UWORD32 channels;
+ UWORD32 sampling_rate;
+ FLOAT32 cor;
+ FLOAT32* max_buf;
+ FLOAT32* max_buf_slow;
+ UWORD32 max_buf_idx;
+ UWORD32 max_buf_slow_idx;
+ UWORD32 sec_len;
+ UWORD32 num_max_buf_sec;
+ UWORD32 max_buf_sec_idx;
+ UWORD32 max_buf_sec_ctr;
+ FLOAT64 smooth_state_0;
} ia_parametric_drc_type_lim_params_struct;
typedef struct ia_parametric_drc_instance_params_struct_t {
- WORD32 disable_paramteric_drc;
- WORD32 parametric_drc_type;
- ia_spline_nodes_struct str_spline_nodes;
- ia_parametric_drc_type_ff_params_struct str_parametric_drc_type_ff_params;
- ia_parametric_drc_type_lim_params_struct str_parametric_drc_type_lim_params;
+ WORD32 disable_paramteric_drc;
+ WORD32 parametric_drc_type;
+ ia_spline_nodes_struct str_spline_nodes;
+ ia_parametric_drc_type_ff_params_struct str_parametric_drc_type_ff_params;
+ ia_parametric_drc_type_lim_params_struct str_parametric_drc_type_lim_params;
} ia_parametric_drc_instance_params_struct;
typedef struct ia_parametric_drc_params_struct_t {
- WORD32 sampling_rate;
- WORD32 audio_num_chan;
- WORD32 sub_band_domain_mode;
- WORD32 sub_band_count;
-
- WORD32 num_nodes;
- WORD32 drc_frame_size;
- WORD32 parametric_drc_frame_size;
- WORD32 parametric_drc_look_ahead_samples_max;
- WORD32 reset_parametric_drc;
-
- WORD32 parametric_drc_instance_count;
- WORD32 parametric_drc_idx[PARAM_DRC_INSTANCE_COUNT_MAX];
- WORD32 gain_set_index[PARAM_DRC_INSTANCE_COUNT_MAX];
- WORD32 dwnmix_id_from_drc_instructions[PARAM_DRC_INSTANCE_COUNT_MAX];
- WORD32 channel_map[PARAM_DRC_INSTANCE_COUNT_MAX][MAX_CHANNEL_COUNT];
-
- ia_parametric_drc_instance_params_struct str_parametric_drc_instance_params[PARAM_DRC_INSTANCE_COUNT_MAX];
+ WORD32 sampling_rate;
+ WORD32 audio_num_chan;
+ WORD32 sub_band_domain_mode;
+ WORD32 sub_band_count;
+
+ WORD32 num_nodes;
+ WORD32 drc_frame_size;
+ WORD32 parametric_drc_frame_size;
+ WORD32 parametric_drc_look_ahead_samples_max;
+ WORD32 reset_parametric_drc;
+
+ WORD32 parametric_drc_instance_count;
+ WORD32 parametric_drc_idx[PARAM_DRC_INSTANCE_COUNT_MAX];
+ WORD32 gain_set_index[PARAM_DRC_INSTANCE_COUNT_MAX];
+ WORD32 dwnmix_id_from_drc_instructions[PARAM_DRC_INSTANCE_COUNT_MAX];
+ WORD32 channel_map[PARAM_DRC_INSTANCE_COUNT_MAX][MAX_CHANNEL_COUNT];
+
+ ia_parametric_drc_instance_params_struct
+ str_parametric_drc_instance_params[PARAM_DRC_INSTANCE_COUNT_MAX];
} ia_parametric_drc_params_struct;
-WORD32 impd_init_parametric_drc( WORD32 drc_frame_size,
- WORD32 sampling_rate,
- WORD32 sub_band_domain_mode,
- ia_parametric_drc_params_struct* pstr_parametric_drc_params);
-
-WORD32 impd_init_parametric_drc_after_config(ia_drc_config* pstr_drc_config,
- ia_drc_loudness_info_set_struct* pstr_loudness_info,
- ia_parametric_drc_params_struct *pstr_parametric_drc_params,
- pVOID *mem_ptr);
+WORD32 impd_init_parametric_drc(
+ WORD32 drc_frame_size, WORD32 sampling_rate, WORD32 sub_band_domain_mode,
+ ia_parametric_drc_params_struct* pstr_parametric_drc_params);
+WORD32 impd_init_parametric_drc_after_config(
+ ia_drc_config* pstr_drc_config,
+ ia_drc_loudness_info_set_struct* pstr_loudness_info,
+ ia_parametric_drc_params_struct* pstr_parametric_drc_params,
+ pVOID* mem_ptr);
WORD32
-impd_init_lvl_est_filt_time( WORD32 level_estim_k_weighting_type,
- WORD32 sampling_rate,
- ia_2nd_order_filt_coeff_struct* pre_filt_coeff,
- ia_2nd_order_filt_coeff_struct* rlb_filt_coeff);
+impd_init_lvl_est_filt_time(WORD32 level_estim_k_weighting_type,
+ WORD32 sampling_rate,
+ ia_2nd_order_filt_coeff_struct* pre_filt_coeff,
+ ia_2nd_order_filt_coeff_struct* rlb_filt_coeff);
WORD32
-impd_init_lvl_est_filt_subband( WORD32 level_estim_k_weighting_type,
- WORD32 sampling_rate,
- WORD32 sub_band_domain_mode,
- WORD32 sub_band_count,
- WORD32 sub_band_compensation_type,
- FLOAT32 *weighting_filt,
- ia_2nd_order_filt_coeff_struct* filt_coeff_subband);
-
+impd_init_lvl_est_filt_subband(
+ WORD32 level_estim_k_weighting_type, WORD32 sampling_rate,
+ WORD32 sub_band_domain_mode, WORD32 sub_band_count,
+ WORD32 sub_band_compensation_type, FLOAT32* weighting_filt,
+ ia_2nd_order_filt_coeff_struct* filt_coeff_subband);
WORD32
-impd_parametric_ffwd_type_drc_reset(ia_parametric_drc_type_ff_params_struct* pstr_parametric_ffwd_type_drc_params);
+impd_parametric_ffwd_type_drc_reset(ia_parametric_drc_type_ff_params_struct*
+ pstr_parametric_ffwd_type_drc_params);
WORD32
-impd_parametric_lim_type_drc_reset( WORD32 instance_idx,
- ia_parametric_drc_type_lim_params_struct* pstr_parametric_lim_type_drc_params);
+impd_parametric_lim_type_drc_reset(WORD32 instance_idx,
+ ia_parametric_drc_type_lim_params_struct*
+ pstr_parametric_lim_type_drc_params);
WORD32
-impd_parametric_drc_instance_process (FLOAT32* audio_in_out_buf[],
- FLOAT32* audio_real_buff[],
- FLOAT32* audio_imag_buff[],
- ia_parametric_drc_params_struct* pstr_parametric_drc_params,
- ia_parametric_drc_instance_params_struct* pstr_parametric_drc_instance_params);
-
+impd_parametric_drc_instance_process(
+ FLOAT32* audio_in_out_buf[], FLOAT32* audio_real_buff[],
+ FLOAT32* audio_imag_buff[],
+ ia_parametric_drc_params_struct* pstr_parametric_drc_params,
+ ia_parametric_drc_instance_params_struct*
+ pstr_parametric_drc_instance_params);
WORD32
-impd_parametric_ffwd_type_drc_process(FLOAT32* audio_in_out_buf[],
- FLOAT32* audio_real_buff[],
- FLOAT32* audio_imag_buff[],
- WORD32 nodeIdx,
- ia_parametric_drc_type_ff_params_struct* pstr_parametric_ffwd_type_drc_params,
- ia_spline_nodes_struct* str_spline_nodes);
+impd_parametric_ffwd_type_drc_process(FLOAT32* audio_in_out_buf[],
+ FLOAT32* audio_real_buff[],
+ FLOAT32* audio_imag_buff[],
+ WORD32 nodeIdx,
+ ia_parametric_drc_type_ff_params_struct*
+ pstr_parametric_ffwd_type_drc_params,
+ ia_spline_nodes_struct* str_spline_nodes);
WORD32
-impd_parametric_lim_type_drc_process(FLOAT32* audio_in_out_buf[],
- FLOAT32 loudness_normalization_gain_db,
- ia_parametric_drc_type_lim_params_struct* pstr_parametric_lim_type_drc_params,
- FLOAT32* lpcm_gains);
-
+impd_parametric_lim_type_drc_process(FLOAT32* audio_in_out_buf[],
+ FLOAT32 loudness_normalization_gain_db,
+ ia_parametric_drc_type_lim_params_struct*
+ pstr_parametric_lim_type_drc_params,
+ FLOAT32* lpcm_gains);
#ifdef __cplusplus
}
#endif
#endif
-
diff --git a/decoder/drc_src/impd_type_def.h b/decoder/drc_src/impd_type_def.h
index f77a1cb..6ac933b 100644
--- a/decoder/drc_src/impd_type_def.h
+++ b/decoder/drc_src/impd_type_def.h
@@ -24,91 +24,89 @@
/****************************************************************************/
/* types type define prefix examples bytes */
/************************ *********** ****** **************** ***** */
-typedef char CHAR8 ;/* c CHAR8 c_name 1 */
-typedef char * pCHAR8 ;/* pc pCHAR8 pc_nmae 1 */
+typedef char CHAR8; /* c CHAR8 c_name 1 */
+typedef char* pCHAR8; /* pc pCHAR8 pc_nmae 1 */
-typedef signed char WORD8 ;/* b WORD8 b_name 1 */
-typedef signed char * pWORD8 ;/* pb pWORD8 pb_nmae 1 */
+typedef signed char WORD8; /* b WORD8 b_name 1 */
+typedef signed char* pWORD8; /* pb pWORD8 pb_nmae 1 */
-typedef unsigned char UWORD8 ;/* ub UWORD8 ub_count 1 */
-typedef unsigned char * pUWORD8 ;/* pub pUWORD8 pub_count 1 */
+typedef unsigned char UWORD8; /* ub UWORD8 ub_count 1 */
+typedef unsigned char* pUWORD8; /* pub pUWORD8 pub_count 1 */
-typedef signed short WORD16 ;/* s WORD16 s_count 2 */
-typedef signed short * pWORD16 ;/* ps pWORD16 ps_count 2 */
-typedef unsigned short UWORD16 ;/* us UWORD16 us_count 2 */
-typedef unsigned short * pUWORD16;/* pus pUWORD16 pus_count 2 */
+typedef signed short WORD16; /* s WORD16 s_count 2 */
+typedef signed short* pWORD16; /* ps pWORD16 ps_count 2 */
+typedef unsigned short UWORD16; /* us UWORD16 us_count 2 */
+typedef unsigned short* pUWORD16; /* pus pUWORD16 pus_count 2 */
-typedef signed int WORD24 ;/* k WORD24 k_count 3 */
-typedef signed int * pWORD24 ;/* pk pWORD24 pk_count 3 */
-typedef unsigned int UWORD24 ;/* uk UWORD24 uk_count 3 */
-typedef unsigned int * pUWORD24;/* puk pUWORD24 puk_count 3 */
+typedef signed int WORD24; /* k WORD24 k_count 3 */
+typedef signed int* pWORD24; /* pk pWORD24 pk_count 3 */
+typedef unsigned int UWORD24; /* uk UWORD24 uk_count 3 */
+typedef unsigned int* pUWORD24; /* puk pUWORD24 puk_count 3 */
-typedef signed int WORD32 ;/* i WORD32 i_count 4 */
-typedef signed int * pWORD32 ;/* pi pWORD32 pi_count 4 */
-typedef unsigned int UWORD32 ;/* ui UWORD32 ui_count 4 */
-typedef unsigned int * pUWORD32;/* pui pUWORD32 pui_count 4 */
+typedef signed int WORD32; /* i WORD32 i_count 4 */
+typedef signed int* pWORD32; /* pi pWORD32 pi_count 4 */
+typedef unsigned int UWORD32; /* ui UWORD32 ui_count 4 */
+typedef unsigned int* pUWORD32; /* pui pUWORD32 pui_count 4 */
#ifdef WIN32
#ifndef ECLIPSE
-typedef signed __int64 WORD40 ;/* m WORD40 m_count 5 */
-typedef signed __int64 * pWORD40 ;/* pm pWORD40 pm_count 5 */
-typedef unsigned __int64 UWORD40 ;/* um UWORD40 um_count 5 */
-typedef unsigned __int64 * pUWORD40;/* pum pUWORD40 pum_count 5 */
-
-typedef signed __int64 WORD64 ;/* h WORD64 h_count 8 */
-typedef signed __int64 * pWORD64 ;/* ph pWORD64 ph_count 8 */
-typedef unsigned __int64 UWORD64 ;/* uh UWORD64 uh_count 8 */
-typedef unsigned __int64 * pUWORD64;/* puh pUWORD64 puh_count 8 */
+typedef signed __int64 WORD40; /* m WORD40 m_count 5 */
+typedef signed __int64* pWORD40; /* pm pWORD40 pm_count 5 */
+typedef unsigned __int64 UWORD40; /* um UWORD40 um_count 5 */
+typedef unsigned __int64* pUWORD40; /* pum pUWORD40 pum_count 5 */
+
+typedef signed __int64 WORD64; /* h WORD64 h_count 8 */
+typedef signed __int64* pWORD64; /* ph pWORD64 ph_count 8 */
+typedef unsigned __int64 UWORD64; /* uh UWORD64 uh_count 8 */
+typedef unsigned __int64* pUWORD64; /* puh pUWORD64 puh_count 8 */
#else
-typedef signed long long WORD40 ;/* m WORD40 m_count 5 */
-typedef signed long long * pWORD40 ;/* pm pWORD40 pm_count 5 */
-typedef unsigned long long UWORD40 ;/* um UWORD40 um_count 5 */
-typedef unsigned long long * pUWORD40;/* pum pUWORD40 pum_count 5 */
-
-typedef signed long long WORD64 ;/* h WORD64 h_count 8 */
-typedef signed long long * pWORD64 ;/* ph pWORD64 ph_count 8 */
-typedef unsigned long long UWORD64 ;/* uh UWORD64 uh_count 8 */
-typedef unsigned long long * pUWORD64;/* puh pUWORD64 puh_count 8 */
+typedef signed long long WORD40; /* m WORD40 m_count 5 */
+typedef signed long long* pWORD40; /* pm pWORD40 pm_count 5 */
+typedef unsigned long long UWORD40; /* um UWORD40 um_count 5 */
+typedef unsigned long long* pUWORD40; /* pum pUWORD40 pum_count 5 */
+
+typedef signed long long WORD64; /* h WORD64 h_count 8 */
+typedef signed long long* pWORD64; /* ph pWORD64 ph_count 8 */
+typedef unsigned long long UWORD64; /* uh UWORD64 uh_count 8 */
+typedef unsigned long long* pUWORD64; /* puh pUWORD64 puh_count 8 */
#endif
#else
-typedef signed long long WORD40 ;/* m WORD40 m_count 5 */
-typedef signed long long * pWORD40 ;/* pm pWORD40 pm_count 5 */
-typedef unsigned long long UWORD40 ;/* um UWORD40 um_count 5 */
-typedef unsigned long long * pUWORD40;/* pum pUWORD40 pum_count 5 */
+typedef signed long long WORD40; /* m WORD40 m_count 5 */
+typedef signed long long* pWORD40; /* pm pWORD40 pm_count 5 */
+typedef unsigned long long UWORD40; /* um UWORD40 um_count 5 */
+typedef unsigned long long* pUWORD40; /* pum pUWORD40 pum_count 5 */
-typedef signed long long WORD64 ;/* h WORD64 h_count 8 */
-typedef signed long long * pWORD64 ;/* ph pWORD64 ph_count 8 */
-typedef unsigned long long UWORD64 ;/* uh UWORD64 uh_count 8 */
-typedef unsigned long long * pUWORD64;/* puh pUWORD64 puh_count 8 */
+typedef signed long long WORD64; /* h WORD64 h_count 8 */
+typedef signed long long* pWORD64; /* ph pWORD64 ph_count 8 */
+typedef unsigned long long UWORD64; /* uh UWORD64 uh_count 8 */
+typedef unsigned long long* pUWORD64; /* puh pUWORD64 puh_count 8 */
#endif
+typedef float FLOAT32; /* f FLOAT32 f_count 4 */
+typedef float* pFLOAT32; /* pf pFLOAT32 pf_count 4 */
+typedef double FLOAT64; /* d UFLOAT64 d_count 8 */
+typedef double* pFlOAT64; /* pd pFLOAT64 pd_count 8 */
-typedef float FLOAT32 ;/* f FLOAT32 f_count 4 */
-typedef float * pFLOAT32;/* pf pFLOAT32 pf_count 4 */
-typedef double FLOAT64 ;/* d UFLOAT64 d_count 8 */
-typedef double * pFlOAT64;/* pd pFLOAT64 pd_count 8 */
-
-typedef void VOID ;/* v VOID v_flag 4 */
-typedef void * pVOID ;/* pv pVOID pv_flag 4 */
+typedef void VOID; /* v VOID v_flag 4 */
+typedef void* pVOID; /* pv pVOID pv_flag 4 */
/* variable size types: platform optimized implementation */
-typedef signed int BOOL ;/* bool BOOL bool_true */
-typedef unsigned int UBOOL ;/* ubool BOOL ubool_true */
-typedef signed int FLAG ;/* flag FLAG flag_false */
-typedef unsigned int UFLAG ;/* uflag FLAG uflag_false */
-typedef signed int LOOPIDX ;/* lp LOOPIDX lp_index */
-typedef unsigned int ULOOPIDX;/* ulp SLOOPIDX ulp_index */
-typedef signed int WORD ;/* lp LOOPIDX lp_index */
-typedef unsigned int UWORD ;/* ulp SLOOPIDX ulp_index */
-
-typedef LOOPIDX LOOPINDEX; /* lp LOOPIDX lp_index */
-typedef ULOOPIDX ULOOPINDEX;/* ulp SLOOPIDX ulp_index */
+typedef signed int BOOL; /* bool BOOL bool_true */
+typedef unsigned int UBOOL; /* ubool BOOL ubool_true */
+typedef signed int FLAG; /* flag FLAG flag_false */
+typedef unsigned int UFLAG; /* uflag FLAG uflag_false */
+typedef signed int LOOPIDX; /* lp LOOPIDX lp_index */
+typedef unsigned int ULOOPIDX; /* ulp SLOOPIDX ulp_index */
+typedef signed int WORD; /* lp LOOPIDX lp_index */
+typedef unsigned int UWORD; /* ulp SLOOPIDX ulp_index */
+
+typedef LOOPIDX LOOPINDEX; /* lp LOOPIDX lp_index */
+typedef ULOOPIDX ULOOPINDEX; /* ulp SLOOPIDX ulp_index */
#define SIZE_T size_t
#define PLATFORM_INLINE __inline
#endif
-
diff --git a/decoder/generic/ixheaacd_function_selector_generic.c b/decoder/generic/ixheaacd_function_selector_generic.c
index 8fdb4b9..08aac1b 100644
--- a/decoder/generic/ixheaacd_function_selector_generic.c
+++ b/decoder/generic/ixheaacd_function_selector_generic.c
@@ -230,20 +230,20 @@ VOID(*ixheaacd_aac_ld_dec_rearrange)
(WORD32 *ip, WORD32 *op, WORD32 mdct_len_2,
UWORD8 *re_arr_tab) = &ixheaacd_rearrange_dec;
-VOID (*ixheaacd_fft32x32_ld)
+VOID(*ixheaacd_fft32x32_ld)
(ia_aac_dec_imdct_tables_struct *imdct_tables_ptr, WORD32 npoints,
WORD32 *ptr_x, WORD32 *ptr_y) = ixheaacd_fft32x32_ld_dec;
-VOID (*ixheaacd_fft32x32_ld2)
+VOID(*ixheaacd_fft32x32_ld2)
(ia_aac_dec_imdct_tables_struct *imdct_tables_ptr, WORD32 npoints,
WORD32 *ptr_x, WORD32 *ptr_y) = &ixheaacd_fft32x32_ld_dec;
WORD16 (*ixheaacd_neg_expo_inc)(WORD16 neg_expo) = &ixheaacd_neg_expo_inc_dec;
-VOID (*ixheaacd_inv_dit_fft_8pt)
+VOID(*ixheaacd_inv_dit_fft_8pt)
(WORD32 *x, WORD32 *real, WORD32 *imag) = &ixheaacd_inv_dit_fft_8pt_dec;
-VOID (*ixheaacd_scale_factor_process)
+VOID(*ixheaacd_scale_factor_process)
(WORD32 *x_invquant, WORD16 *scale_fact, WORD no_band, WORD8 *width,
WORD32 *scale_tables_ptr, WORD32 total_channels, WORD32 object_type,
WORD32 aac_sf_data_resil_flag) = &ixheaacd_scale_factor_process_dec;
diff --git a/decoder/generic/ixheaacd_qmf_dec_generic.c b/decoder/generic/ixheaacd_qmf_dec_generic.c
index a813a3c..20e19a8 100644
--- a/decoder/generic/ixheaacd_qmf_dec_generic.c
+++ b/decoder/generic/ixheaacd_qmf_dec_generic.c
@@ -706,8 +706,8 @@ VOID ixheaacd_cplx_anal_qmffilt(const WORD16 *time_sample_buf,
}
VOID ixheaacd_inv_modulation_lp(WORD32 *qmf_real, WORD16 *filter_states,
- ia_sbr_qmf_filter_bank_struct *syn_qmf,
- ia_qmf_dec_tables_struct *qmf_dec_tables_ptr) {
+ ia_sbr_qmf_filter_bank_struct *syn_qmf,
+ ia_qmf_dec_tables_struct *qmf_dec_tables_ptr) {
WORD32 L = syn_qmf->no_channels;
const WORD32 M = (L >> 1);
WORD32 *dct_in = qmf_real;
@@ -723,9 +723,9 @@ VOID ixheaacd_inv_modulation_lp(WORD32 *qmf_real, WORD16 *filter_states,
filter_states[3 * M] = 0;
}
-VOID ixheaacd_inv_emodulation(
- WORD32 *qmf_real, ia_sbr_qmf_filter_bank_struct *syn_qmf,
- ia_qmf_dec_tables_struct *qmf_dec_tables_ptr) {
+VOID ixheaacd_inv_emodulation(WORD32 *qmf_real,
+ ia_sbr_qmf_filter_bank_struct *syn_qmf,
+ ia_qmf_dec_tables_struct *qmf_dec_tables_ptr) {
if (syn_qmf->no_channels == 64)
ixheaacd_cos_sin_mod(qmf_real, syn_qmf, qmf_dec_tables_ptr->w_32,
qmf_dec_tables_ptr->dig_rev_table2_32);
@@ -1675,7 +1675,7 @@ VOID ixheaacd_radix4bfly(const WORD16 *w, WORD32 *x, WORD32 index1,
VOID ixheaacd_postradixcompute4(WORD32 *ptr_y, WORD32 *ptr_x,
const WORD32 *p_dig_rev_tbl, WORD32 npoints) {
- WORD32 i, k;
+ WORD32 i, k;
WORD32 h2;
WORD32 xh0_0, xh1_0, xl0_0, xl1_0;
WORD32 xh0_1, xh1_1, xl0_1, xl1_1;
@@ -1782,7 +1782,7 @@ VOID ixheaacd_postradixcompute4(WORD32 *ptr_y, WORD32 *ptr_x,
VOID ixheaacd_postradixcompute2(WORD32 *ptr_y, WORD32 *ptr_x,
const WORD32 *pdig_rev_tbl, WORD32 npoints) {
- WORD32 i, k;
+ WORD32 i, k;
WORD32 h2;
WORD32 x_0, x_1, x_2, x_3;
WORD32 x_4, x_5, x_6, x_7;
diff --git a/decoder/ixheaacd_aac_config.h b/decoder/ixheaacd_aac_config.h
index c55bb6b..bfe7a39 100644
--- a/decoder/ixheaacd_aac_config.h
+++ b/decoder/ixheaacd_aac_config.h
@@ -28,7 +28,7 @@
#define IA_ENHAACPLUS_DEC_CONFIG_PARAM_SBR_MODE 0x0005
#define IA_ENHAACPLUS_DEC_CONFIG_PARAM_DRC_EFFECT_TYPE 0x0006
#define IA_ENHAACPLUS_DEC_CONFIG_PARAM_DRC_TARGET_LOUDNESS 0x0007
-#define IA_ENHAACPLUS_DEC_CONFIG_PARAM_DRC_LOUD_NORM 0x0008
+#define IA_ENHAACPLUS_DEC_CONFIG_PARAM_DRC_LOUD_NORM 0x0008
#define IA_ENHAACPLUS_DEC_CONFIG_PARAM_DOWNMIX 0x0009
#define IA_ENHAACPLUS_DEC_CONFIG_PARAM_OUT08KHZ 0x000A
diff --git a/decoder/ixheaacd_aac_imdct.c b/decoder/ixheaacd_aac_imdct.c
index ab8d0dd..68d5bf3 100644
--- a/decoder/ixheaacd_aac_imdct.c
+++ b/decoder/ixheaacd_aac_imdct.c
@@ -49,11 +49,11 @@
(j) = _ >> (m); \
} while (0)
-#define MPYHIRC(x, y) \
- \
-(((WORD32)((short)(x >> 16) * (unsigned short)(y & 0x0000FFFF) + 0x4000) >> \
- 15) + \
- ((WORD32)((short)(x >> 16) * (short)((y) >> 16)) << 1))
+#define MPYHIRC(x, y) \
+ \
+ (((WORD32)((short)(x >> 16) * (unsigned short)(y & 0x0000FFFF) + 0x4000) >> \
+ 15) + \
+ ((WORD32)((short)(x >> 16) * (short)((y) >> 16)) << 1))
#define MPYLUHS(x, y) \
((WORD32)((unsigned short)(x & 0x0000FFFF) * (short)(y >> 16)))
@@ -78,7 +78,7 @@ static PLATFORM_INLINE WORD32 ixheaacd_shr32_drc(WORD32 a, WORD32 b) {
else
out_val = 0;
} else {
- a = ixheaacd_add32_sat(a,(1 << (b - 1)));
+ a = ixheaacd_add32_sat(a, (1 << (b - 1)));
out_val = (WORD32)a >> b;
}
diff --git a/decoder/ixheaacd_aac_tns.c b/decoder/ixheaacd_aac_tns.c
index c00a523..99f8c05 100644
--- a/decoder/ixheaacd_aac_tns.c
+++ b/decoder/ixheaacd_aac_tns.c
@@ -256,8 +256,10 @@ VOID ixheaacd_tns_ar_filter_fixed_dec(WORD32 *spectrum, WORD32 size, WORD32 inc,
}
VOID ixheaacd_tns_ar_filter_fixed_non_neon_armv7(WORD32 *spectrum, WORD32 size,
- WORD32 inc, WORD32 *lpc, WORD32 order,
- WORD32 shift_value, WORD scale_spec) {
+ WORD32 inc, WORD32 *lpc,
+ WORD32 order,
+ WORD32 shift_value,
+ WORD scale_spec) {
WORD32 i, j;
WORD32 y, state[MAX_ORDER + 1];
WORD32 acc;
diff --git a/decoder/ixheaacd_aacdecoder.c b/decoder/ixheaacd_aacdecoder.c
index 69d060c..8af03ee 100644
--- a/decoder/ixheaacd_aacdecoder.c
+++ b/decoder/ixheaacd_aacdecoder.c
@@ -647,9 +647,8 @@ WORD32 ixheaacd_aacdec_decodeframe(
it_bit_buff, ptr_ics_info, object_type,
aac_dec_handle->samples_per_frame, LEFT);
- if(temp!=0)
- {
- return temp;
+ if (temp != 0) {
+ return temp;
}
}
}
@@ -706,8 +705,9 @@ WORD32 ixheaacd_aacdec_decodeframe(
ixheaacd_extension_payload(it_bit_buff, cnt_bits);
}
- if (((object_type == AOT_ER_AAC_ELD) || (object_type == AOT_ER_AAC_LD))
- && (p_obj_exhaacplus_dec->aac_config.ld_decoder != 1)) {
+ if (((object_type == AOT_ER_AAC_ELD) ||
+ (object_type == AOT_ER_AAC_LD)) &&
+ (p_obj_exhaacplus_dec->aac_config.ld_decoder != 1)) {
if (it_bit_buff->cnt_bits) {
WORD32 alignment = it_bit_buff->bit_pos & 0x07;
it_bit_buff->cnt_bits = (it_bit_buff->cnt_bits + alignment) & 7;
diff --git a/decoder/ixheaacd_acelp_decode.c b/decoder/ixheaacd_acelp_decode.c
index aaa168c..73a7c9f 100644
--- a/decoder/ixheaacd_acelp_decode.c
+++ b/decoder/ixheaacd_acelp_decode.c
@@ -506,8 +506,7 @@ WORD32 ixheaacd_acelp_alias_cnx(ia_usac_data_struct *usac_data,
ixheaacd_preemphsis_tool_float(code, TILT_CODE, LEN_SUBFR, tmp);
i = pitch_lag;
if (pitch_lag_frac > 2) i++;
- if(i >= 0)
- ixheaacd_acelp_pitch_sharpening(code, i);
+ if (i >= 0) ixheaacd_acelp_pitch_sharpening(code, i);
index = pstr_td_frame_data->gains[k * 4 + subfr_nb];
diff --git a/decoder/ixheaacd_api.c b/decoder/ixheaacd_api.c
index 88eaaac..afc4510 100644
--- a/decoder/ixheaacd_api.c
+++ b/decoder/ixheaacd_api.c
@@ -143,8 +143,9 @@ IA_ERRORCODE ixheaacd_dec_mem_api(
UWORD32 *meminfo =
(UWORD32 *)p_obj_exhaacplus_dec->p_mem_info_aac + i_idx;
UWORD32 pers_size = meminfo[0];
- p_temp = p_temp + pers_size - (sizeof(ia_dec_data_struct) +
- sizeof(ia_audio_specific_config_struct) + (8300));
+ p_temp = p_temp + pers_size -
+ (sizeof(ia_dec_data_struct) +
+ sizeof(ia_audio_specific_config_struct) + (8300));
p_obj_exhaacplus_dec->p_state_aac = pv_value;
memset(p_obj_exhaacplus_dec->p_state_aac, 0,
@@ -153,8 +154,9 @@ IA_ERRORCODE ixheaacd_dec_mem_api(
p_obj_exhaacplus_dec->p_state_aac->pstr_dec_data = p_temp;
p_obj_exhaacplus_dec->p_state_aac->ia_audio_specific_config =
p_temp + sizeof(ia_dec_data_struct);
-p_obj_exhaacplus_dec->p_state_aac->header_ptr = p_temp + sizeof(ia_dec_data_struct)
- + sizeof(ia_audio_specific_config_struct);
+ p_obj_exhaacplus_dec->p_state_aac->header_ptr =
+ p_temp + sizeof(ia_dec_data_struct) +
+ sizeof(ia_audio_specific_config_struct);
}
} else {
@@ -665,25 +667,25 @@ IA_ERRORCODE ixheaacd_dec_api(pVOID p_ia_enhaacplus_dec_obj, WORD32 i_cmd,
}
case IA_ENHAACPLUS_DEC_DRC_EFFECT_TYPE: {
- if (((*pui_value_signed) > 8) || ((*pui_value_signed) < -1) ) {
- p_obj_exhaacplus_dec->aac_config.ui_effect_type = -1;
- return (IA_ENHAACPLUS_DEC_CONFIG_NON_FATAL_INVALID_EFFECT_TYPE);
- }
- p_obj_exhaacplus_dec->aac_config.ui_effect_type = *pui_value_signed;
- break;
+ if (((*pui_value_signed) > 8) || ((*pui_value_signed) < -1)) {
+ p_obj_exhaacplus_dec->aac_config.ui_effect_type = -1;
+ return (IA_ENHAACPLUS_DEC_CONFIG_NON_FATAL_INVALID_EFFECT_TYPE);
+ }
+ p_obj_exhaacplus_dec->aac_config.ui_effect_type = *pui_value_signed;
+ break;
}
case IA_ENHAACPLUS_DEC_DRC_TARGET_LOUDNESS: {
- if(*pui_value_signed>=0)
- {
- p_obj_exhaacplus_dec->aac_config.ui_loud_norm_flag=1;
- }
- *pui_value_signed = -(*pui_value_signed >> 2);
- if (((*pui_value_signed) > 0) ||((*pui_value_signed) < -63)) {
- p_obj_exhaacplus_dec->aac_config.ui_target_loudness = 0;
- return (IA_ENHAACPLUS_DEC_CONFIG_NONFATAL_INVALID_TARGET_LOUDNESS);
- }
- p_obj_exhaacplus_dec->aac_config.ui_target_loudness = *pui_value_signed;
- break;
+ if (*pui_value_signed >= 0) {
+ p_obj_exhaacplus_dec->aac_config.ui_loud_norm_flag = 1;
+ }
+ *pui_value_signed = -(*pui_value_signed >> 2);
+ if (((*pui_value_signed) > 0) || ((*pui_value_signed) < -63)) {
+ p_obj_exhaacplus_dec->aac_config.ui_target_loudness = 0;
+ return (IA_ENHAACPLUS_DEC_CONFIG_NONFATAL_INVALID_TARGET_LOUDNESS);
+ }
+ p_obj_exhaacplus_dec->aac_config.ui_target_loudness =
+ *pui_value_signed;
+ break;
}
default: { return IA_ENHAACPLUS_DEC_API_FATAL_INVALID_CONFIG_PARAM; }
}
@@ -697,8 +699,7 @@ IA_ERRORCODE ixheaacd_dec_api(pVOID p_ia_enhaacplus_dec_obj, WORD32 i_cmd,
if (i_idx >= 0 && i_idx <= 8) {
*pui_value = pvalue[i_idx];
- }
- else if (IA_ENHAACPLUS_DEC_CONFIG_EXT_ELE_PTR == i_idx) {
+ } else if (IA_ENHAACPLUS_DEC_CONFIG_EXT_ELE_PTR == i_idx) {
ia_audio_specific_config_struct *ptr_audio_specific_config =
((ia_audio_specific_config_struct *)
p_obj_exhaacplus_dec->p_state_aac->ia_audio_specific_config);
@@ -767,8 +768,7 @@ IA_ERRORCODE ixheaacd_dec_api(pVOID p_ia_enhaacplus_dec_obj, WORD32 i_cmd,
p_obj_exhaacplus_dec->p_state_aac->ia_audio_specific_config);
*pp_value = ptr_audio_specific_config->str_usac_config
.str_usac_dec_config.usac_ext_gain_payload_buf;
- }
- else {
+ } else {
return IA_ENHAACPLUS_DEC_API_FATAL_INVALID_CONFIG_PARAM;
}
break;
@@ -910,18 +910,19 @@ IA_ERRORCODE ixheaacd_decoder_flush_api(
sizeof(ia_aac_dec_state_struct));
{
pUWORD8 p_temp = (pUWORD8)p_obj_exhaacplus_dec->p_state_aac;
- UWORD32 *meminfo =
- (UWORD32 *)p_obj_exhaacplus_dec->p_mem_info_aac;
+ UWORD32 *meminfo = (UWORD32 *)p_obj_exhaacplus_dec->p_mem_info_aac;
UWORD32 pers_size = meminfo[0];
- p_temp = p_temp + pers_size - (sizeof(ia_dec_data_struct) +
- sizeof(ia_audio_specific_config_struct) + (8300));
+ p_temp = p_temp + pers_size -
+ (sizeof(ia_dec_data_struct) +
+ sizeof(ia_audio_specific_config_struct) + (8300));
p_obj_exhaacplus_dec->p_state_aac->pstr_dec_data = p_temp;
p_obj_exhaacplus_dec->p_state_aac->ia_audio_specific_config =
p_temp + sizeof(ia_dec_data_struct);
-p_obj_exhaacplus_dec->p_state_aac->header_ptr = p_temp + sizeof(ia_dec_data_struct)
- + sizeof(ia_audio_specific_config_struct);
-}
+ p_obj_exhaacplus_dec->p_state_aac->header_ptr =
+ p_temp + sizeof(ia_dec_data_struct) +
+ sizeof(ia_audio_specific_config_struct);
+ }
memset(&(p_obj_exhaacplus_dec->aac_config), 0,
sizeof(ia_aac_dec_config_struct));
@@ -1496,9 +1497,9 @@ IA_ERRORCODE ixheaacd_dec_init(
p_state_enhaacplus_dec->ptr_bit_stream =
p_state_enhaacplus_dec->pstr_bit_buf;
- if (p_state_enhaacplus_dec->s_adts_hdr_present) { //rajat
- if (p_obj_exhaacplus_dec->aac_config.ld_decoder == 1)
- p_state_enhaacplus_dec->audio_object_type = 23;
+ if (p_state_enhaacplus_dec->s_adts_hdr_present) { // rajat
+ if (p_obj_exhaacplus_dec->aac_config.ld_decoder == 1)
+ p_state_enhaacplus_dec->audio_object_type = 23;
}
if ((p_state_enhaacplus_dec->audio_object_type == AOT_ER_AAC_ELD) ||
@@ -2340,7 +2341,7 @@ IA_ERRORCODE ixheaacd_dec_execute(
{ it_bit_buff->initial_cnt_bits = it_bit_buff->cnt_bits; }
if (p_state_enhaacplus_dec->audio_object_type == AOT_ER_AAC_LD) {
- if(p_state_enhaacplus_dec->s_adts_hdr_present)
+ if (p_state_enhaacplus_dec->s_adts_hdr_present)
p_state_enhaacplus_dec->frame_size = adts.aac_frame_length;
}
diff --git a/decoder/ixheaacd_arith_dec.c b/decoder/ixheaacd_arith_dec.c
index c732f3d..af9f4c0 100644
--- a/decoder/ixheaacd_arith_dec.c
+++ b/decoder/ixheaacd_arith_dec.c
@@ -47,7 +47,6 @@
#include "ixheaacd_error_codes.h"
-
#define ARITH_ESCAPE 16
UWORD16 ixheaacd_ari_cf_r[3][4] = {
@@ -1673,8 +1672,6 @@ VOID ixheaacd_copy_to_bitbuff(ia_bit_buf_struct *it_bit_buff_src,
it_bit_buff_dst->size = it_bit_buff_src->size;
it_bit_buff_dst->max_size = it_bit_buff_src->max_size;
-
-
}
static WORD32 ixheaacd_arith_get_context(WORD8 *c_prev, WORD8 *c_pres,
@@ -1826,8 +1823,7 @@ WORD32 ixheaacd_arth_decoding_level2(ia_bit_buf_struct *it_bit_buff,
pki = ixheaacd_arith_get_pk(s1 + ixheaacd_esc_nb_offset[esc_nb]);
bit_count = ixheaacd_arith_decode(&it_bit_buff_temp, bit_count, &m, &as,
ixheaacd_ari_cf_m[pki], 17);
- if(bit_count == -1)
- {
+ if (bit_count == -1) {
return -1;
}
@@ -1861,17 +1857,14 @@ WORD32 ixheaacd_arth_decoding_level2(ia_bit_buf_struct *it_bit_buff,
WORD32 lsbidx = (a == 0) ? 1 : ((b == 0) ? 0 : 2);
bit_count = ixheaacd_arith_decode(&it_bit_buff_temp, bit_count, &m, &as,
ixheaacd_ari_cf_r[lsbidx], 4);
- if(bit_count == -1)
- {
+ if (bit_count == -1) {
return -1;
}
a = (a << 1) | (m & 1);
b = (b << 1) | ((m >> 1) & 1);
}
- if((a > (8183)) || (b > (8183)))
- return -1;
- if((a < (-8183)) || (b < (-8183)))
- return -1;
+ if ((a > (8183)) || (b > (8183))) return -1;
+ if ((a < (-8183)) || (b < (-8183))) return -1;
quant[2 * i + 0] = a;
quant[2 * i + 1] = b;
temp = a + b + 1;
@@ -1883,8 +1876,8 @@ WORD32 ixheaacd_arth_decoding_level2(ia_bit_buf_struct *it_bit_buff,
}
bit_count -= 16 - 2;
- if(bit_count > it_bit_buff->cnt_bits)
- return IA_ENHAACPLUS_DEC_EXE_NONFATAL_INSUFFICIENT_INPUT_BYTES;
+ if (bit_count > it_bit_buff->cnt_bits)
+ return IA_ENHAACPLUS_DEC_EXE_NONFATAL_INSUFFICIENT_INPUT_BYTES;
if (bit_count > 0) {
bit_count_5 = bit_count >> 5;
@@ -1910,10 +1903,8 @@ WORD32 ixheaacd_arth_decoding_level2(ia_bit_buf_struct *it_bit_buff,
m = (m << 1) * temp1;
temp1 = m - (temp1);
}
- if((temp0 > (8183)) || (temp1 > (8183)))
- return -1;
- if((temp0 < (-8183)) || (temp1 < (-8183)))
- return -1;
+ if ((temp0 > (8183)) || (temp1 > (8183))) return -1;
+ if ((temp0 < (-8183)) || (temp1 < (-8183))) return -1;
*quant++ = temp0;
*quant++ = temp1;
}
@@ -1976,7 +1967,7 @@ static VOID ixheaacd_esc_iquant(WORD32 *q, WORD32 *coef, WORD32 noise_level,
coef[i] = flag * (coef[i] << 1);
}
- temp = ixheaacd_mult64_sat(fac_fix , (WORD64)coef[i]);
+ temp = ixheaacd_mult64_sat(fac_fix, (WORD64)coef[i]);
coef[i] = (WORD32)(temp >> 22);
}
diff --git a/decoder/ixheaacd_avq_dec.c b/decoder/ixheaacd_avq_dec.c
index edd6a96..fae899d 100644
--- a/decoder/ixheaacd_avq_dec.c
+++ b/decoder/ixheaacd_avq_dec.c
@@ -158,10 +158,10 @@ VOID ixheaacd_voronoi_idx_dec(WORD32 *kv, WORD32 m, WORD32 *y, WORD32 count) {
}
y[0] += (4 * kv[0] + sum);
z[0] = (y[0] - 2) >> count;
- if(m != 0)
- rem1[0] = (y[0] - 2) % m;
+ if (m != 0)
+ rem1[0] = (y[0] - 2) % m;
else
- rem1[0] = (y[0] - 2);
+ rem1[0] = (y[0] - 2);
memcpy(rem2, rem1, 8 * sizeof(WORD32));
diff --git a/decoder/ixheaacd_basic_ops32.h b/decoder/ixheaacd_basic_ops32.h
index d49112e..b25972f 100644
--- a/decoder/ixheaacd_basic_ops32.h
+++ b/decoder/ixheaacd_basic_ops32.h
@@ -319,13 +319,9 @@ static PLATFORM_INLINE WORD32 ixheaacd_negate32(WORD32 a) {
static PLATFORM_INLINE WORD32 ixheaacd_negate32_sat(WORD32 a) {
WORD32 neg_val;
-
- if (a == MIN_32)
- {
+ if (a == MIN_32) {
neg_val = MAX_32;
- }
- else
- {
+ } else {
neg_val = -a;
}
return neg_val;
diff --git a/decoder/ixheaacd_basic_ops40.h b/decoder/ixheaacd_basic_ops40.h
index d5d5ee8..f653505 100644
--- a/decoder/ixheaacd_basic_ops40.h
+++ b/decoder/ixheaacd_basic_ops40.h
@@ -327,21 +327,20 @@ static PLATFORM_INLINE WORD64 ixheaacd_mult64(WORD32 a, WORD32 b) {
static PLATFORM_INLINE WORD64 ixheaacd_mult64_sat(WORD64 a, WORD64 b) {
WORD64 result;
- if (a > 0 && b > 0 && a > MAX_64 / b) return MAX_64;
- if (a < 0 && b > 0 && a < MIN_64 / b) return MIN_64;
- if (a > 0 && b < 0 && b < MIN_64 / a) return MIN_64;
- if (a < 0 && b < 0 && a < MAX_64 / b) return MAX_64;
+ if (a > 0 && b > 0 && a > MAX_64 / b) return MAX_64;
+ if (a < 0 && b > 0 && a < MIN_64 / b) return MIN_64;
+ if (a > 0 && b < 0 && b < MIN_64 / a) return MIN_64;
+ if (a < 0 && b < 0 && a < MAX_64 / b) return MAX_64;
result = a * b;
return (result);
}
static PLATFORM_INLINE WORD64 ixheaacd_add64_sat(WORD64 a, WORD64 b) {
- WORD64 result , comp;
- result = (a < 0) ? MIN_64 : MAX_64;
+ WORD64 result, comp;
+ result = (a < 0) ? MIN_64 : MAX_64;
comp = result - a;
- if ((a < 0) == (b > comp))
- result = a + b;
+ if ((a < 0) == (b > comp)) result = a + b;
return (result);
}
diff --git a/decoder/ixheaacd_block.c b/decoder/ixheaacd_block.c
index 1385922..aa6f22a 100644
--- a/decoder/ixheaacd_block.c
+++ b/decoder/ixheaacd_block.c
@@ -1199,7 +1199,6 @@ VOID ixheaacd_process_single_scf(WORD32 scale_factor, WORD32 *x_invquant,
object_type = 0;
aac_sf_data_resil_flag = 0;
-
if (scale_factor < 24) {
for (j = width; j > 0; j--) {
*x_invquant++ = 0;
diff --git a/decoder/ixheaacd_channel.c b/decoder/ixheaacd_channel.c
index 4ba0836..efe1cf7 100644
--- a/decoder/ixheaacd_channel.c
+++ b/decoder/ixheaacd_channel.c
@@ -213,8 +213,8 @@ static WORD16 ixheaacd_read_block_data(
if (error_code) {
return error_code;
}
- if (aac_sf_data_resil_flag && ((object_type == AOT_ER_AAC_ELD)
- || (object_type == AOT_ER_AAC_LD)))
+ if (aac_sf_data_resil_flag &&
+ ((object_type == AOT_ER_AAC_ELD) || (object_type == AOT_ER_AAC_LD)))
ixheaacd_rvlc_read(it_bit_buff, ptr_aac_dec_channel_info);
else
ixheaacd_read_scale_factor_data(it_bit_buff, ptr_aac_dec_channel_info,
@@ -296,8 +296,7 @@ static WORD16 ixheaacd_read_block_data(
}
WORD16 ixheaacd_ltp_decode(ia_bit_buf_struct *it_bit_buff,
- ia_ics_info_struct *ptr_ics_info,
- WORD32 object_type,
+ ia_ics_info_struct *ptr_ics_info, WORD32 object_type,
WORD32 frame_size, WORD32 ch) {
WORD32 retval = AAC_DEC_OK;
@@ -329,8 +328,7 @@ WORD16 ixheaacd_ltp_decode(ia_bit_buf_struct *it_bit_buff,
WORD16 ixheaacd_ics_read(ia_bit_buf_struct *it_bit_buff,
ia_ics_info_struct *ptr_ics_info,
WORD8 num_swb_window[2], WORD32 object_type,
- WORD32 common_window,
- WORD32 frame_size) {
+ WORD32 common_window, WORD32 frame_size) {
WORD i;
WORD mask;
WORD value = 0;
@@ -510,13 +508,12 @@ WORD16 ixheaacd_individual_ch_stream(
if ((object_type == AOT_ER_AAC_LD) &&
(aac_dec_handle->pstr_aac_dec_ch_info[LEFT]->common_window) &&
(ele_type == ID_CPE)) {
- WORD16 temp = ixheaacd_ltp_decode(
- it_bit_buff, ptr_ics_info, object_type,
- aac_dec_handle->samples_per_frame, 1);
+ WORD16 temp =
+ ixheaacd_ltp_decode(it_bit_buff, ptr_ics_info, object_type,
+ aac_dec_handle->samples_per_frame, 1);
- if(temp!=0)
- {
- return temp;
+ if (temp != 0) {
+ return temp;
}
aac_dec_handle->pstr_aac_dec_ch_info[ch + 1]->str_ics_info.ltp.lag =
ptr_ics_info->ltp2.lag;
diff --git a/decoder/ixheaacd_channelinfo.h b/decoder/ixheaacd_channelinfo.h
index 199079d..1e451c9 100644
--- a/decoder/ixheaacd_channelinfo.h
+++ b/decoder/ixheaacd_channelinfo.h
@@ -330,12 +330,10 @@ typedef struct {
WORD16 ixheaacd_ics_read(ia_bit_buf_struct *it_bit_buff,
ia_ics_info_struct *ptr_ics_info,
WORD8 num_swb_window[2], WORD32 object_type,
- WORD32 common_window,
- WORD32 frame_size);
+ WORD32 common_window, WORD32 frame_size);
WORD16 ixheaacd_ltp_decode(ia_bit_buf_struct *it_bit_buff,
- ia_ics_info_struct *ptr_ics_info,
- WORD32 object_type,
+ ia_ics_info_struct *ptr_ics_info, WORD32 object_type,
WORD32 frame_size, WORD32 ch);
#endif /* #ifndef IXHEAACD_CHANNELINFO_H */
diff --git a/decoder/ixheaacd_common_initfuncs.c b/decoder/ixheaacd_common_initfuncs.c
index 45e4194..bc5f5ff 100644
--- a/decoder/ixheaacd_common_initfuncs.c
+++ b/decoder/ixheaacd_common_initfuncs.c
@@ -142,7 +142,6 @@ ia_bit_buf_struct *ixheaacd_create_bit_buf(ia_bit_buf_struct *it_bit_buff,
it_bit_buff->max_size = it_bit_buff->size;
-
ixheaacd_adts_crc_open(it_bit_buff->pstr_adts_crc_info);
return it_bit_buff;
diff --git a/decoder/ixheaacd_config.h b/decoder/ixheaacd_config.h
index f0c5cd3..7029fd2 100644
--- a/decoder/ixheaacd_config.h
+++ b/decoder/ixheaacd_config.h
@@ -624,7 +624,8 @@ UWORD32 ixheaacd_sbr_ratio(UWORD32 core_sbr_frame_len_idx);
UWORD32 ixheaacd_sbr_params(UWORD32 core_sbr_frame_len_idx,
WORD32 *output_frame_length, WORD32 *block_size,
- WORD32 *output_samples,WORD32 *sampling_freq, UWORD32* sample_freq_indx);
+ WORD32 *output_samples, WORD32 *sampling_freq,
+ UWORD32 *sample_freq_indx);
WORD32 ixheaacd_config(ia_bit_buf_struct *bit_buff,
ia_usac_config_struct *pstr_usac_conf, UINT32 *chan);
diff --git a/decoder/ixheaacd_create.c b/decoder/ixheaacd_create.c
index 8b32040..9091a95 100644
--- a/decoder/ixheaacd_create.c
+++ b/decoder/ixheaacd_create.c
@@ -232,8 +232,7 @@ WORD32 ixheaacd_decode_init(
&aac_dec_handle->pstr_aac_tables->pstr_block_tables
->tns_max_bands_tbl_usac;
-
- for (i = 0; i < 11 ; i++) {
+ for (i = 0; i < 11; i++) {
if (ixheaacd_sampling_boundaries[i] <= sample_rate) break;
}
@@ -257,8 +256,10 @@ WORD32 ixheaacd_decode_init(
usac_data->pstr_usac_winmap[3] = &usac_data->str_only_long_info;
usac_data->pstr_usac_winmap[4] = &usac_data->str_only_long_info;
- if((usac_data->ccfl != 480) && (usac_data->ccfl != 512) && (usac_data->ccfl != 768) && (usac_data->ccfl != 960) &&(usac_data->ccfl != 1024))
- return -1;
+ if ((usac_data->ccfl != 480) && (usac_data->ccfl != 512) &&
+ (usac_data->ccfl != 768) && (usac_data->ccfl != 960) &&
+ (usac_data->ccfl != 1024))
+ return -1;
ixheaacd_info_init(&ixheaacd_samp_rate_info[usac_data->sampling_rate_idx],
usac_data->ccfl, usac_data->pstr_usac_winmap[0],
usac_data->pstr_usac_winmap[2], usac_data->sfb_width_short,
@@ -323,8 +324,8 @@ WORD32 ixheaacd_decode_init(
.str_usac_element_config[ele_id]
.str_usac_mps212_config);
- ixheaacd_mps_create(&aac_dec_handle->mps_dec_handle,
- bs_frame_length, bs_residual_coding, ptr_usac_mps212_config);
+ ixheaacd_mps_create(&aac_dec_handle->mps_dec_handle, bs_frame_length,
+ bs_residual_coding, ptr_usac_mps212_config);
}
break;
}
@@ -371,7 +372,8 @@ WORD32 ixheaacd_dec_data_init(VOID *handle,
&pstr_frame_data->str_layer.sample_rate_layer,
&layer_config->samp_frequency_index);
- pstr_stream_config->sampling_frequency = pstr_frame_data->str_layer.sample_rate_layer;
+ pstr_stream_config->sampling_frequency =
+ pstr_frame_data->str_layer.sample_rate_layer;
pstr_stream_config->samp_frequency_index = layer_config->samp_frequency_index;
num_elements = ptr_usac_config->str_usac_dec_config.num_elements;
@@ -400,8 +402,6 @@ WORD32 ixheaacd_dec_data_init(VOID *handle,
num_out_chan = ptr_usac_config->num_out_channels;
-
-
if (usac_data->ccfl == 768)
pstr_frame_data->str_layer.sample_rate_layer =
4 * pstr_frame_data->str_layer.sample_rate_layer / 3;
@@ -535,28 +535,28 @@ WORD32 ixheaacd_decode_create(ia_exhaacplus_dec_api_struct *handle,
switch (aot) {
case AOT_USAC:
- err = ixheaacd_dec_data_init(handle, pstr_frame_data,
- &(pstr_dec_data->str_usac_data));
-
- switch (pstr_dec_data->str_usac_data.sbr_ratio_idx) {
- case 0:
- handle->aac_config.ui_sbr_mode = 0;
- break;
- case 1:
- handle->aac_config.ui_sbr_mode = 1;
- break;
- case 2:
- handle->aac_config.ui_sbr_mode = 1;
- break;
- case 3:
- handle->aac_config.ui_sbr_mode = 3;
- break;
-
- default:
- handle->aac_config.ui_sbr_mode = 0;
- }
-
- if (err == -1) return -1;
+ err = ixheaacd_dec_data_init(handle, pstr_frame_data,
+ &(pstr_dec_data->str_usac_data));
+
+ switch (pstr_dec_data->str_usac_data.sbr_ratio_idx) {
+ case 0:
+ handle->aac_config.ui_sbr_mode = 0;
+ break;
+ case 1:
+ handle->aac_config.ui_sbr_mode = 1;
+ break;
+ case 2:
+ handle->aac_config.ui_sbr_mode = 1;
+ break;
+ case 3:
+ handle->aac_config.ui_sbr_mode = 3;
+ break;
+
+ default:
+ handle->aac_config.ui_sbr_mode = 0;
+ }
+
+ if (err == -1) return -1;
break;
@@ -595,11 +595,11 @@ WORD32 ixheaacd_decode_create(ia_exhaacplus_dec_api_struct *handle,
memset(&usac_def_header, 0, sizeof(ia_sbr_header_data_struct));
for (elem_idx = 0; elem_idx < num_ele; elem_idx++) {
-
- UWORD32 usac_ele_type =
- ptr_usac_config->str_usac_dec_config.usac_element_type[elem_idx];
- ia_usac_dec_element_config_struct *ptr_usac_ele_config =
- &ptr_usac_config->str_usac_dec_config.str_usac_element_config[elem_idx];
+ UWORD32 usac_ele_type =
+ ptr_usac_config->str_usac_dec_config.usac_element_type[elem_idx];
+ ia_usac_dec_element_config_struct *ptr_usac_ele_config =
+ &ptr_usac_config->str_usac_dec_config
+ .str_usac_element_config[elem_idx];
ia_usac_dec_sbr_config_struct *ptr_usac_sbr_config =
&(ptr_usac_dec_config->str_usac_element_config[elem_idx]
@@ -611,39 +611,29 @@ WORD32 ixheaacd_decode_create(ia_exhaacplus_dec_api_struct *handle,
harmonic_sbr[elem_idx] =
(ptr_usac_sbr_config != NULL) ? ptr_usac_sbr_config->harmonic_sbr : 0;
- if (ptr_usac_sbr_config->bs_inter_tes)
- inter_test_flag = 1;
- if (ptr_usac_sbr_config->bs_pvc)
- bs_pvc_flag = 1;
- if (ptr_usac_sbr_config->harmonic_sbr)
- harmonic_Sbr_flag = 1;
-
-
-
-
- if ((usac_ele_type != ID_USAC_LFE) && (usac_ele_type != ID_USAC_EXT)) {
- ia_usac_dec_sbr_config_struct *ptr_usac_sbr_config =
- &(ptr_usac_ele_config->str_usac_sbr_config);
-
- usac_def_header.start_freq = ptr_usac_sbr_config->dflt_start_freq;
- usac_def_header.stop_freq = ptr_usac_sbr_config->dflt_stop_freq;
- usac_def_header.header_extra_1 =
- ptr_usac_sbr_config->dflt_header_extra1;
- usac_def_header.header_extra_2 =
- ptr_usac_sbr_config->dflt_header_extra2;
- usac_def_header.freq_scale = ptr_usac_sbr_config->dflt_freq_scale;
- usac_def_header.alter_scale = ptr_usac_sbr_config->dflt_alter_scale;
- usac_def_header.noise_bands = ptr_usac_sbr_config->dflt_noise_bands;
- usac_def_header.limiter_bands =
- ptr_usac_sbr_config->dflt_limiter_bands;
- usac_def_header.limiter_gains =
- ptr_usac_sbr_config->dflt_limiter_gains;
- usac_def_header.interpol_freq =
- ptr_usac_sbr_config->dflt_interpol_freq;
- usac_def_header.smoothing_mode =
- ptr_usac_sbr_config->dflt_smoothing_mode;
- }
-
+ if (ptr_usac_sbr_config->bs_inter_tes) inter_test_flag = 1;
+ if (ptr_usac_sbr_config->bs_pvc) bs_pvc_flag = 1;
+ if (ptr_usac_sbr_config->harmonic_sbr) harmonic_Sbr_flag = 1;
+
+ if ((usac_ele_type != ID_USAC_LFE) && (usac_ele_type != ID_USAC_EXT)) {
+ ia_usac_dec_sbr_config_struct *ptr_usac_sbr_config =
+ &(ptr_usac_ele_config->str_usac_sbr_config);
+
+ usac_def_header.start_freq = ptr_usac_sbr_config->dflt_start_freq;
+ usac_def_header.stop_freq = ptr_usac_sbr_config->dflt_stop_freq;
+ usac_def_header.header_extra_1 =
+ ptr_usac_sbr_config->dflt_header_extra1;
+ usac_def_header.header_extra_2 =
+ ptr_usac_sbr_config->dflt_header_extra2;
+ usac_def_header.freq_scale = ptr_usac_sbr_config->dflt_freq_scale;
+ usac_def_header.alter_scale = ptr_usac_sbr_config->dflt_alter_scale;
+ usac_def_header.noise_bands = ptr_usac_sbr_config->dflt_noise_bands;
+ usac_def_header.limiter_bands = ptr_usac_sbr_config->dflt_limiter_bands;
+ usac_def_header.limiter_gains = ptr_usac_sbr_config->dflt_limiter_gains;
+ usac_def_header.interpol_freq = ptr_usac_sbr_config->dflt_interpol_freq;
+ usac_def_header.smoothing_mode =
+ ptr_usac_sbr_config->dflt_smoothing_mode;
+ }
}
pstr_dec_data->str_usac_data.down_samp_sbr = 0;
@@ -664,7 +654,6 @@ WORD32 ixheaacd_decode_create(ia_exhaacplus_dec_api_struct *handle,
}
{
-
void *sbr_persistent_mem_v = aac_dec_handle->sbr_persistent_mem_u;
pstr_dec_data->str_usac_data.pstr_esbr_dec = ixheaacd_init_sbr(
diff --git a/decoder/ixheaacd_decode_main.c b/decoder/ixheaacd_decode_main.c
index aefb4ba..21e6bca 100644
--- a/decoder/ixheaacd_decode_main.c
+++ b/decoder/ixheaacd_decode_main.c
@@ -125,96 +125,94 @@ VOID ixheaacd_samples_sat(WORD8 *outbuffer, WORD32 num_samples_out,
}
/* audio pre roll frame parsing*/
-static WORD32 ixheaacd_audio_preroll_parsing(ia_dec_data_struct *pstr_dec_data, UWORD8 *conf_buf,WORD32 *preroll_units, WORD32 *preroll_frame_offset)
-{
- ia_bit_buf_struct *temp_buff = (ia_bit_buf_struct *)&(pstr_dec_data->dec_bit_buf);
- WORD32 independency_flag = 0;
- WORD32 ext_ele_present = 0;
- WORD32 ext_ele_use_dflt_len = 0;
- WORD32 ext_ele_payload_len = 0;
-
- WORD32 apply_crossfade = 0;
- WORD32 un_used_val = 0;
- WORD32 num_pre_roll_frames = 0;
-
- WORD32 frame_idx = 0;
- WORD32 frame_len[18] = { 0 }; // max of escapedValue(2, 4, 0) i.e. 2^2 -1 + 2^4 -1;
- WORD32 temp = 0;
-
- WORD32 config_len = 0;
- WORD32 loop;
-
- if (pstr_dec_data->str_frame_data.str_audio_specific_config.str_usac_config.str_usac_dec_config.usac_element_type[0] == ID_USAC_EXT)
- {
- temp = ixheaacd_show_bits_buf(temp_buff, 3);
- independency_flag = (temp >> 2) & 0x1;
- ext_ele_present = (temp >> 1) & 0x1;
-
- if (ext_ele_present)
- {
- ext_ele_use_dflt_len = temp & 0x1; // ixheaacd_read_bit(&temp_buff, 1);
- if (ext_ele_use_dflt_len != 0)
- return 0;
-
- un_used_val = ixheaacd_read_bits_buf(temp_buff, 3);
-
- ext_ele_payload_len = ixheaacd_read_bits_buf(temp_buff, 8);
-
- if (ext_ele_payload_len == 255) {
- WORD32 val_add = 0;
- val_add = ixheaacd_read_bits_buf(temp_buff, 16);
- ext_ele_payload_len = (UWORD32)((WORD32)ext_ele_payload_len + val_add - 2);
- }
-
- //escapedValue(4, 4, 8);
- config_len = ixheaacd_read_bits_buf(temp_buff, 4);
- if (config_len == 15)
- {
- WORD32 val_add = 0;
- val_add = ixheaacd_read_bits_buf(temp_buff, 4);
- config_len += val_add;
- if (val_add == 15)
- {
- WORD32 val_add1 = 0;
- val_add1 = ixheaacd_read_bits_buf(temp_buff, 8);
- config_len += val_add1;
- }
- }
-
- for(loop=0; loop < config_len; loop++)
- conf_buf[loop] = ixheaacd_read_bits_buf(temp_buff, 8);
-
-
- apply_crossfade = ixheaacd_read_bits_buf(temp_buff, 1);
- un_used_val = ixheaacd_read_bits_buf(temp_buff, 1); // reserverd
-
- //escapedValue(2, 4, 0);
- num_pre_roll_frames = ixheaacd_read_bits_buf(temp_buff, 2);
- if (num_pre_roll_frames == 3)
- {
- WORD32 val_add = 0;
- val_add = ixheaacd_read_bits_buf(temp_buff, 4);
- num_pre_roll_frames += val_add;
- }
-
- for (frame_idx = 0; frame_idx < num_pre_roll_frames; frame_idx++)
- {
- WORD32 au_len = 0; //escapedValued(16,16,0)
- au_len = ixheaacd_read_bits_buf(temp_buff, 16);
- if (au_len == 65535)
- {
- WORD32 val_add = ixheaacd_read_bits_buf(temp_buff, 16);
- au_len += val_add;
- }
- preroll_frame_offset[frame_idx]=temp_buff->size-temp_buff->cnt_bits;
- frame_len[frame_idx] = (8 * au_len) + (temp_buff->size - temp_buff->cnt_bits);
- temp_buff->ptr_read_next += au_len;
- temp_buff->cnt_bits -= au_len * 8;
- }
+static WORD32 ixheaacd_audio_preroll_parsing(ia_dec_data_struct *pstr_dec_data,
+ UWORD8 *conf_buf,
+ WORD32 *preroll_units,
+ WORD32 *preroll_frame_offset) {
+ ia_bit_buf_struct *temp_buff =
+ (ia_bit_buf_struct *)&(pstr_dec_data->dec_bit_buf);
+ WORD32 independency_flag = 0;
+ WORD32 ext_ele_present = 0;
+ WORD32 ext_ele_use_dflt_len = 0;
+ WORD32 ext_ele_payload_len = 0;
+
+ WORD32 apply_crossfade = 0;
+ WORD32 un_used_val = 0;
+ WORD32 num_pre_roll_frames = 0;
+
+ WORD32 frame_idx = 0;
+ WORD32 frame_len[18] = {
+ 0}; // max of escapedValue(2, 4, 0) i.e. 2^2 -1 + 2^4 -1;
+ WORD32 temp = 0;
+
+ WORD32 config_len = 0;
+ WORD32 loop;
+
+ if (pstr_dec_data->str_frame_data.str_audio_specific_config.str_usac_config
+ .str_usac_dec_config.usac_element_type[0] == ID_USAC_EXT) {
+ temp = ixheaacd_show_bits_buf(temp_buff, 3);
+ independency_flag = (temp >> 2) & 0x1;
+ ext_ele_present = (temp >> 1) & 0x1;
+
+ if (ext_ele_present) {
+ ext_ele_use_dflt_len = temp & 0x1; // ixheaacd_read_bit(&temp_buff, 1);
+ if (ext_ele_use_dflt_len != 0) return 0;
+
+ un_used_val = ixheaacd_read_bits_buf(temp_buff, 3);
+
+ ext_ele_payload_len = ixheaacd_read_bits_buf(temp_buff, 8);
+
+ if (ext_ele_payload_len == 255) {
+ WORD32 val_add = 0;
+ val_add = ixheaacd_read_bits_buf(temp_buff, 16);
+ ext_ele_payload_len =
+ (UWORD32)((WORD32)ext_ele_payload_len + val_add - 2);
+ }
+
+ // escapedValue(4, 4, 8);
+ config_len = ixheaacd_read_bits_buf(temp_buff, 4);
+ if (config_len == 15) {
+ WORD32 val_add = 0;
+ val_add = ixheaacd_read_bits_buf(temp_buff, 4);
+ config_len += val_add;
+ if (val_add == 15) {
+ WORD32 val_add1 = 0;
+ val_add1 = ixheaacd_read_bits_buf(temp_buff, 8);
+ config_len += val_add1;
+ }
+ }
+
+ for (loop = 0; loop < config_len; loop++)
+ conf_buf[loop] = ixheaacd_read_bits_buf(temp_buff, 8);
+
+ apply_crossfade = ixheaacd_read_bits_buf(temp_buff, 1);
+ un_used_val = ixheaacd_read_bits_buf(temp_buff, 1); // reserverd
+
+ // escapedValue(2, 4, 0);
+ num_pre_roll_frames = ixheaacd_read_bits_buf(temp_buff, 2);
+ if (num_pre_roll_frames == 3) {
+ WORD32 val_add = 0;
+ val_add = ixheaacd_read_bits_buf(temp_buff, 4);
+ num_pre_roll_frames += val_add;
+ }
+
+ for (frame_idx = 0; frame_idx < num_pre_roll_frames; frame_idx++) {
+ WORD32 au_len = 0; // escapedValued(16,16,0)
+ au_len = ixheaacd_read_bits_buf(temp_buff, 16);
+ if (au_len == 65535) {
+ WORD32 val_add = ixheaacd_read_bits_buf(temp_buff, 16);
+ au_len += val_add;
}
+ preroll_frame_offset[frame_idx] = temp_buff->size - temp_buff->cnt_bits;
+ frame_len[frame_idx] =
+ (8 * au_len) + (temp_buff->size - temp_buff->cnt_bits);
+ temp_buff->ptr_read_next += au_len;
+ temp_buff->cnt_bits -= au_len * 8;
+ }
}
- *preroll_units=num_pre_roll_frames;
- return config_len;
+ }
+ *preroll_units = num_pre_roll_frames;
+ return config_len;
}
WORD32 ixheaacd_dec_main(VOID *temp_handle, WORD8 *inbuffer, WORD8 *outbuffer,
@@ -232,13 +230,13 @@ WORD32 ixheaacd_dec_main(VOID *temp_handle, WORD8 *inbuffer, WORD8 *outbuffer,
WORD32 suitable_tracks = 1;
WORD32 num_samples_out;
ia_dec_data_struct *pstr_dec_data;
- UWORD8 config[285]; //max of escapedValue(4, 4, 8) i.e. 2^4 -1 + 2^4 -1 + 2^8 -1;
+ UWORD8 config[285]; // max of escapedValue(4, 4, 8) i.e. 2^4 -1 + 2^4 -1 +
+ // 2^8 -1;
WORD32 config_len;
WORD32 delay;
- WORD preroll_frame_offset[4]={0};
- WORD preroll_units=-1;
- WORD32 access_units=0;
-
+ WORD preroll_frame_offset[4] = {0};
+ WORD preroll_units = -1;
+ WORD32 access_units = 0;
if (frames_done == 0) {
if ((pstr_audio_specific_config->channel_configuration > 2) ||
@@ -268,7 +266,8 @@ WORD32 ixheaacd_dec_main(VOID *temp_handle, WORD8 *inbuffer, WORD8 *outbuffer,
delay = ixheaacd_decode_create(
handle, pstr_dec_data,
pstr_dec_data->str_frame_data.scal_out_select + 1);
- pstr_dec_data->dec_bit_buf.max_size = handle->p_mem_info_aac[IA_MEMTYPE_INPUT].ui_size;
+ pstr_dec_data->dec_bit_buf.max_size =
+ handle->p_mem_info_aac[IA_MEMTYPE_INPUT].ui_size;
if (delay == -1) return -1;
*num_channel_out = pstr_dec_data->str_frame_data.scal_out_num_channels;
return 0;
@@ -284,120 +283,119 @@ WORD32 ixheaacd_dec_main(VOID *temp_handle, WORD8 *inbuffer, WORD8 *outbuffer,
pstr_dec_data->str_usac_data.usac_flag = aac_dec_handle->usac_flag;
if (pstr_dec_data->dec_bit_buf.size > pstr_dec_data->dec_bit_buf.max_size)
- pstr_dec_data->dec_bit_buf.max_size = pstr_dec_data->dec_bit_buf.size;
+ pstr_dec_data->dec_bit_buf.max_size = pstr_dec_data->dec_bit_buf.size;
/* audio pre roll frame parsing*/
- do{
-
- config_len=0;
- if(access_units==0&&pstr_audio_specific_config->str_usac_config.str_usac_dec_config.preroll_flag)
- {
- config_len = ixheaacd_audio_preroll_parsing(pstr_dec_data,&config[0],&preroll_units,&preroll_frame_offset[0]);
- }
-
- if (config_len != 0)
- {
-
+ do {
+ config_len = 0;
+ if (access_units == 0 &&
+ pstr_audio_specific_config->str_usac_config.str_usac_dec_config
+ .preroll_flag) {
+ config_len = ixheaacd_audio_preroll_parsing(pstr_dec_data, &config[0],
+ &preroll_units,
+ &preroll_frame_offset[0]);
+ }
+ if (config_len != 0) {
/* updating the config parameters*/
- ia_bit_buf_struct *config_bit_buf = (ia_bit_buf_struct *)malloc(sizeof(ia_bit_buf_struct));
+ ia_bit_buf_struct *config_bit_buf =
+ (ia_bit_buf_struct *)malloc(sizeof(ia_bit_buf_struct));
config_bit_buf->ptr_bit_buf_base = config;
config_bit_buf->size = config_len << 3;
config_bit_buf->ptr_read_next = config_bit_buf->ptr_bit_buf_base;
- config_bit_buf->ptr_bit_buf_end =(UWORD8 *)config + config_len;
+ config_bit_buf->ptr_bit_buf_end = (UWORD8 *)config + config_len;
config_bit_buf->bit_pos = 7;
config_bit_buf->cnt_bits = config_bit_buf->size;
-
-
-
-
-
suitable_tracks =
ixheaacd_frm_data_init(pstr_audio_specific_config, pstr_dec_data);
- if (suitable_tracks <= 0)
- return -1;
+ if (suitable_tracks <= 0) return -1;
/* call codec re-configure*/
- err = ixheaacd_config(config_bit_buf, &(pstr_dec_data->str_frame_data.str_audio_specific_config.str_usac_config),&(pstr_audio_specific_config->channel_configuration)/*&pstr_audio_specific_config->str_usac_config*/);
+ err = ixheaacd_config(
+ config_bit_buf, &(pstr_dec_data->str_frame_data
+ .str_audio_specific_config.str_usac_config),
+ &(pstr_audio_specific_config
+ ->channel_configuration) /*&pstr_audio_specific_config->str_usac_config*/);
free(config_bit_buf);
if (err != 0) return -1;
-
delay = ixheaacd_decode_create(
handle, pstr_dec_data,
pstr_dec_data->str_frame_data.scal_out_select + 1);
if (delay == -1) return -1;
*num_channel_out = pstr_dec_data->str_frame_data.scal_out_num_channels;
+ }
- }
-
- pstr_dec_data->dec_bit_buf.ptr_bit_buf_base = (UWORD8 *)inbuffer;
- pstr_dec_data->dec_bit_buf.size = aac_dec_handle->ui_in_bytes << 3;
- pstr_dec_data->dec_bit_buf.ptr_bit_buf_end =
- (UWORD8 *)inbuffer + aac_dec_handle->ui_in_bytes - 1;
- pstr_dec_data->dec_bit_buf.ptr_read_next = (UWORD8 *)inbuffer;
- pstr_dec_data->dec_bit_buf.bit_pos = 7;
- pstr_dec_data->dec_bit_buf.cnt_bits = pstr_dec_data->dec_bit_buf.size;
-
- pstr_dec_data->str_usac_data.usac_flag = aac_dec_handle->usac_flag;
-
-
- if(preroll_frame_offset[access_units])
- {
- pstr_dec_data->dec_bit_buf.cnt_bits=pstr_dec_data->dec_bit_buf.size - preroll_frame_offset[access_units];
- pstr_dec_data->dec_bit_buf.bit_pos=7-preroll_frame_offset[access_units]%8;
- pstr_dec_data->dec_bit_buf.ptr_read_next=pstr_dec_data->dec_bit_buf.ptr_read_next+(preroll_frame_offset[access_units]/8);
- }
-
-
- //temp_read=ixheaacd_show_bits_buf(pstr_dec_data->dec_bit_buf,preroll_frame_offset[access_unit]);
-
- err = ixheaacd_usac_process(pstr_dec_data, num_channel_out, aac_dec_handle);
-
- switch (pstr_dec_data->str_usac_data.sbr_ratio_idx) {
- case 0:
- handle->aac_config.ui_sbr_mode = 0;
- break;
- case 1:
- handle->aac_config.ui_sbr_mode = 1;
- break;
- case 2:
- handle->aac_config.ui_sbr_mode = 1;
- break;
- case 3:
- handle->aac_config.ui_sbr_mode = 3;
- break;
+ pstr_dec_data->dec_bit_buf.ptr_bit_buf_base = (UWORD8 *)inbuffer;
+ pstr_dec_data->dec_bit_buf.size = aac_dec_handle->ui_in_bytes << 3;
+ pstr_dec_data->dec_bit_buf.ptr_bit_buf_end =
+ (UWORD8 *)inbuffer + aac_dec_handle->ui_in_bytes - 1;
+ pstr_dec_data->dec_bit_buf.ptr_read_next = (UWORD8 *)inbuffer;
+ pstr_dec_data->dec_bit_buf.bit_pos = 7;
+ pstr_dec_data->dec_bit_buf.cnt_bits = pstr_dec_data->dec_bit_buf.size;
+
+ pstr_dec_data->str_usac_data.usac_flag = aac_dec_handle->usac_flag;
+
+ if (preroll_frame_offset[access_units]) {
+ pstr_dec_data->dec_bit_buf.cnt_bits =
+ pstr_dec_data->dec_bit_buf.size -
+ preroll_frame_offset[access_units];
+ pstr_dec_data->dec_bit_buf.bit_pos =
+ 7 - preroll_frame_offset[access_units] % 8;
+ pstr_dec_data->dec_bit_buf.ptr_read_next =
+ pstr_dec_data->dec_bit_buf.ptr_read_next +
+ (preroll_frame_offset[access_units] / 8);
+ }
- default:
- handle->aac_config.ui_sbr_mode = 0;
- }
+ // temp_read=ixheaacd_show_bits_buf(pstr_dec_data->dec_bit_buf,preroll_frame_offset[access_unit]);
+
+ err =
+ ixheaacd_usac_process(pstr_dec_data, num_channel_out, aac_dec_handle);
+
+ switch (pstr_dec_data->str_usac_data.sbr_ratio_idx) {
+ case 0:
+ handle->aac_config.ui_sbr_mode = 0;
+ break;
+ case 1:
+ handle->aac_config.ui_sbr_mode = 1;
+ break;
+ case 2:
+ handle->aac_config.ui_sbr_mode = 1;
+ break;
+ case 3:
+ handle->aac_config.ui_sbr_mode = 3;
+ break;
+
+ default:
+ handle->aac_config.ui_sbr_mode = 0;
+ }
- if (err == -1) return err;
-
- num_samples_out = pstr_dec_data->str_usac_data.output_samples;
-
- ixheaacd_samples_sat(outbuffer, num_samples_out, pcmsize,
- pstr_dec_data->str_usac_data.time_sample_vector,
- out_bytes, *num_channel_out);
- pstr_audio_specific_config->str_usac_config.str_usac_dec_config
- .usac_ext_gain_payload_len =
- pstr_dec_data->str_frame_data.str_audio_specific_config
- .str_usac_config.str_usac_dec_config.usac_ext_gain_payload_len;
- memcpy(
- pstr_audio_specific_config->str_usac_config.str_usac_dec_config
- .usac_ext_gain_payload_buf,
- pstr_dec_data->str_frame_data.str_audio_specific_config
- .str_usac_config.str_usac_dec_config.usac_ext_gain_payload_buf,
- pstr_dec_data->str_frame_data.str_audio_specific_config
- .str_usac_config.str_usac_dec_config.usac_ext_gain_payload_len *
- sizeof(WORD8));
-
- access_units++;
- preroll_units--;
- }while(preroll_units>=0);
+ if (err == -1) return err;
+
+ num_samples_out = pstr_dec_data->str_usac_data.output_samples;
+
+ ixheaacd_samples_sat(outbuffer, num_samples_out, pcmsize,
+ pstr_dec_data->str_usac_data.time_sample_vector,
+ out_bytes, *num_channel_out);
+ pstr_audio_specific_config->str_usac_config.str_usac_dec_config
+ .usac_ext_gain_payload_len =
+ pstr_dec_data->str_frame_data.str_audio_specific_config
+ .str_usac_config.str_usac_dec_config.usac_ext_gain_payload_len;
+ memcpy(pstr_audio_specific_config->str_usac_config.str_usac_dec_config
+ .usac_ext_gain_payload_buf,
+ pstr_dec_data->str_frame_data.str_audio_specific_config
+ .str_usac_config.str_usac_dec_config.usac_ext_gain_payload_buf,
+ pstr_dec_data->str_frame_data.str_audio_specific_config
+ .str_usac_config.str_usac_dec_config
+ .usac_ext_gain_payload_len *
+ sizeof(WORD8));
+
+ access_units++;
+ preroll_units--;
+ } while (preroll_units >= 0);
}
return err;
diff --git a/decoder/ixheaacd_drc_freq_dec.c b/decoder/ixheaacd_drc_freq_dec.c
index ce88aba..9adef97 100644
--- a/decoder/ixheaacd_drc_freq_dec.c
+++ b/decoder/ixheaacd_drc_freq_dec.c
@@ -1008,20 +1008,15 @@ VOID ixheaacd_drc_apply(ia_drc_dec_struct *pstr_drc_dec,
(num_qmf_sub_sample - alpha_val) *
(WORD64)prev_frame_drc_sbr_factors[i];
- if (frame_size == 512)
- {
- drc_sbr_factors[num_qmf_sub_sample + j][i] =
- (WORD32)(temp_drc >> 4);
- }
- else if (frame_size == 480)
- {
- drc_sbr_factors[num_qmf_sub_sample + j][i] =
- ixheaacd_div_by_15(temp_drc);
- }
- else
- {
- drc_sbr_factors[num_qmf_sub_sample + j][i] =
- (WORD32)(temp_drc >> 5);
+ if (frame_size == 512) {
+ drc_sbr_factors[num_qmf_sub_sample + j][i] =
+ (WORD32)(temp_drc >> 4);
+ } else if (frame_size == 480) {
+ drc_sbr_factors[num_qmf_sub_sample + j][i] =
+ ixheaacd_div_by_15(temp_drc);
+ } else {
+ drc_sbr_factors[num_qmf_sub_sample + j][i] =
+ (WORD32)(temp_drc >> 5);
}
if (960 == frame_size) {
diff --git a/decoder/ixheaacd_env_calc.c b/decoder/ixheaacd_env_calc.c
index 652e810..26590c4 100644
--- a/decoder/ixheaacd_env_calc.c
+++ b/decoder/ixheaacd_env_calc.c
@@ -1311,12 +1311,14 @@ VOID ixheaacd_enery_calc_persfb(WORD32 **anal_buf_real, WORD32 **anal_buf_imag,
}
}
-VOID ixheaacd_subbandgain_calc(
- WORD16 e_orig_mant_matrix, WORD16 tmp_noise_mant, WORD16 nrg_est_mant,
- WORD16 nrg_est_exp, WORD16 tmp_noise_exp, WORD16 nrg_ref_exp,
- FLAG sine_present_flag, FLAG sine_mapped_matrix, FLAG noise_absc_flag,
- WORD16 *ptr_nrg_gain_mant, WORD16 *ptr_noise_floor_mant,
- WORD16 *ptr_nrg_sine_m, ixheaacd_misc_tables *pstr_common_tables) {
+VOID ixheaacd_subbandgain_calc(WORD16 e_orig_mant_matrix, WORD16 tmp_noise_mant,
+ WORD16 nrg_est_mant, WORD16 nrg_est_exp,
+ WORD16 tmp_noise_exp, WORD16 nrg_ref_exp,
+ FLAG sine_present_flag, FLAG sine_mapped_matrix,
+ FLAG noise_absc_flag, WORD16 *ptr_nrg_gain_mant,
+ WORD16 *ptr_noise_floor_mant,
+ WORD16 *ptr_nrg_sine_m,
+ ixheaacd_misc_tables *pstr_common_tables) {
WORD16 var1_mant;
WORD16 var1_exp;
WORD16 var2_mant;
diff --git a/decoder/ixheaacd_env_calc.h b/decoder/ixheaacd_env_calc.h
index 8b03ade..b4a581d 100644
--- a/decoder/ixheaacd_env_calc.h
+++ b/decoder/ixheaacd_env_calc.h
@@ -71,7 +71,6 @@ VOID ixheaacd_enery_calc_persfb(WORD32 **anal_buf_real, WORD32 **anal_buf_imag,
WORD16 *nrg_est_m, FLAG low_pow_flag,
ia_sbr_tables_struct *ptr_sbr_tables);
-
VOID ixheaacd_avggain_calc(WORD16 *ptr_enrg_orig, WORD16 *nrg_est,
WORD32 sub_band_start, WORD32 sub_band_end,
WORD16 *sum_orig_mant, WORD16 *sum_orig_exp,
@@ -172,12 +171,14 @@ VOID ixheaacd_conv_ergtoamplitude_armv7(WORD32 bands, WORD16 noise_e,
WORD16 *noise_level_mant,
WORD16 *sqrt_table);
- VOID ixheaacd_subbandgain_calc(
- WORD16 e_orig_mant_matrix, WORD16 tmp_noise_mant, WORD16 nrg_est_mant,
- WORD16 nrg_est_exp, WORD16 tmp_noise_exp, WORD16 nrg_ref_exp,
- FLAG sine_present_flag, FLAG sine_mapped_matrix, FLAG noise_absc_flag,
- WORD16 *ptr_nrg_gain_mant, WORD16 *ptr_noise_floor_mant,
- WORD16 *ptr_nrg_sine_m, ixheaacd_misc_tables *pstr_common_tables);
+VOID ixheaacd_subbandgain_calc(WORD16 e_orig_mant_matrix, WORD16 tmp_noise_mant,
+ WORD16 nrg_est_mant, WORD16 nrg_est_exp,
+ WORD16 tmp_noise_exp, WORD16 nrg_ref_exp,
+ FLAG sine_present_flag, FLAG sine_mapped_matrix,
+ FLAG noise_absc_flag, WORD16 *ptr_nrg_gain_mant,
+ WORD16 *ptr_noise_floor_mant,
+ WORD16 *ptr_nrg_sine_m,
+ ixheaacd_misc_tables *pstr_common_tables);
PLATFORM_INLINE VOID ixheaacd_filt_buf_update(WORD16 *ptr_filt_buf,
WORD16 *ptr_filt_buf_noise,
WORD16 *nrg_gain,
diff --git a/decoder/ixheaacd_env_extr.c b/decoder/ixheaacd_env_extr.c
index 2560701..67f3499 100644
--- a/decoder/ixheaacd_env_extr.c
+++ b/decoder/ixheaacd_env_extr.c
@@ -108,8 +108,8 @@ VOID ixheaacd_huffman_decode(WORD32 it_bit_buff, WORD16 *h_index, WORD16 *len,
}
static WORD32 ixheaacd_read_esbr_pvc_envelope(ia_pvc_data_struct *ptr_pvc_data,
- ia_bit_buf_struct *it_bit_buff,
- WORD32 indepFlag) {
+ ia_bit_buf_struct *it_bit_buff,
+ WORD32 indepFlag) {
WORD32 i, j, k;
WORD32 fixed_length = 0, num_grid_info = 0, grid_info;
UWORD8 div_mode, ns_mode;
@@ -158,9 +158,8 @@ static WORD32 ixheaacd_read_esbr_pvc_envelope(ia_pvc_data_struct *ptr_pvc_data,
length = (UWORD8)ixheaacd_read_bits_buf(it_bit_buff, length_bits);
length += 1;
sum_length += length;
- if((k+length-1) > PVC_NUM_TIME_SLOTS)
- {
- return -1;
+ if ((k + length - 1) > PVC_NUM_TIME_SLOTS) {
+ return -1;
}
for (j = 1; j < length; j++, k++) {
pvc_id[k] = pvc_id[k - 1];
@@ -565,7 +564,6 @@ static WORD16 ixheaacd_validate_frame_info(
return 1;
}
-
static WORD16 ixheaacd_read_extn_data(
ia_sbr_header_data_struct *ptr_header_data, ia_ps_dec_struct *ptr_ps_dec,
ia_bit_buf_struct *it_bit_buff, ia_ps_tables_struct *ps_tables_ptr) {
@@ -630,10 +628,11 @@ static WORD16 ixheaacd_read_extn_data(
}
WORD32 ixheaacd_sbr_read_pvc_sce(ia_sbr_frame_info_data_struct *ptr_frame_data,
- ia_bit_buf_struct *it_bit_buff, WORD32 hbe_flag,
- ia_pvc_data_struct *ptr_pvc_data,
- ia_sbr_tables_struct *ptr_sbr_tables,
- ia_sbr_header_data_struct *ptr_header_data) {
+ ia_bit_buf_struct *it_bit_buff,
+ WORD32 hbe_flag,
+ ia_pvc_data_struct *ptr_pvc_data,
+ ia_sbr_tables_struct *ptr_sbr_tables,
+ ia_sbr_header_data_struct *ptr_header_data) {
WORD32 i;
WORD32 err_code = 0;
ia_env_extr_tables_struct *env_extr_tables_ptr =
@@ -658,8 +657,7 @@ WORD32 ixheaacd_sbr_read_pvc_sce(ia_sbr_frame_info_data_struct *ptr_frame_data,
}
err_code = ixheaacd_pvc_time_freq_grid_info(it_bit_buff, ptr_frame_data);
- if(err_code)
- return err_code;
+ if (err_code) return err_code;
ptr_pvc_data->prev_sbr_mode = PVC_SBR;
@@ -1485,8 +1483,7 @@ WORD32 ixheaacd_pvc_time_freq_grid_info(
} else {
time_border[0] = 0;
}
- if(time_border[0] < 0)
- return -1;
+ if (time_border[0] < 0) return -1;
pvc_time_border[0] = 0;
bs_freq_res[0] = 0;
diff --git a/decoder/ixheaacd_esbr_polyphase.c b/decoder/ixheaacd_esbr_polyphase.c
index 169231c..bcb4685 100644
--- a/decoder/ixheaacd_esbr_polyphase.c
+++ b/decoder/ixheaacd_esbr_polyphase.c
@@ -120,10 +120,10 @@ WORD32 ixheaacd_complex_anal_filt(ia_esbr_hbe_txposer_struct *ptr_hbe_txposer) {
*ptr_u++ = ((*analy_cos_sin_tab++) * u[k]);
*ptr_u++ = ((*analy_cos_sin_tab++) * u[k]);
}
- if(ixheaacd_cmplx_anal_fft != NULL)
- (*ixheaacd_cmplx_anal_fft)(u_in, u_out, anal_size * 2);
+ if (ixheaacd_cmplx_anal_fft != NULL)
+ (*ixheaacd_cmplx_anal_fft)(u_in, u_out, anal_size * 2);
else
- return -1;
+ return -1;
for (k = 0; k < anal_size / 2; k++) {
*(anal_buf + 1) = -*ptr_v++;
@@ -142,8 +142,8 @@ WORD32 ixheaacd_complex_anal_filt(ia_esbr_hbe_txposer_struct *ptr_hbe_txposer) {
}
WORD32 ixheaacd_real_synth_filt(ia_esbr_hbe_txposer_struct *ptr_hbe_txposer,
- WORD32 num_columns, FLOAT32 qmf_buf_real[][64],
- FLOAT32 qmf_buf_imag[][64]) {
+ WORD32 num_columns, FLOAT32 qmf_buf_real[][64],
+ FLOAT32 qmf_buf_imag[][64]) {
WORD32 i, j, k, l, idx;
FLOAT32 g[640];
FLOAT32 w[640];
@@ -162,8 +162,7 @@ WORD32 ixheaacd_real_synth_filt(ia_esbr_hbe_txposer_struct *ptr_hbe_txposer,
(idx + 1) * ptr_hbe_txposer->synth_size;
FLOAT32 *synth_cos_tab = ptr_hbe_txposer->synth_cos_tab;
const FLOAT32 *interp_window_coeff = ptr_hbe_txposer->synth_wind_coeff;
- if(ptr_hbe_txposer->k_start < 0)
- return -1;
+ if (ptr_hbe_txposer->k_start < 0) return -1;
for (k = 0; k < synth_size; k++) {
WORD32 ki = ptr_hbe_txposer->k_start + k;
synth_buf_r[k] = (FLOAT32)(
@@ -210,10 +209,10 @@ WORD32 ixheaacd_real_synth_filt(ia_esbr_hbe_txposer_struct *ptr_hbe_txposer,
FLOAT32 *syn_buf = &buffer[kmax];
kmax += synth_size;
- if(ixheaacd_real_synth_fft != NULL)
- (*ixheaacd_real_synth_fft)(synth_buf_r, synth_out, synth_size * 2);
+ if (ixheaacd_real_synth_fft != NULL)
+ (*ixheaacd_real_synth_fft)(synth_buf_r, synth_out, synth_size * 2);
else
- return -1;
+ return -1;
for (k = 0; k < kmax; k++) {
tmp = ((*ptr_u++) * (*synth_cos_tab++));
diff --git a/decoder/ixheaacd_ext_ch_ele.c b/decoder/ixheaacd_ext_ch_ele.c
index bfa8d92..5f09ba8 100644
--- a/decoder/ixheaacd_ext_ch_ele.c
+++ b/decoder/ixheaacd_ext_ch_ele.c
@@ -323,8 +323,8 @@ VOID ixheaacd_ms_stereo(ia_usac_data_struct *usac_data, WORD32 *r_spec,
for (k = 0; k < ptr_sfb_info->sfb_width[sfb]; k++) {
temp_r = *r_spec;
temp_l = *l_spec;
- *l_spec = ixheaacd_add32_sat(temp_r , temp_l);
- *r_spec = ixheaacd_sub32_sat(temp_l , temp_r);
+ *l_spec = ixheaacd_add32_sat(temp_r, temp_l);
+ *r_spec = ixheaacd_sub32_sat(temp_l, temp_r);
r_spec++;
l_spec++;
}
@@ -491,7 +491,9 @@ static WORD32 ixheaacd_cplx_pred_upmixing(
else {
for (k = 0; k < pstr_sfb_info->sfb_width[sfb]; k++, i++) {
- dmx_re[i] = (WORD32)(((WORD64)l_spec[i] + ((WORD64)factor * (WORD64)r_spec[i])) >> 1);
+ dmx_re[i] = (WORD32)(
+ ((WORD64)l_spec[i] + ((WORD64)factor * (WORD64)r_spec[i])) >>
+ 1);
}
}
}
@@ -540,13 +542,13 @@ static WORD32 ixheaacd_cplx_pred_upmixing(
alpha_q_re_temp = alpha_q_re[grp][sfb] * 1677722;
if (cplx_pred_used[grp][sfb]) {
for (k = 0; k < pstr_sfb_info->sfb_width[sfb]; k++, i++) {
- WORD32 mid_side =
- ixheaacd_sub32_sat(r_spec[i] , (WORD32)((WORD64)ixheaacd_mult32x32in64(
- alpha_q_re_temp, l_spec[i]) >>
- 24));
+ WORD32 mid_side = ixheaacd_sub32_sat(
+ r_spec[i], (WORD32)((WORD64)ixheaacd_mult32x32in64(
+ alpha_q_re_temp, l_spec[i]) >>
+ 24));
- r_spec[i] = (factor) * (ixheaacd_sub32_sat(l_spec[i] , mid_side));
- l_spec[i] = ixheaacd_add32_sat(l_spec[i] , mid_side);
+ r_spec[i] = (factor) * (ixheaacd_sub32_sat(l_spec[i], mid_side));
+ l_spec[i] = ixheaacd_add32_sat(l_spec[i], mid_side);
}
} else {
diff --git a/decoder/ixheaacd_fft.c b/decoder/ixheaacd_fft.c
index ec7dab0..c5ac7b9 100644
--- a/decoder/ixheaacd_fft.c
+++ b/decoder/ixheaacd_fft.c
@@ -1154,14 +1154,14 @@ VOID ixheaacd_complex_fft_p2_dec(WORD32 *xr, WORD32 *xi, WORD32 nlength,
x3r = x1r - (x3r << 1);
x3i = x1i - (x3i << 1);
- x0r = ixheaacd_add32_sat(x0r , x1r);
- x0i = ixheaacd_add32_sat(x0i , x1i);
- x1r = ixheaacd_sub32_sat(x0r , (x1r << 1));
- x1i = ixheaacd_sub32_sat(x0i , (x1i << 1));
- x2r = ixheaacd_sub32_sat(x2r , x3i);
- x2i = ixheaacd_add32_sat(x2i , x3r);
- x3i = ixheaacd_add32_sat(x2r , (x3i << 1));
- x3r = ixheaacd_sub32_sat(x2i , (x3r << 1));
+ x0r = ixheaacd_add32_sat(x0r, x1r);
+ x0i = ixheaacd_add32_sat(x0i, x1i);
+ x1r = ixheaacd_sub32_sat(x0r, (x1r << 1));
+ x1i = ixheaacd_sub32_sat(x0i, (x1i << 1));
+ x2r = ixheaacd_sub32_sat(x2r, x3i);
+ x2i = ixheaacd_add32_sat(x2i, x3r);
+ x3i = ixheaacd_add32_sat(x2r, (x3i << 1));
+ x3r = ixheaacd_sub32_sat(x2i, (x3r << 1));
*data = x0r;
*(data + 1) = x0i;
diff --git a/decoder/ixheaacd_freq_sca.c b/decoder/ixheaacd_freq_sca.c
index a29dd8f..1694307 100644
--- a/decoder/ixheaacd_freq_sca.c
+++ b/decoder/ixheaacd_freq_sca.c
@@ -75,7 +75,6 @@ static WORD32 ixheaacd_int_div(WORD32 num, WORD32 den) {
}
}
-
VOID ixheaacd_aac_shellsort(WORD16 *in, WORD32 n) {
WORD32 i, j;
WORD32 inc;
@@ -105,218 +104,179 @@ VOID ixheaacd_aac_shellsort(WORD16 *in, WORD32 n) {
} while (inc > 1);
}
-
-
-
WORD32
-ixheaacd_calc_start_band(WORD32 fs, const WORD32 start_freq, FLOAT32 upsamp_fac)
-{
- WORD32 k0_min;
- WORD32 fs_mapped = 0;
+ixheaacd_calc_start_band(WORD32 fs, const WORD32 start_freq,
+ FLOAT32 upsamp_fac) {
+ WORD32 k0_min;
+ WORD32 fs_mapped = 0;
- if (upsamp_fac == 4) {
- fs = fs / 2;
- }
+ if (upsamp_fac == 4) {
+ fs = fs / 2;
+ }
- if (fs >= 0 && fs < 18783) {
- fs_mapped = 16000;
- }
- else if (fs >= 18783 && fs < 23004) {
- fs_mapped = 22050;
- }
- else if (fs >= 23004 && fs < 27713) {
- fs_mapped = 24000;
- }
- else if (fs >= 27713 && fs < 35777) {
- fs_mapped = 32000;
- }
- else if (fs >= 35777 && fs < 42000) {
- fs_mapped = 40000;
- }
- else if (fs >= 42000 && fs < 46009) {
- fs_mapped = 44100;
- }
- else if (fs >= 46009 && fs < 55426) {
- fs_mapped = 48000;
- }
- else if (fs >= 55426 && fs < 75132) {
- fs_mapped = 64000;
- }
- else if (fs >= 75132 && fs < 92017) {
- fs_mapped = 88200;
- }
- else if (fs >= 92017) {
- fs_mapped = 96000;
- }
- else {
- return -1;
- }
+ if (fs >= 0 && fs < 18783) {
+ fs_mapped = 16000;
+ } else if (fs >= 18783 && fs < 23004) {
+ fs_mapped = 22050;
+ } else if (fs >= 23004 && fs < 27713) {
+ fs_mapped = 24000;
+ } else if (fs >= 27713 && fs < 35777) {
+ fs_mapped = 32000;
+ } else if (fs >= 35777 && fs < 42000) {
+ fs_mapped = 40000;
+ } else if (fs >= 42000 && fs < 46009) {
+ fs_mapped = 44100;
+ } else if (fs >= 46009 && fs < 55426) {
+ fs_mapped = 48000;
+ } else if (fs >= 55426 && fs < 75132) {
+ fs_mapped = 64000;
+ } else if (fs >= 75132 && fs < 92017) {
+ fs_mapped = 88200;
+ } else if (fs >= 92017) {
+ fs_mapped = 96000;
+ } else {
+ return -1;
+ }
- if (upsamp_fac == 4) {
- if (fs_mapped < 32000) {
- k0_min = (WORD32)(((FLOAT32)(3000 * 2 * 32) / fs_mapped) + 0.5);
- }
- else {
- if (fs_mapped < 64000) {
- k0_min = (WORD32)(((FLOAT32)(4000 * 2 * 32) / fs_mapped) + 0.5);
- }
- else {
- k0_min = (WORD32)(((FLOAT32)(5000 * 2 * 32) / fs_mapped) + 0.5);
- }
- }
+ if (upsamp_fac == 4) {
+ if (fs_mapped < 32000) {
+ k0_min = (WORD32)(((FLOAT32)(3000 * 2 * 32) / fs_mapped) + 0.5);
+ } else {
+ if (fs_mapped < 64000) {
+ k0_min = (WORD32)(((FLOAT32)(4000 * 2 * 32) / fs_mapped) + 0.5);
+ } else {
+ k0_min = (WORD32)(((FLOAT32)(5000 * 2 * 32) / fs_mapped) + 0.5);
+ }
}
- else {
- if (fs_mapped < 32000) {
- k0_min = (WORD32)(((FLOAT32)(3000 * 2 * 64) / fs_mapped) + 0.5);
- }
- else {
- if (fs_mapped < 64000) {
- k0_min = (WORD32)(((FLOAT32)(4000 * 2 * 64) / fs_mapped) + 0.5);
- }
- else {
- k0_min = (WORD32)(((FLOAT32)(5000 * 2 * 64) / fs_mapped) + 0.5);
- }
- }
+ } else {
+ if (fs_mapped < 32000) {
+ k0_min = (WORD32)(((FLOAT32)(3000 * 2 * 64) / fs_mapped) + 0.5);
+ } else {
+ if (fs_mapped < 64000) {
+ k0_min = (WORD32)(((FLOAT32)(4000 * 2 * 64) / fs_mapped) + 0.5);
+ } else {
+ k0_min = (WORD32)(((FLOAT32)(5000 * 2 * 64) / fs_mapped) + 0.5);
+ }
}
+ }
- switch (fs_mapped) {
- case 16000:
- {
- WORD32 v_offset[] = { -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7 };
- return (k0_min + v_offset[start_freq]);
- }
- break;
- case 22050:
- {
- WORD32 v_offset[] = { -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13 };
- return (k0_min + v_offset[start_freq]);
- }
- break;
- case 24000:
- {
- WORD32 v_offset[] = { -5, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16 };
- return (k0_min + v_offset[start_freq]);
- }
- break;
- case 32000:
- {
- WORD32 v_offset[] = { -6, -4, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16 };
- return (k0_min + v_offset[start_freq]);
- }
- break;
- case 40000:
- {
- WORD32 v_offset[] = { -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 13, 15, 17, 19 };
- return (k0_min + v_offset[start_freq]);
- }
- break;
+ switch (fs_mapped) {
+ case 16000: {
+ WORD32 v_offset[] = {-8, -7, -6, -5, -4, -3, -2, -1,
+ 0, 1, 2, 3, 4, 5, 6, 7};
+ return (k0_min + v_offset[start_freq]);
+ } break;
+ case 22050: {
+ WORD32 v_offset[] = {-5, -4, -3, -2, -1, 0, 1, 2,
+ 3, 4, 5, 6, 7, 9, 11, 13};
+ return (k0_min + v_offset[start_freq]);
+ } break;
+ case 24000: {
+ WORD32 v_offset[] = {-5, -3, -2, -1, 0, 1, 2, 3,
+ 4, 5, 6, 7, 9, 11, 13, 16};
+ return (k0_min + v_offset[start_freq]);
+ } break;
+ case 32000: {
+ WORD32 v_offset[] = {-6, -4, -2, -1, 0, 1, 2, 3,
+ 4, 5, 6, 7, 9, 11, 13, 16};
+ return (k0_min + v_offset[start_freq]);
+ } break;
+ case 40000: {
+ WORD32 v_offset[] = {-1, 0, 1, 2, 3, 4, 5, 6,
+ 7, 8, 9, 11, 13, 15, 17, 19};
+ return (k0_min + v_offset[start_freq]);
+ } break;
case 44100:
case 48000:
- case 64000:
- {
- WORD32 v_offset[] = { -4, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16, 20 };
- return (k0_min + v_offset[start_freq]);
- }
- break;
+ case 64000: {
+ WORD32 v_offset[] = {-4, -2, -1, 0, 1, 2, 3, 4,
+ 5, 6, 7, 9, 11, 13, 16, 20};
+ return (k0_min + v_offset[start_freq]);
+ } break;
case 88200:
- case 96000:
- {
- WORD32 v_offset[] = { -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16, 20, 24 };
- return (k0_min + v_offset[start_freq]);
- }
- break;
+ case 96000: {
+ WORD32 v_offset[] = {-2, -1, 0, 1, 2, 3, 4, 5,
+ 6, 7, 9, 11, 13, 16, 20, 24};
+ return (k0_min + v_offset[start_freq]);
+ } break;
- default:
- {
- WORD32 v_offset[] = { 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16, 20, 24, 28, 33 };
- return (k0_min + v_offset[start_freq]);
- }
+ default: {
+ WORD32 v_offset[] = {0, 1, 2, 3, 4, 5, 6, 7,
+ 9, 11, 13, 16, 20, 24, 28, 33};
+ return (k0_min + v_offset[start_freq]);
}
+ }
}
WORD32
-ixheaacd_calc_stop_band(WORD32 fs, const WORD32 stop_freq, FLOAT32 upsamp_fac)
-{
- WORD32 result, i;
- WORD16 arr_stop_freq[14];
- WORD32 k1_min;
- WORD16 arr_diff_stop_freq[13];
-
- if (upsamp_fac == 4) {
- fs = fs / 2;
- if (fs < 32000) {
- k1_min = (WORD32)(((FLOAT32)(6000 * 2 * 32) / fs) + 0.5);
- }
- else {
- if (fs < 64000) {
- k1_min = (WORD32)(((FLOAT32)(8000 * 2 * 32) / fs) + 0.5);
- }
- else {
- k1_min = (WORD32)(((FLOAT32)(10000 * 2 * 32) / fs) + 0.5);
- }
- }
- }
- else {
- if (fs < 32000) {
- k1_min = (WORD32)(((FLOAT32)(6000 * 2 * 64) / fs) + 0.5);
- }
- else {
- if (fs < 64000) {
- k1_min = (WORD32)(((FLOAT32)(8000 * 2 * 64) / fs) + 0.5);
- }
- else {
- k1_min = (WORD32)(((FLOAT32)(10000 * 2 * 64) / fs) + 0.5);
- }
- }
- }
+ixheaacd_calc_stop_band(WORD32 fs, const WORD32 stop_freq, FLOAT32 upsamp_fac) {
+ WORD32 result, i;
+ WORD16 arr_stop_freq[14];
+ WORD32 k1_min;
+ WORD16 arr_diff_stop_freq[13];
- /*Calculate stop frequency vector*/
- for (i = 0; i <= 13; i++) {
- arr_stop_freq[i] = (WORD32)(k1_min * pow(64.0 / k1_min, i / 13.0) + 0.5);
+ if (upsamp_fac == 4) {
+ fs = fs / 2;
+ if (fs < 32000) {
+ k1_min = (WORD32)(((FLOAT32)(6000 * 2 * 32) / fs) + 0.5);
+ } else {
+ if (fs < 64000) {
+ k1_min = (WORD32)(((FLOAT32)(8000 * 2 * 32) / fs) + 0.5);
+ } else {
+ k1_min = (WORD32)(((FLOAT32)(10000 * 2 * 32) / fs) + 0.5);
+ }
}
+ } else {
+ if (fs < 32000) {
+ k1_min = (WORD32)(((FLOAT32)(6000 * 2 * 64) / fs) + 0.5);
+ } else {
+ if (fs < 64000) {
+ k1_min = (WORD32)(((FLOAT32)(8000 * 2 * 64) / fs) + 0.5);
+ } else {
+ k1_min = (WORD32)(((FLOAT32)(10000 * 2 * 64) / fs) + 0.5);
+ }
+ }
+ }
+ /*Calculate stop frequency vector*/
+ for (i = 0; i <= 13; i++) {
+ arr_stop_freq[i] = (WORD32)(k1_min * pow(64.0 / k1_min, i / 13.0) + 0.5);
+ }
- /*Ensure increasing bandwidth */
- for (i = 0; i <= 12; i++) {
- arr_diff_stop_freq[i] = arr_stop_freq[i + 1] - arr_stop_freq[i];
- }
+ /*Ensure increasing bandwidth */
+ for (i = 0; i <= 12; i++) {
+ arr_diff_stop_freq[i] = arr_stop_freq[i + 1] - arr_stop_freq[i];
+ }
- ixheaacd_aac_shellsort(&arr_diff_stop_freq[0], 13); /*Sort bandwidth changes */
+ ixheaacd_aac_shellsort(&arr_diff_stop_freq[0],
+ 13); /*Sort bandwidth changes */
- result = k1_min;
- for (i = 0; i<stop_freq; i++) {
- result = result + arr_diff_stop_freq[i];
- }
+ result = k1_min;
+ for (i = 0; i < stop_freq; i++) {
+ result = result + arr_diff_stop_freq[i];
+ }
- return(result);
+ return (result);
}
-void
-ixheaacd_calc_k0_k2_bands(const WORD32 samp_freq,
- const WORD32 start_freq,
- const WORD32 stop_freq,
- FLOAT32 upsamp_fac,
- WORD16 *ptr_k0,
- WORD16 *ptr_k2)
-{
- /* Update start_freq struct */
- *ptr_k0 = ixheaacd_calc_start_band(samp_freq, start_freq, upsamp_fac);
-
-
- /*Update stop_freq struct */
- if (stop_freq < 14) {
- *ptr_k2 = ixheaacd_calc_stop_band(samp_freq, stop_freq, upsamp_fac);
- }
- else if (stop_freq == 14) {
- *ptr_k2 = 2 * (*ptr_k0);
- }
- else {
- *ptr_k2 = 3 * (*ptr_k0);
- }
+void ixheaacd_calc_k0_k2_bands(const WORD32 samp_freq, const WORD32 start_freq,
+ const WORD32 stop_freq, FLOAT32 upsamp_fac,
+ WORD16 *ptr_k0, WORD16 *ptr_k2) {
+ /* Update start_freq struct */
+ *ptr_k0 = ixheaacd_calc_start_band(samp_freq, start_freq, upsamp_fac);
+
+ /*Update stop_freq struct */
+ if (stop_freq < 14) {
+ *ptr_k2 = ixheaacd_calc_stop_band(samp_freq, stop_freq, upsamp_fac);
+ } else if (stop_freq == 14) {
+ *ptr_k2 = 2 * (*ptr_k0);
+ } else {
+ *ptr_k2 = 3 * (*ptr_k0);
+ }
- /* limit to Nyqvist */
- if (*ptr_k2 > 64) {
- *ptr_k2 = 64;
- }
+ /* limit to Nyqvist */
+ if (*ptr_k2 > 64) {
+ *ptr_k2 = 64;
+ }
}
WORD16 ixheaacd_calc_master_frq_bnd_tbl(
@@ -338,18 +298,12 @@ WORD16 ixheaacd_calc_master_frq_bnd_tbl(
WORD16 *f_master_tbl = pstr_freq_band_data->f_master_tbl;
WORD16 num_mf_bands;
-
k1 = 0;
incr = 0;
dk = 0;
-
- ixheaacd_calc_k0_k2_bands(fs,
- ptr_header_data->start_freq,
- ptr_header_data->stop_freq,
- upsamp_fac,
- &k0, &k2);
-
+ ixheaacd_calc_k0_k2_bands(fs, ptr_header_data->start_freq,
+ ptr_header_data->stop_freq, upsamp_fac, &k0, &k2);
if (k2 > NO_SYNTHESIS_CHANNELS) {
k2 = NO_SYNTHESIS_CHANNELS;
@@ -701,14 +655,14 @@ WORD32 ixheaacd_derive_noise_freq_bnd_tbl(
}
WORD32 ixheaacd_calc_frq_bnd_tbls(ia_sbr_header_data_struct *ptr_header_data,
- ixheaacd_misc_tables *pstr_common_tables) {
+ ixheaacd_misc_tables *pstr_common_tables) {
WORD32 err;
WORD16 num_lf_bands, num_hf_bands, lsb, usb;
ia_freq_band_data_struct *pstr_freq_band_data =
ptr_header_data->pstr_freq_band_data;
err = ixheaacd_calc_master_frq_bnd_tbl(pstr_freq_band_data, ptr_header_data,
- pstr_common_tables);
+ pstr_common_tables);
if (err ||
(ptr_header_data->xover_band > pstr_freq_band_data->num_mf_bands)) {
diff --git a/decoder/ixheaacd_fwd_alias_cnx.c b/decoder/ixheaacd_fwd_alias_cnx.c
index 27259ef..32f50b9 100644
--- a/decoder/ixheaacd_fwd_alias_cnx.c
+++ b/decoder/ixheaacd_fwd_alias_cnx.c
@@ -76,10 +76,14 @@ static VOID ixheaacd_synthesis_tool(WORD32 a[], WORD32 x[], WORD32 l,
for (i = 0; i < l; i++) {
s = x[i];
for (j = 1; j <= ORDER; j += 4) {
- s = ixheaacd_sub32_sat(s,ixheaacd_mul32_sh(a[j], x[i - j], (WORD8)(qshift)));
- s = ixheaacd_sub32_sat(s,ixheaacd_mul32_sh(a[j + 1], x[i - (j + 1)], (WORD8)(qshift)));
- s = ixheaacd_sub32_sat(s,ixheaacd_mul32_sh(a[j + 2], x[i - (j + 2)], (WORD8)(qshift)));
- s = ixheaacd_sub32_sat(s,ixheaacd_mul32_sh(a[j + 3], x[i - (j + 3)], (WORD8)(qshift)));
+ s = ixheaacd_sub32_sat(
+ s, ixheaacd_mul32_sh(a[j], x[i - j], (WORD8)(qshift)));
+ s = ixheaacd_sub32_sat(
+ s, ixheaacd_mul32_sh(a[j + 1], x[i - (j + 1)], (WORD8)(qshift)));
+ s = ixheaacd_sub32_sat(
+ s, ixheaacd_mul32_sh(a[j + 2], x[i - (j + 2)], (WORD8)(qshift)));
+ s = ixheaacd_sub32_sat(
+ s, ixheaacd_mul32_sh(a[j + 3], x[i - (j + 3)], (WORD8)(qshift)));
}
x[i] = s;
}
@@ -125,8 +129,9 @@ WORD32 ixheaacd_fwd_alias_cancel_tool(
fac_signal[i] = (WORD32)(ptr_fac_signal_flt[i] * (1 << (16 - qshift)));
for (i = 0; i < fac_length; i++)
- ptr_overlap_buf[i] =
- ixheaacd_add32_sat(ptr_overlap_buf[i],(WORD32)ixheaacd_mul32_sh(fac_signal[i], gain, (WORD8)(16 - qshift)));
+ ptr_overlap_buf[i] = ixheaacd_add32_sat(
+ ptr_overlap_buf[i],
+ (WORD32)ixheaacd_mul32_sh(fac_signal[i], gain, (WORD8)(16 - qshift)));
return err;
}
@@ -155,17 +160,14 @@ WORD32 ixheaacd_fr_alias_cnx_fix(WORD32 *x_in, WORD32 len, WORD32 fac_length,
return -1;
}
- if( FAC_LENGTH < fac_length )
- {
- return -1;
+ if (FAC_LENGTH < fac_length) {
+ return -1;
}
- if((1 + (len /2)) < (fac_length + 1))
- {
- return -1;
+ if ((1 + (len / 2)) < (fac_length + 1)) {
+ return -1;
}
- if( (len/2 + 1) > (2 * LEN_FRAME - fac_length - 1))
- {
- return -1;
+ if ((len / 2 + 1) > (2 * LEN_FRAME - fac_length - 1)) {
+ return -1;
}
if (lp_filt_coeff != NULL && fac_data_out != NULL) {
diff --git a/decoder/ixheaacd_hbe_trans.c b/decoder/ixheaacd_hbe_trans.c
index 30ae800..e188572 100644
--- a/decoder/ixheaacd_hbe_trans.c
+++ b/decoder/ixheaacd_hbe_trans.c
@@ -100,8 +100,8 @@ static FLOAT32 *ixheaacd_map_prot_filter(WORD32 filt_length) {
}
WORD32 ixheaacd_qmf_hbe_data_reinit(ia_esbr_hbe_txposer_struct *ptr_hbe_txposer,
- WORD16 *p_freq_band_tab[2], WORD16 *p_num_sfb,
- WORD32 upsamp_4_flag) {
+ WORD16 *p_freq_band_tab[2],
+ WORD16 *p_num_sfb, WORD32 upsamp_4_flag) {
WORD32 synth_size, sfb, patch, stop_patch;
if (ptr_hbe_txposer != NULL) {
@@ -214,19 +214,18 @@ WORD32 ixheaacd_qmf_hbe_data_reinit(ia_esbr_hbe_txposer_struct *ptr_hbe_txposer,
}
}
}
- if(ptr_hbe_txposer->k_start < 0)
- {
- return -1;
+ if (ptr_hbe_txposer->k_start < 0) {
+ return -1;
}
return 0;
}
WORD32 ixheaacd_qmf_hbe_apply(ia_esbr_hbe_txposer_struct *ptr_hbe_txposer,
- FLOAT32 qmf_buf_real[][64],
- FLOAT32 qmf_buf_imag[][64], WORD32 num_columns,
- FLOAT32 pv_qmf_buf_real[][64],
- FLOAT32 pv_qmf_buf_imag[][64],
- WORD32 pitch_in_bins) {
+ FLOAT32 qmf_buf_real[][64],
+ FLOAT32 qmf_buf_imag[][64], WORD32 num_columns,
+ FLOAT32 pv_qmf_buf_real[][64],
+ FLOAT32 pv_qmf_buf_imag[][64],
+ WORD32 pitch_in_bins) {
WORD32 i, qmf_band_idx;
WORD32 qmf_voc_columns = ptr_hbe_txposer->no_bins / 2;
WORD32 err_code = 0;
@@ -246,8 +245,7 @@ WORD32 ixheaacd_qmf_hbe_apply(ia_esbr_hbe_txposer_struct *ptr_hbe_txposer,
}
err_code = ixheaacd_complex_anal_filt(ptr_hbe_txposer);
- if(err_code)
- return err_code;
+ if (err_code) return err_code;
for (i = 0; i < (ptr_hbe_txposer->hbe_qmf_out_len - ptr_hbe_txposer->no_bins);
i++) {
diff --git a/decoder/ixheaacd_headerdecode.c b/decoder/ixheaacd_headerdecode.c
index 7208525..f68ce5f 100644
--- a/decoder/ixheaacd_headerdecode.c
+++ b/decoder/ixheaacd_headerdecode.c
@@ -604,7 +604,8 @@ WORD32 ixheaacd_ga_hdr_dec(ia_aac_dec_state_struct *aac_state_struct,
ixheaacd_conf_default(&(pstr_audio_specific_config->str_usac_config));
err = ixheaacd_config(it_bit_buff,
- &(pstr_audio_specific_config->str_usac_config),&(pstr_audio_specific_config->channel_configuration));
+ &(pstr_audio_specific_config->str_usac_config),
+ &(pstr_audio_specific_config->channel_configuration));
if (err != 0) return -1;
if (pstr_audio_specific_config->audio_object_type == AOT_USAC) {
@@ -798,10 +799,11 @@ WORD32 ixheaacd_check_if_adts(ia_adts_header_struct *adts,
result = ixheaacd_adtsframe(adts, it_bit_buff);
- max_frm_len_per_ch = ixheaacd_mult32(768 , (adts->no_raw_data_blocks + 1));
+ max_frm_len_per_ch = ixheaacd_mult32(768, (adts->no_raw_data_blocks + 1));
if (adts->channel_configuration != 0)
- max_frm_len_per_ch = ixheaacd_mult32(max_frm_len_per_ch, adts->channel_configuration);
+ max_frm_len_per_ch =
+ ixheaacd_mult32(max_frm_len_per_ch, adts->channel_configuration);
else
max_frm_len_per_ch = max_frm_len_per_ch * usr_max_ch;
diff --git a/decoder/ixheaacd_huff_code_reorder.c b/decoder/ixheaacd_huff_code_reorder.c
index f02127a..9d8c2a5 100644
--- a/decoder/ixheaacd_huff_code_reorder.c
+++ b/decoder/ixheaacd_huff_code_reorder.c
@@ -140,8 +140,7 @@ static UWORD8 ixheaacd_err_detect_pcw_segment(WORD8 remaining_bits_in_segment,
return 0;
}
-static VOID ixheaacd_nonpcw_sideinfo_init(
- ia_hcr_info_struct *ptr_hcr_info) {
+static VOID ixheaacd_nonpcw_sideinfo_init(ia_hcr_info_struct *ptr_hcr_info) {
UWORD16 i, k;
UWORD8 cb_dim;
UWORD8 *ptr_cb = ptr_hcr_info->str_non_pcw_side_info.ptr_cb;
@@ -1066,15 +1065,14 @@ static UWORD16 *ixheaacd_huff_dec_word_hcr_pcw(
return arr_seg_start_l;
}
-static VOID ixheaacd_decode_pcw(
- ia_bit_buf_struct *itt_bit_buff, ia_hcr_info_struct *ptr_hcr_info,
- ia_aac_dec_tables_struct *ptr_aac_tables) {
+static VOID ixheaacd_decode_pcw(ia_bit_buf_struct *itt_bit_buff,
+ ia_hcr_info_struct *ptr_hcr_info,
+ ia_aac_dec_tables_struct *ptr_aac_tables) {
UWORD16 ext_sort_sec;
UWORD16 cur_ext_sort_cw_sec;
UWORD8 codebook;
UWORD8 dimension;
-
WORD32 num_ext_sorted_cw_in_sect_idx =
ptr_hcr_info->sect_info.num_ext_sorted_cw_in_sect_idx;
UWORD8 *ptr_ext_sorted_cw = ptr_hcr_info->sect_info.ptr_ext_sorted_cw;
@@ -1102,7 +1100,6 @@ static VOID ixheaacd_decode_pcw(
WORD32 read_word = ixheaacd_aac_showbits_32(itt_bit_buff->ptr_read_next);
WORD32 read_bits = itt_bit_buff->cnt_bits;
-
itt_bit_buff->ptr_read_next += 4;
for (ext_sort_sec =
@@ -1342,10 +1339,8 @@ static PLATFORM_INLINE UWORD16 ixheaacd_huff_dec_word_hcr_non_pcw(
WORD32 out1, out2;
UWORD16 cw_len;
-
WORD16 index, length;
-
WORD32 read_word = ixheaacd_aac_showbits_32(itt_bit_buff->byte_ptr);
UWORD8 *ptr_read_next = itt_bit_buff->byte_ptr;
ptr_read_next += 4;
@@ -1353,7 +1348,6 @@ static PLATFORM_INLINE UWORD16 ixheaacd_huff_dec_word_hcr_non_pcw(
ixheaacd_huff_sfb_table(read_word, &index, &length, code_book_tbl, idx_table);
cw_len = length;
-
ixheaacd_aac_read_byte_corr1(&ptr_read_next, &length, &read_word);
out1 = index / 17;
@@ -1363,7 +1357,6 @@ static PLATFORM_INLINE UWORD16 ixheaacd_huff_dec_word_hcr_non_pcw(
sp1 = out1;
sp2 = out2;
-
if (out1) {
if (flush_cw & 0x80000000) {
out1 = -out1;
@@ -1384,7 +1377,6 @@ static PLATFORM_INLINE UWORD16 ixheaacd_huff_dec_word_hcr_non_pcw(
ixheaacd_aac_read_byte_corr1(&ptr_read_next, &length, &read_word);
if (sp1 == 16) {
-
i = 4;
value = ixheaacd_extu(read_word, length, 23);
value = value | 0xfffffe00;
@@ -1616,8 +1608,6 @@ static VOID ixheaacd_decode_hcr_non_pcw(
extra_code_bits = max(tot_bits_to_save - 32, 0);
code_bits_to_save = min(tot_bits_to_save, 32);
-
-
ptr_hcr_info->str_segment_info.code_extra[*cw_offset] =
ixheaacd_read_bit(itt_bit_buff, extra_code_bits);
ptr_hcr_info->str_segment_info.code[*cw_offset] =
@@ -1654,9 +1644,9 @@ static VOID ixheaacd_decode_hcr_non_pcw(
}
}
-VOID ixheaacd_decode_non_pcw(
- ia_bit_buf_struct *itt_bit_buff, ia_hcr_info_struct *ptr_hcr_info,
- ia_aac_dec_tables_struct *ptr_aac_tables) {
+VOID ixheaacd_decode_non_pcw(ia_bit_buf_struct *itt_bit_buff,
+ ia_hcr_info_struct *ptr_hcr_info,
+ ia_aac_dec_tables_struct *ptr_aac_tables) {
UWORD32 num_valid_segment;
WORD32 cw_offset;
WORD32 trial;
@@ -1856,8 +1846,8 @@ UWORD32 ixheaacd_hcr_decoder(
ptr_hcr_info->str_dec_io.quant_spec_coeff_idx = ptr_tmp4;
ptr_hcr_info->sect_info.ext_sorted_sect_max_cb_len_idx = ptr_tmp5;
- ixheaacd_hcr_reorder_quantized_spec_coeff(
- ptr_hcr_info, ptr_aac_dec_channel_info);
+ ixheaacd_hcr_reorder_quantized_spec_coeff(ptr_hcr_info,
+ ptr_aac_dec_channel_info);
bit_cnt_offset = (WORD32)itt_bit_buff->cnt_bits - (WORD32)save_bit_cnt;
if (bit_cnt_offset) {
diff --git a/decoder/ixheaacd_imdct.c b/decoder/ixheaacd_imdct.c
index 302c981..a93b04b 100644
--- a/decoder/ixheaacd_imdct.c
+++ b/decoder/ixheaacd_imdct.c
@@ -72,8 +72,8 @@ extern const FLOAT64 ixheaacd_power_10_table[28];
static WORD32 ixheaacd_calc_max_spectralline(WORD32 *p_in_ibuffer, WORD32 n) {
WORD32 k, shiftp, itemp = 0;
for (k = 0; k < n; k++) {
-
- if (ixheaacd_abs32_sat(p_in_ibuffer[k]) > itemp) itemp = ixheaacd_abs32_sat(p_in_ibuffer[k]);
+ if (ixheaacd_abs32_sat(p_in_ibuffer[k]) > itemp)
+ itemp = ixheaacd_abs32_sat(p_in_ibuffer[k]);
}
shiftp = ixheaacd_norm32(itemp);
@@ -400,8 +400,7 @@ static WORD32 ixheaacd_fd_imdct_short(ia_usac_data_struct *usac_data,
p_out_buffer[k] = ((FLOAT32)p_out_ibuffer[k]) * qfac;
}
err_code = ixheaacd_lpd_bpf_fix(usac_data, 1, p_out_buffer, st);
- if(err_code != 0)
- return err_code;
+ if (err_code != 0) return err_code;
for (k = 0; k < ixheaacd_drc_offset->n_long; k++) {
p_out_ibuffer[k] = (WORD32)(p_out_buffer[k] * (1 << 15));
@@ -498,8 +497,7 @@ static WORD32 ixheaacd_fd_imdct_long(ia_usac_data_struct *usac_data,
p_out_buffer[k] = ((FLOAT32)p_out_ibuffer[k]) * qfac;
}
err_code = ixheaacd_lpd_bpf_fix(usac_data, 0, p_out_buffer, st);
- if(err_code != 0)
- return err_code;
+ if (err_code != 0) return err_code;
for (k = 0; k < ixheaacd_drc_offset->n_long; k++) {
p_out_ibuffer[k] = (WORD32)(p_out_buffer[k] * (1 << 15));
diff --git a/decoder/ixheaacd_init_config.c b/decoder/ixheaacd_init_config.c
index fe02d9b..0fe2fa7 100644
--- a/decoder/ixheaacd_init_config.c
+++ b/decoder/ixheaacd_init_config.c
@@ -85,30 +85,28 @@ UWORD32 ixheaacd_sbr_ratio(UWORD32 core_sbr_framelength_idx) {
return sbr_ratio_index;
}
-WORD32 ixheaacd_get_sample_freq_indx(WORD32 sampling_freq)
-{
- WORD32 sampling_rate_tbl[] = {
- 96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025,
- 8000, 7350, 0, 0, 0};
+WORD32 ixheaacd_get_sample_freq_indx(WORD32 sampling_freq) {
+ WORD32 sampling_rate_tbl[] = {96000, 88200, 64000, 48000, 44100, 32000,
+ 24000, 22050, 16000, 12000, 11025, 8000,
+ 7350, 0, 0, 0};
- WORD32 index;
- WORD32 tbl_size = sizeof(sampling_rate_tbl)/sizeof(WORD32) - 1;
+ WORD32 index;
+ WORD32 tbl_size = sizeof(sampling_rate_tbl) / sizeof(WORD32) - 1;
- for (index = 0; index < tbl_size; index++) {
- if (sampling_rate_tbl[index] == sampling_freq) break;
- }
+ for (index = 0; index < tbl_size; index++) {
+ if (sampling_rate_tbl[index] == sampling_freq) break;
+ }
- if (index > tbl_size) {
- return tbl_size - 1;
- }
+ if (index > tbl_size) {
+ return tbl_size - 1;
+ }
- return index;
+ return index;
}
UWORD32 ixheaacd_sbr_params(UWORD32 core_sbr_framelength_idx,
WORD32 *output_framelength, WORD32 *block_size,
- WORD32 *output_samples,
- WORD32 * sample_rate_layer,
- UWORD32 * sample_freq_indx) {
+ WORD32 *output_samples, WORD32 *sample_rate_layer,
+ UWORD32 *sample_freq_indx) {
UWORD32 sbr_ratio_index = 0x0FF;
*output_framelength = -1;
@@ -151,7 +149,6 @@ UWORD32 ixheaacd_sbr_params(UWORD32 core_sbr_framelength_idx,
*sample_freq_indx = ixheaacd_get_sample_freq_indx(*sample_rate_layer);
-
return sbr_ratio_index;
}
@@ -236,11 +233,9 @@ VOID ixheaacd_sbr_config(ia_bit_buf_struct *it_bit_buff,
WORD32 ixheaacd_ext_element_config(
ia_bit_buf_struct *it_bit_buff,
- ia_usac_dec_element_config_struct *pstr_usac_element_config
- ,
- UWORD8 *ptr_usac_ext_ele_payload, WORD32 *ptr_usac_ext_ele_payload_len
- ,WORD32 *preroll_flag
- ) {
+ ia_usac_dec_element_config_struct *pstr_usac_element_config,
+ UWORD8 *ptr_usac_ext_ele_payload, WORD32 *ptr_usac_ext_ele_payload_len,
+ WORD32 *preroll_flag) {
UWORD32 usac_ext_element_type, usac_ext_element_config_length, flag;
UWORD32 i;
@@ -249,8 +244,7 @@ WORD32 ixheaacd_ext_element_config(
ixheaacd_read_escape_value(it_bit_buff, &(usac_ext_element_config_length), 4,
8, 16);
- if(usac_ext_element_config_length >= 768)
- return -1;
+ if (usac_ext_element_config_length >= 768) return -1;
flag = ixheaacd_read_bits_buf(it_bit_buff, 1);
@@ -274,7 +268,7 @@ WORD32 ixheaacd_ext_element_config(
case ID_EXT_ELE_FILL:
break;
case ID_EXT_ELE_AUDIOPREROLL:
- *preroll_flag=1;
+ *preroll_flag = 1;
break;
case ID_EXT_ELE_UNI_DRC:
for (i = 0; i < usac_ext_element_config_length; i++) {
@@ -375,7 +369,7 @@ WORD32 ixheaacd_decoder_config(
ixheaacd_read_escape_value(
it_bit_buff, &(pstr_usac_decoder_config->num_elements), 4, 8, 16);
pstr_usac_decoder_config->num_elements += 1;
- pstr_usac_decoder_config->preroll_flag=0;
+ pstr_usac_decoder_config->preroll_flag = 0;
if (pstr_usac_decoder_config->num_elements > USAC_MAX_ELEMENTS) {
return -1;
@@ -406,8 +400,8 @@ WORD32 ixheaacd_decoder_config(
case ID_USAC_CPE:
ixheaacd_cpe_config(it_bit_buff, pstr_usac_element_config,
sbr_ratio_index);
- if (pstr_usac_element_config->stereo_config_index > 1 && *chan <2)
- return -1;
+ if (pstr_usac_element_config->stereo_config_index > 1 && *chan < 2)
+ return -1;
break;
@@ -419,12 +413,10 @@ WORD32 ixheaacd_decoder_config(
case ID_USAC_EXT:
err = ixheaacd_ext_element_config(
- it_bit_buff, pstr_usac_element_config
- ,
+ it_bit_buff, pstr_usac_element_config,
&pstr_usac_decoder_config->usac_ext_ele_payload_buf[elem_idx][0],
- &pstr_usac_decoder_config->usac_ext_ele_payload_len[elem_idx]
- ,&(pstr_usac_decoder_config->preroll_flag)
- );
+ &pstr_usac_decoder_config->usac_ext_ele_payload_len[elem_idx],
+ &(pstr_usac_decoder_config->preroll_flag));
if (pstr_usac_decoder_config->usac_ext_ele_payload_len[elem_idx] > 0) {
pstr_usac_decoder_config->usac_ext_ele_payload_present[elem_idx] = 1;
@@ -443,8 +435,7 @@ WORD32 ixheaacd_decoder_config(
WORD32 ixheaacd_config_extension(
ia_bit_buf_struct *it_bit_buff,
- ia_usac_decoder_config_struct *pstr_usac_decoder_config
- ) {
+ ia_usac_decoder_config_struct *pstr_usac_decoder_config) {
UWORD32 i, j;
UWORD32 num_config_extensions;
UWORD32 usac_config_ext_type, usac_config_ext_len;
@@ -539,15 +530,14 @@ WORD32 ixheaacd_config(ia_bit_buf_struct *it_bit_buff,
err = ixheaacd_decoder_config(
it_bit_buff, &(pstr_usac_conf->str_usac_dec_config),
- ixheaacd_sbr_ratio(pstr_usac_conf->core_sbr_framelength_index),chan);
+ ixheaacd_sbr_ratio(pstr_usac_conf->core_sbr_framelength_index), chan);
if (err != 0) return -1;
tmp = ixheaacd_read_bits_buf(it_bit_buff, 1);
if (tmp) {
err = ixheaacd_config_extension(it_bit_buff,
- &pstr_usac_conf->str_usac_dec_config
- );
+ &pstr_usac_conf->str_usac_dec_config);
if (err != 0) return -1;
}
diff --git a/decoder/ixheaacd_lpc.c b/decoder/ixheaacd_lpc.c
index ca0546f..70c514f 100644
--- a/decoder/ixheaacd_lpc.c
+++ b/decoder/ixheaacd_lpc.c
@@ -203,9 +203,9 @@ static VOID ixheaacd_lsf_2_lsp_conversion_float(FLOAT32 lsf[], FLOAT32 lsp[],
}
static WORD32 ixheaacd_bass_post_filter(FLOAT32 *synth_sig, WORD32 *pitch,
- FLOAT32 *pitch_gain, FLOAT32 *synth_out,
- WORD32 len_fr, WORD32 len2,
- FLOAT32 bpf_prev[]) {
+ FLOAT32 *pitch_gain, FLOAT32 *synth_out,
+ WORD32 len_fr, WORD32 len2,
+ FLOAT32 bpf_prev[]) {
WORD32 i, j, sf, num_subfr, pitch_lag, lg;
FLOAT32 x_energy, xy_corr, y_energy, norm_corr, energy, gain, tmp, alpha;
FLOAT32 noise_buf[FILTER_DELAY + (2 * LEN_SUBFR)], *noise_tmp1, *noise_tmp2,
@@ -223,8 +223,7 @@ static WORD32 ixheaacd_bass_post_filter(FLOAT32 *synth_sig, WORD32 *pitch,
for (num_subfr = 0; num_subfr < len_fr; num_subfr += LEN_SUBFR, sf++) {
pitch_lag = pitch[sf];
gain = pitch_gain[sf];
- if(((pitch_lag >> 1) + 96 - num_subfr) > MAX_PITCH)
- return -1;
+ if (((pitch_lag >> 1) + 96 - num_subfr) > MAX_PITCH) return -1;
if (gain > 1.0f) gain = 1.0f;
if (gain < 0.0f) gain = 0.0f;
@@ -413,9 +412,9 @@ WORD32 ixheaacd_lpd_dec(ia_usac_data_struct *usac_data,
} else {
fac_length = len_subfrm / 2;
}
- if((pstr_td_frame_data->fac_data[0] < 0) || (pstr_td_frame_data->fac_data[0] > 128))
- {
- return -1;
+ if ((pstr_td_frame_data->fac_data[0] < 0) ||
+ (pstr_td_frame_data->fac_data[0] > 128)) {
+ return -1;
}
gain = ixheaacd_pow_10_i_by_128[pstr_td_frame_data->fac_data[0]];
@@ -605,10 +604,11 @@ WORD32 ixheaacd_lpd_dec(ia_usac_data_struct *usac_data,
if (mod[3] == 0) {
err = ixheaacd_bass_post_filter(synth, pitch, pitch_gain, fsynth, len_fr,
- synth_delay, st->bpf_prev);
+ synth_delay, st->bpf_prev);
} else {
- err = ixheaacd_bass_post_filter(synth, pitch, pitch_gain, fsynth, len_fr,
- synth_delay - (len_subfrm / 2), st->bpf_prev);
+ err =
+ ixheaacd_bass_post_filter(synth, pitch, pitch_gain, fsynth, len_fr,
+ synth_delay - (len_subfrm / 2), st->bpf_prev);
}
return err;
}
@@ -657,8 +657,9 @@ WORD32 ixheaacd_lpd_dec_update(ia_usac_lpd_decoder_handle tddec,
return err;
}
-WORD32 ixheaacd_lpd_bpf_fix(ia_usac_data_struct *usac_data, WORD32 is_short_flag,
- FLOAT32 out_buffer[], ia_usac_lpd_decoder_handle st) {
+WORD32 ixheaacd_lpd_bpf_fix(ia_usac_data_struct *usac_data,
+ WORD32 is_short_flag, FLOAT32 out_buffer[],
+ ia_usac_lpd_decoder_handle st) {
WORD32 i, tp, k;
float synth_buf[MAX_PITCH + SYNTH_DELAY_LMAX + LEN_SUPERFRAME];
float signal_out[LEN_SUPERFRAME];
@@ -702,13 +703,10 @@ WORD32 ixheaacd_lpd_bpf_fix(ia_usac_data_struct *usac_data, WORD32 is_short_flag
for (i = 0; i < num_subfr_by2 + 2; i++) {
tp = pitch[i];
- if((i * LEN_SUBFR + MAX_PITCH) < tp)
- {
- return -1;
- }
- else if((i * LEN_SUBFR + MAX_PITCH - tp) >= 1883)
- {
- return -1;
+ if ((i * LEN_SUBFR + MAX_PITCH) < tp) {
+ return -1;
+ } else if ((i * LEN_SUBFR + MAX_PITCH - tp) >= 1883) {
+ return -1;
}
if (pitch_gain[i] > 0.0f) {
synth_corr = 0.0f, synth_energy = 1e-6f;
@@ -723,11 +721,10 @@ WORD32 ixheaacd_lpd_bpf_fix(ia_usac_data_struct *usac_data, WORD32 is_short_flag
}
err = ixheaacd_bass_post_filter(synth, pitch, pitch_gain, signal_out,
- (lpd_sbf_len + 2) * LEN_SUBFR + LEN_SUBFR,
- len_fr - (lpd_sbf_len + 2) * LEN_SUBFR,
- st->bpf_prev);
- if(err != 0)
- return err;
+ (lpd_sbf_len + 2) * LEN_SUBFR + LEN_SUBFR,
+ len_fr - (lpd_sbf_len + 2) * LEN_SUBFR,
+ st->bpf_prev);
+ if (err != 0) return err;
ixheaacd_mem_cpy(signal_out, out_buffer,
(lpd_sbf_len + 2) * LEN_SUBFR + LEN_SUBFR);
diff --git a/decoder/ixheaacd_lpfuncs.c b/decoder/ixheaacd_lpfuncs.c
index 747dd7c..06fce57 100644
--- a/decoder/ixheaacd_lpfuncs.c
+++ b/decoder/ixheaacd_lpfuncs.c
@@ -139,7 +139,7 @@ VOID ixheaacd_process_win_seq(WORD32 *coef, WORD32 *prev, WORD16 *out,
ixheaacd_mult32x16in32(coef[SIZE08 + i], window_long[2 * i]),
(q_shift + 1));
- accu = ixheaacd_add32_sat(temp1 , ((WORD32)prev[i] << 16));
+ accu = ixheaacd_add32_sat(temp1, ((WORD32)prev[i] << 16));
out[ch_fac * i] = ixheaacd_round16(accu << 1);
accu = ixheaacd_shl32_dir_sat_limit(
@@ -192,10 +192,11 @@ VOID ixheaacd_process_win_seq(WORD32 *coef, WORD32 *prev, WORD16 *out,
*out1 = ixheaacd_round16(accu << 2);
out1 += ch_fac;
- accu = ixheaacd_sub32_sat(ixheaacd_shl32_dir_sat_limit(
- ixheaacd_mult32x16in32(ixheaacd_negate32_sat(temp_coef), win2),
- q_shift),
- ixheaacd_mult32x16in32_drc(prev1, win4));
+ accu = ixheaacd_sub32_sat(
+ ixheaacd_shl32_dir_sat_limit(
+ ixheaacd_mult32x16in32(ixheaacd_negate32_sat(temp_coef), win2),
+ q_shift),
+ ixheaacd_mult32x16in32_drc(prev1, win4));
*out2 = ixheaacd_round16(accu << 2);
out2 -= ch_fac;
}
diff --git a/decoder/ixheaacd_main.h b/decoder/ixheaacd_main.h
index bf80bda..55b8eb3 100644
--- a/decoder/ixheaacd_main.h
+++ b/decoder/ixheaacd_main.h
@@ -221,7 +221,8 @@ WORD32 ixheaacd_fwd_alias_cancel_tool(
WORD32 fac_length, FLOAT32 *iaq, WORD32 gain);
WORD32 ixheaacd_lpd_bpf_fix(ia_usac_data_struct *usac_data, WORD32 is_short,
- FLOAT32 out_buffer[], ia_usac_lpd_decoder_handle st);
+ FLOAT32 out_buffer[],
+ ia_usac_lpd_decoder_handle st);
VOID ixheaacd_reset_acelp_data_fix(ia_usac_data_struct *usac_data,
ia_usac_lpd_decoder_handle st,
diff --git a/decoder/ixheaacd_mps_dec.c b/decoder/ixheaacd_mps_dec.c
index fd3b632..890ce15 100644
--- a/decoder/ixheaacd_mps_dec.c
+++ b/decoder/ixheaacd_mps_dec.c
@@ -79,9 +79,9 @@ extern ia_huff_cld_nodes_struct ixheaacd_huff_cld_nodes;
extern ia_huff_icc_nodes_struct ixheaacd_huff_icc_nodes;
extern ia_huff_res_nodes_struct ixheaacd_huff_reshape_nodes;
-VOID ixheaacd_mps_create(ia_mps_dec_state_struct* self,
- WORD32 bs_frame_len, WORD32 residual_coding,
- ia_usac_dec_mps_config_struct* mps212_config) {
+VOID ixheaacd_mps_create(ia_mps_dec_state_struct* self, WORD32 bs_frame_len,
+ WORD32 residual_coding,
+ ia_usac_dec_mps_config_struct* mps212_config) {
WORD32 num_ch;
WORD32 err_code = 0;
@@ -272,8 +272,8 @@ VOID ixheaacd_mps_create_w(ia_mps_dec_state_struct* self) {
ixheaacd_mps_mix_res_decor(self);
}
WORD32 ixheaacd_mps_apply(ia_mps_dec_state_struct* self,
- FLOAT32** input_buffer[4],
- FLOAT32 (*output_buffer)[4096]) {
+ FLOAT32** input_buffer[4],
+ FLOAT32 (*output_buffer)[4096]) {
WORD32 ch, ts, qs;
WORD32 time_slots = self->time_slots;
WORD32 in_ch_count = self->in_ch_count + self->res_ch_count;
@@ -319,8 +319,7 @@ WORD32 ixheaacd_mps_apply(ia_mps_dec_state_struct* self,
}
err = ixheaacd_mps_temp_process(self);
- if(err)
- return err;
+ if (err) return err;
self->parse_nxt_frame = 1;
return 0;
diff --git a/decoder/ixheaacd_mps_interface.h b/decoder/ixheaacd_mps_interface.h
index 7a6412d..7587773 100644
--- a/decoder/ixheaacd_mps_interface.h
+++ b/decoder/ixheaacd_mps_interface.h
@@ -20,15 +20,15 @@
#ifndef IXHEAACD_MPS_INTERFACE_H
#define IXHEAACD_MPS_INTERFACE_H
-VOID ixheaacd_mps_create(ia_mps_dec_state_struct* self,
- WORD32 bs_frame_len, WORD32 residual_coding,
- ia_usac_dec_mps_config_struct* usac_mps_config);
+VOID ixheaacd_mps_create(ia_mps_dec_state_struct* self, WORD32 bs_frame_len,
+ WORD32 residual_coding,
+ ia_usac_dec_mps_config_struct* usac_mps_config);
VOID ixheaacd_mps_frame_parsing(ia_mps_dec_state_struct* self,
WORD32 independency_flag,
ia_handle_bit_buf_struct it_bit_buff);
WORD32 ixheaacd_mps_apply(ia_mps_dec_state_struct* self, FLOAT32** pointers[4],
- FLOAT32 (*out_samples)[4096]);
+ FLOAT32 (*out_samples)[4096]);
#endif
diff --git a/decoder/ixheaacd_mps_temp_process.c b/decoder/ixheaacd_mps_temp_process.c
index b7ca817..43e5781 100644
--- a/decoder/ixheaacd_mps_temp_process.c
+++ b/decoder/ixheaacd_mps_temp_process.c
@@ -234,10 +234,9 @@ WORD32 ixheaacd_mps_temp_process(ia_mps_dec_state_struct* self) {
for (ch = 0; ch < self->out_ch_count; ch++) {
err = ixheaacd_sbr_dec_from_mps(&self->qmf_out_dir[ch][0][0].re,
- self->p_sbr_dec[ch], self->p_sbr_frame[ch],
- self->p_sbr_header[ch]);
- if(err)
- return err;
+ self->p_sbr_dec[ch], self->p_sbr_frame[ch],
+ self->p_sbr_header[ch]);
+ if (err) return err;
}
ixheaacd_mps_synt_calc(self);
diff --git a/decoder/ixheaacd_process.c b/decoder/ixheaacd_process.c
index ba4558b..b87b61a 100644
--- a/decoder/ixheaacd_process.c
+++ b/decoder/ixheaacd_process.c
@@ -147,8 +147,7 @@ static VOID ixheaacd_sbr_ext_data_read(
cnt_bits_in = it_bit_buff->cnt_bits;
count = (it_bit_buff->cnt_bits) >> 3;
if (count > 0) {
- if (
- (esbr_bit_str->no_elements < MAXNRSBRELEMENTS)) {
+ if ((esbr_bit_str->no_elements < MAXNRSBRELEMENTS)) {
esbr_bit_str->str_sbr_ele[esbr_bit_str->no_elements].extension_type =
EXT_SBR_DATA;
esbr_bit_str->str_sbr_ele[esbr_bit_str->no_elements].size_payload = count;
@@ -168,10 +167,8 @@ static VOID ixheaacd_sbr_ext_data_read(
static WORD32 ixheaacd_read_ext_element(
UWORD32 usac_ext_element_default_length,
- UWORD32 usac_ext_element_payload_frag, ia_bit_buf_struct *it_bit_buff
- ,
- ia_usac_decoder_config_struct *pstr_usac_dec_config, WORD32 elem_idx
- ) {
+ UWORD32 usac_ext_element_payload_frag, ia_bit_buf_struct *it_bit_buff,
+ ia_usac_decoder_config_struct *pstr_usac_dec_config, WORD32 elem_idx) {
UWORD32 usac_ext_element_present;
UWORD32 usac_ext_element_use_dft_length;
UWORD32 pay_load_length, tmp;
@@ -193,7 +190,7 @@ static WORD32 ixheaacd_read_ext_element(
}
}
if ((it_bit_buff->cnt_bits >> 3) < (WORD32)pay_load_length)
- return IA_ENHAACPLUS_DEC_EXE_NONFATAL_INSUFFICIENT_INPUT_BYTES;
+ return IA_ENHAACPLUS_DEC_EXE_NONFATAL_INSUFFICIENT_INPUT_BYTES;
if (pay_load_length > 0) {
if (usac_ext_element_payload_frag)
tmp = ixheaacd_read_bits_buf(it_bit_buff, 2);
@@ -206,12 +203,10 @@ static WORD32 ixheaacd_read_ext_element(
}
pstr_usac_dec_config->usac_ext_gain_payload_len += pay_load_length;
} else {
-
it_bit_buff->ptr_read_next =
it_bit_buff->ptr_read_next + pay_load_length;
it_bit_buff->cnt_bits =
it_bit_buff->cnt_bits - (WORD32)(pay_load_length * 8);
-
}
}
}
@@ -313,15 +308,15 @@ WORD32 ixheaacd_usac_process(ia_dec_data_struct *pstr_dec_data,
case ID_USAC_CPE:
nr_core_coder_channels = (stereo_config_index == 1) ? 1 : 2;
- if((stereo_config_index > 1) && (p_state_aac_dec->num_of_output_ch<2))
- return -1;
+ if ((stereo_config_index > 1) &&
+ (p_state_aac_dec->num_of_output_ch < 2))
+ return -1;
goto core_data_extracting;
case ID_USAC_LFE:
nr_core_coder_channels = 1;
core_data_extracting:
- if(ch_offset >= MAX_NUM_CHANNELS)
- return -1;
+ if (ch_offset >= MAX_NUM_CHANNELS) return -1;
err = ixheaacd_core_coder_data(ele_id, pstr_usac_data, elem_idx,
&ch_offset, it_bit_buff,
nr_core_coder_channels);
@@ -346,16 +341,14 @@ WORD32 ixheaacd_usac_process(ia_dec_data_struct *pstr_dec_data,
pstr_usac_data, it_bit_buff, stereo_config_index,
nr_core_coder_channels,
pstr_dec_data->str_usac_data.audio_object_type);
- if(err_code < 0)
- return err_code;
+ if (err_code < 0) return err_code;
}
if (stereo_config_index > 0) {
FLOAT32 **ptr_inp[2 * 2];
WORD32 ch;
- *num_out_channels =
- p_state_aac_dec->mps_dec_handle.out_ch_count;
+ *num_out_channels = p_state_aac_dec->mps_dec_handle.out_ch_count;
ixheaacd_mps_frame_parsing(&p_state_aac_dec->mps_dec_handle,
pstr_usac_data->usac_independency_flg,
@@ -387,9 +380,8 @@ WORD32 ixheaacd_usac_process(ia_dec_data_struct *pstr_dec_data,
}
err = ixheaacd_mps_apply(&p_state_aac_dec->mps_dec_handle, ptr_inp,
- pstr_usac_data->time_sample_vector);
- if(err)
- return err;
+ pstr_usac_data->time_sample_vector);
+ if (err) return err;
}
ch_offset += nr_core_coder_channels;
@@ -398,13 +390,11 @@ WORD32 ixheaacd_usac_process(ia_dec_data_struct *pstr_dec_data,
case ID_USAC_EXT: {
ia_usac_dec_element_config_struct *pusac_element_config =
&pstr_usac_dec_config->str_usac_element_config[elem_idx];
- err = ixheaacd_read_ext_element(pusac_element_config->usac_ext_eleme_def_len,
- pusac_element_config->usac_ext_elem_pld_frag,
- it_bit_buff,
- pstr_usac_dec_config, elem_idx
- );
- if (err != 0)
- return err;
+ err = ixheaacd_read_ext_element(
+ pusac_element_config->usac_ext_eleme_def_len,
+ pusac_element_config->usac_ext_elem_pld_frag, it_bit_buff,
+ pstr_usac_dec_config, elem_idx);
+ if (err != 0) return err;
break;
}
diff --git a/decoder/ixheaacd_qmf_dec.c b/decoder/ixheaacd_qmf_dec.c
index a01b8ec..ffc0c84 100644
--- a/decoder/ixheaacd_qmf_dec.c
+++ b/decoder/ixheaacd_qmf_dec.c
@@ -983,4 +983,3 @@ VOID ixheaacd_cplx_synt_qmffilt(
qmf_bank->filter_pos_syn = filter_coeff;
qmf_bank->ixheaacd_drc_offset = ixheaacd_drc_offset;
}
-
diff --git a/decoder/ixheaacd_qmf_dec.h b/decoder/ixheaacd_qmf_dec.h
index 96356ee..89f2e5f 100644
--- a/decoder/ixheaacd_qmf_dec.h
+++ b/decoder/ixheaacd_qmf_dec.h
@@ -187,15 +187,14 @@ VOID ixheaacd_esbr_cos_sin_mod(WORD32 *subband,
WORD32 *p_twiddle, WORD32 *p_dig_rev_tbl);
VOID ixheaacd_inv_modulation_lp(WORD32 *qmf_real, WORD16 *filter_states,
- ia_sbr_qmf_filter_bank_struct *syn_qmf,
- ia_qmf_dec_tables_struct *qmf_dec_tables_ptr);
+ ia_sbr_qmf_filter_bank_struct *syn_qmf,
+ ia_qmf_dec_tables_struct *qmf_dec_tables_ptr);
-VOID ixheaacd_sbr_pre_twiddle(WORD32 *p_xre, WORD32 *p_xim,
- WORD16 *p_twiddles);
+VOID ixheaacd_sbr_pre_twiddle(WORD32 *p_xre, WORD32 *p_xim, WORD16 *p_twiddles);
-VOID ixheaacd_inv_emodulation(
- WORD32 *qmf_real, ia_sbr_qmf_filter_bank_struct *syn_qmf,
- ia_qmf_dec_tables_struct *qmf_dec_tables_ptr);
+VOID ixheaacd_inv_emodulation(WORD32 *qmf_real,
+ ia_sbr_qmf_filter_bank_struct *syn_qmf,
+ ia_qmf_dec_tables_struct *qmf_dec_tables_ptr);
VOID ixheaacd_pretwdct2(WORD32 *inp, WORD32 *out_fwd);
@@ -208,8 +207,8 @@ VOID ixheaacd_dct2_32(WORD32 *inp, WORD32 *out,
WORD16 *filter_states);
VOID ixheaacd_inv_modulation_lp(WORD32 *qmf_real, WORD16 *filter_states,
- ia_sbr_qmf_filter_bank_struct *syn_qmf,
- ia_qmf_dec_tables_struct *qmf_dec_tables_ptr);
+ ia_sbr_qmf_filter_bank_struct *syn_qmf,
+ ia_qmf_dec_tables_struct *qmf_dec_tables_ptr);
VOID ixheaacd_fftposttw(WORD32 *out,
ia_qmf_dec_tables_struct *qmf_dec_tables_ptr);
diff --git a/decoder/ixheaacd_qmf_poly.h b/decoder/ixheaacd_qmf_poly.h
index debdad5..8a67480 100644
--- a/decoder/ixheaacd_qmf_poly.h
+++ b/decoder/ixheaacd_qmf_poly.h
@@ -26,8 +26,8 @@ double *ixheaacd_interpo_esbr_fcoff(const double *orig_prot, WORD32 no,
WORD32 ixheaacd_complex_anal_filt(ia_esbr_hbe_txposer_struct *ptr_hbe_txposer);
WORD32 ixheaacd_real_synth_filt(ia_esbr_hbe_txposer_struct *ptr_hbe_txposer,
- WORD32 num_columns, FLOAT32 qmf_buf_real[][64],
- FLOAT32 qmf_buf_imag[][64]);
+ WORD32 num_columns, FLOAT32 qmf_buf_real[][64],
+ FLOAT32 qmf_buf_imag[][64]);
VOID ixheaacd_cmplx_anal_fft_p2(FLOAT32 *inp, FLOAT32 *out, WORD32 n_points);
diff --git a/decoder/ixheaacd_sbr_dec.c b/decoder/ixheaacd_sbr_dec.c
index 31beb76..1adc72a 100644
--- a/decoder/ixheaacd_sbr_dec.c
+++ b/decoder/ixheaacd_sbr_dec.c
@@ -555,18 +555,19 @@ VOID ixheaacd_esbr_synthesis_filt_block(
}
WORD32 ixheaacd_sbr_dec(ia_sbr_dec_struct *ptr_sbr_dec, WORD16 *ptr_time_data,
- ia_sbr_header_data_struct *ptr_header_data,
- ia_sbr_frame_info_data_struct *ptr_frame_data,
- ia_sbr_prev_frame_data_struct *ptr_frame_data_prev,
- ia_ps_dec_struct *ptr_ps_dec,
- ia_sbr_qmf_filter_bank_struct *ptr_qmf_synth_bank_r,
- ia_sbr_scale_fact_struct *ptr_sbr_sf_r,
- FLAG apply_processing, FLAG low_pow_flag,
- WORD32 *ptr_work_buf_core,
- ia_sbr_tables_struct *sbr_tables_ptr,
- ixheaacd_misc_tables *pstr_common_tables, WORD ch_fac,
- ia_pvc_data_struct *ptr_pvc_data, FLAG drc_on,
- WORD32 drc_sbr_factors[][64], WORD32 audio_object_type) {
+ ia_sbr_header_data_struct *ptr_header_data,
+ ia_sbr_frame_info_data_struct *ptr_frame_data,
+ ia_sbr_prev_frame_data_struct *ptr_frame_data_prev,
+ ia_ps_dec_struct *ptr_ps_dec,
+ ia_sbr_qmf_filter_bank_struct *ptr_qmf_synth_bank_r,
+ ia_sbr_scale_fact_struct *ptr_sbr_sf_r,
+ FLAG apply_processing, FLAG low_pow_flag,
+ WORD32 *ptr_work_buf_core,
+ ia_sbr_tables_struct *sbr_tables_ptr,
+ ixheaacd_misc_tables *pstr_common_tables, WORD ch_fac,
+ ia_pvc_data_struct *ptr_pvc_data, FLAG drc_on,
+ WORD32 drc_sbr_factors[][64],
+ WORD32 audio_object_type) {
WORD i;
WORD slot, reserve;
WORD save_lb_scale;
@@ -715,8 +716,7 @@ WORD32 ixheaacd_sbr_dec(ia_sbr_dec_struct *ptr_sbr_dec, WORD16 *ptr_time_data,
ptr_sbr_dec->ph_vocod_qmf_real + (op_delay + SBR_HF_ADJ_OFFSET),
ptr_sbr_dec->ph_vocod_qmf_imag + (op_delay + SBR_HF_ADJ_OFFSET),
ptr_frame_data->pitch_in_bins);
- if(err_code)
- return err_code;
+ if (err_code) return err_code;
if (upsample_ratio_idx == SBR_UPSAMPLE_IDX_4_1) {
ixheaacd_hbe_repl_spec(
@@ -731,15 +731,15 @@ WORD32 ixheaacd_sbr_dec(ia_sbr_dec_struct *ptr_sbr_dec, WORD16 *ptr_time_data,
if (!mps_sbr_flag && apply_processing) {
WORD32 err_code = 0;
- err_code = ixheaacd_generate_hf(ptr_sbr_dec->qmf_buf_real + (SBR_HF_ADJ_OFFSET),
- ptr_sbr_dec->qmf_buf_imag + (SBR_HF_ADJ_OFFSET),
- ptr_sbr_dec->ph_vocod_qmf_real + (SBR_HF_ADJ_OFFSET),
- ptr_sbr_dec->ph_vocod_qmf_imag + (SBR_HF_ADJ_OFFSET),
- ptr_sbr_dec->sbr_qmf_out_real + (SBR_HF_ADJ_OFFSET),
- ptr_sbr_dec->sbr_qmf_out_imag + (SBR_HF_ADJ_OFFSET),
- ptr_frame_data, ptr_header_data);
- if(err_code)
- return err_code;
+ err_code = ixheaacd_generate_hf(
+ ptr_sbr_dec->qmf_buf_real + (SBR_HF_ADJ_OFFSET),
+ ptr_sbr_dec->qmf_buf_imag + (SBR_HF_ADJ_OFFSET),
+ ptr_sbr_dec->ph_vocod_qmf_real + (SBR_HF_ADJ_OFFSET),
+ ptr_sbr_dec->ph_vocod_qmf_imag + (SBR_HF_ADJ_OFFSET),
+ ptr_sbr_dec->sbr_qmf_out_real + (SBR_HF_ADJ_OFFSET),
+ ptr_sbr_dec->sbr_qmf_out_imag + (SBR_HF_ADJ_OFFSET), ptr_frame_data,
+ ptr_header_data);
+ if (err_code) return err_code;
ptr_pvc_data->pvc_rate = ptr_header_data->upsamp_fac;
@@ -759,22 +759,21 @@ WORD32 ixheaacd_sbr_dec(ia_sbr_dec_struct *ptr_sbr_dec, WORD16 *ptr_time_data,
ptr_pvc_data->prev_pvc_rate = ptr_pvc_data->pvc_rate;
ptr_frame_data->pstr_sbr_header = ptr_header_data;
- if(ptr_header_data->hbe_flag == 0)
- ixheaacd_sbr_env_calc(ptr_frame_data,
- ptr_sbr_dec->sbr_qmf_out_real + (SBR_HF_ADJ_OFFSET),
- ptr_sbr_dec->sbr_qmf_out_imag + (SBR_HF_ADJ_OFFSET),
- ptr_sbr_dec->qmf_buf_real + (SBR_HF_ADJ_OFFSET),
- ptr_sbr_dec->qmf_buf_imag + (SBR_HF_ADJ_OFFSET),
- NULL,
- ptr_sbr_dec->scratch_buff, pvc_dec_out_buf);
+ if (ptr_header_data->hbe_flag == 0)
+ ixheaacd_sbr_env_calc(
+ ptr_frame_data, ptr_sbr_dec->sbr_qmf_out_real + (SBR_HF_ADJ_OFFSET),
+ ptr_sbr_dec->sbr_qmf_out_imag + (SBR_HF_ADJ_OFFSET),
+ ptr_sbr_dec->qmf_buf_real + (SBR_HF_ADJ_OFFSET),
+ ptr_sbr_dec->qmf_buf_imag + (SBR_HF_ADJ_OFFSET), NULL,
+ ptr_sbr_dec->scratch_buff, pvc_dec_out_buf);
else
- ixheaacd_sbr_env_calc(ptr_frame_data,
- ptr_sbr_dec->sbr_qmf_out_real + (SBR_HF_ADJ_OFFSET),
- ptr_sbr_dec->sbr_qmf_out_imag + (SBR_HF_ADJ_OFFSET),
- ptr_sbr_dec->qmf_buf_real + (SBR_HF_ADJ_OFFSET),
- ptr_sbr_dec->qmf_buf_imag + (SBR_HF_ADJ_OFFSET),
- ptr_sbr_dec->p_hbe_txposer->x_over_qmf,
- ptr_sbr_dec->scratch_buff, pvc_dec_out_buf);
+ ixheaacd_sbr_env_calc(
+ ptr_frame_data, ptr_sbr_dec->sbr_qmf_out_real + (SBR_HF_ADJ_OFFSET),
+ ptr_sbr_dec->sbr_qmf_out_imag + (SBR_HF_ADJ_OFFSET),
+ ptr_sbr_dec->qmf_buf_real + (SBR_HF_ADJ_OFFSET),
+ ptr_sbr_dec->qmf_buf_imag + (SBR_HF_ADJ_OFFSET),
+ ptr_sbr_dec->p_hbe_txposer->x_over_qmf, ptr_sbr_dec->scratch_buff,
+ pvc_dec_out_buf);
} else {
for (i = 0; i < 64; i++) {
@@ -1015,10 +1014,10 @@ WORD32 ixheaacd_sbr_dec(ia_sbr_dec_struct *ptr_sbr_dec, WORD16 *ptr_time_data,
}
WORD32 ixheaacd_esbr_dec(ia_sbr_dec_struct *ptr_sbr_dec,
- ia_sbr_header_data_struct *ptr_header_data,
- ia_sbr_frame_info_data_struct *ptr_frame_data,
- FLAG apply_processing, FLAG low_pow_flag,
- ia_sbr_tables_struct *ptr_sbr_tables, WORD ch_fac) {
+ ia_sbr_header_data_struct *ptr_header_data,
+ ia_sbr_frame_info_data_struct *ptr_frame_data,
+ FLAG apply_processing, FLAG low_pow_flag,
+ ia_sbr_tables_struct *ptr_sbr_tables, WORD ch_fac) {
WORD32 i;
WORD32 op_delay;
@@ -1110,8 +1109,7 @@ WORD32 ixheaacd_esbr_dec(ia_sbr_dec_struct *ptr_sbr_dec,
ptr_sbr_dec->ph_vocod_qmf_real + (op_delay + SBR_HF_ADJ_OFFSET),
ptr_sbr_dec->ph_vocod_qmf_imag + (op_delay + SBR_HF_ADJ_OFFSET),
ptr_frame_data->pitch_in_bins);
- if(err)
- return err;
+ if (err) return err;
if (upsample_ratio_idx == SBR_UPSAMPLE_IDX_4_1) {
ixheaacd_hbe_repl_spec(
@@ -1139,7 +1137,7 @@ WORD32 ixheaacd_esbr_dec(ia_sbr_dec_struct *ptr_sbr_dec,
}
WORD32 ixheaacd_sbr_dec_from_mps(FLOAT32 *p_mps_qmf_output, VOID *p_sbr_dec,
- VOID *p_sbr_frame, VOID *p_sbr_header) {
+ VOID *p_sbr_frame, VOID *p_sbr_header) {
WORD32 i, k;
ia_sbr_frame_info_data_struct *ptr_frame_data =
(ia_sbr_frame_info_data_struct *)p_sbr_frame;
@@ -1204,32 +1202,32 @@ WORD32 ixheaacd_sbr_dec_from_mps(FLOAT32 *p_mps_qmf_output, VOID *p_sbr_dec,
ptr_header_data->pstr_freq_band_data->qmf_sb_prev =
ptr_header_data->pstr_freq_band_data->sub_band_start;
- err = ixheaacd_generate_hf(ptr_sbr_dec->mps_qmf_buf_real + SBR_HF_ADJ_OFFSET,
- ptr_sbr_dec->mps_qmf_buf_imag + SBR_HF_ADJ_OFFSET, NULL,
- NULL,
- ptr_sbr_dec->mps_sbr_qmf_buf_real + SBR_HF_ADJ_OFFSET,
- ptr_sbr_dec->mps_sbr_qmf_buf_imag + SBR_HF_ADJ_OFFSET,
- ptr_frame_data, ptr_header_data);
- if(err)
- return err;
+ err = ixheaacd_generate_hf(
+ ptr_sbr_dec->mps_qmf_buf_real + SBR_HF_ADJ_OFFSET,
+ ptr_sbr_dec->mps_qmf_buf_imag + SBR_HF_ADJ_OFFSET, NULL, NULL,
+ ptr_sbr_dec->mps_sbr_qmf_buf_real + SBR_HF_ADJ_OFFSET,
+ ptr_sbr_dec->mps_sbr_qmf_buf_imag + SBR_HF_ADJ_OFFSET, ptr_frame_data,
+ ptr_header_data);
+ if (err) return err;
ptr_frame_data->pstr_sbr_header = ptr_header_data;
ptr_frame_data->sbr_mode = ORIG_SBR;
ptr_frame_data->prev_sbr_mode = ORIG_SBR;
- if(ptr_header_data->hbe_flag == 0)
- ixheaacd_sbr_env_calc(
- ptr_frame_data, ptr_sbr_dec->mps_sbr_qmf_buf_real + SBR_HF_ADJ_OFFSET,
- ptr_sbr_dec->mps_sbr_qmf_buf_imag + SBR_HF_ADJ_OFFSET,
- ptr_sbr_dec->mps_qmf_buf_real + SBR_HF_ADJ_OFFSET,
- ptr_sbr_dec->mps_qmf_buf_imag + SBR_HF_ADJ_OFFSET,
- NULL, ptr_sbr_dec->scratch_buff, NULL);
+ if (ptr_header_data->hbe_flag == 0)
+ ixheaacd_sbr_env_calc(ptr_frame_data,
+ ptr_sbr_dec->mps_sbr_qmf_buf_real + SBR_HF_ADJ_OFFSET,
+ ptr_sbr_dec->mps_sbr_qmf_buf_imag + SBR_HF_ADJ_OFFSET,
+ ptr_sbr_dec->mps_qmf_buf_real + SBR_HF_ADJ_OFFSET,
+ ptr_sbr_dec->mps_qmf_buf_imag + SBR_HF_ADJ_OFFSET,
+ NULL, ptr_sbr_dec->scratch_buff, NULL);
else
- ixheaacd_sbr_env_calc(
- ptr_frame_data, ptr_sbr_dec->mps_sbr_qmf_buf_real + SBR_HF_ADJ_OFFSET,
- ptr_sbr_dec->mps_sbr_qmf_buf_imag + SBR_HF_ADJ_OFFSET,
- ptr_sbr_dec->mps_qmf_buf_real + SBR_HF_ADJ_OFFSET,
- ptr_sbr_dec->mps_qmf_buf_imag + SBR_HF_ADJ_OFFSET,
- ptr_sbr_dec->p_hbe_txposer->x_over_qmf, ptr_sbr_dec->scratch_buff, NULL);
+ ixheaacd_sbr_env_calc(ptr_frame_data,
+ ptr_sbr_dec->mps_sbr_qmf_buf_real + SBR_HF_ADJ_OFFSET,
+ ptr_sbr_dec->mps_sbr_qmf_buf_imag + SBR_HF_ADJ_OFFSET,
+ ptr_sbr_dec->mps_qmf_buf_real + SBR_HF_ADJ_OFFSET,
+ ptr_sbr_dec->mps_qmf_buf_imag + SBR_HF_ADJ_OFFSET,
+ ptr_sbr_dec->p_hbe_txposer->x_over_qmf,
+ ptr_sbr_dec->scratch_buff, NULL);
for (i = 0; i < no_bins; i++) {
FLOAT32 *p_loc_mps_qmf_output =
diff --git a/decoder/ixheaacd_sbr_dec.h b/decoder/ixheaacd_sbr_dec.h
index 6585c51..ac92ef5 100644
--- a/decoder/ixheaacd_sbr_dec.h
+++ b/decoder/ixheaacd_sbr_dec.h
@@ -148,21 +148,20 @@ typedef struct ia_sbr_pers_struct {
} ia_sbr_pers_struct;
WORD32 ixheaacd_sbr_dec(ia_sbr_dec_struct *ptr_sbr_dec, WORD16 *ptr_time_data,
- ia_sbr_header_data_struct *ptr_header_data,
- ia_sbr_frame_info_data_struct *ptr_frame_data,
- ia_sbr_prev_frame_data_struct *ptr_frame_data_prev,
- ia_ps_dec_struct *ptr_ps_dec,
- ia_sbr_qmf_filter_bank_struct *ptr_qmf_synth_bank_r,
- ia_sbr_scale_fact_struct *ptr_sbr_sf_r,
- FLAG apply_processing, FLAG low_pow_flag,
- WORD32 *ptr_work_buf_core,
- ia_sbr_tables_struct *sbr_tables_ptr,
- ixheaacd_misc_tables *pstr_common_tables, WORD ch_fac,
- ia_pvc_data_struct *ptr_pvc_data_str, FLAG drc_on,
- WORD32 drc_sbr_factors[][64], WORD32 audio_object_type);
-
-WORD16 ixheaacd_create_sbrdec(
- ixheaacd_misc_tables *pstr_common_table,
+ ia_sbr_header_data_struct *ptr_header_data,
+ ia_sbr_frame_info_data_struct *ptr_frame_data,
+ ia_sbr_prev_frame_data_struct *ptr_frame_data_prev,
+ ia_ps_dec_struct *ptr_ps_dec,
+ ia_sbr_qmf_filter_bank_struct *ptr_qmf_synth_bank_r,
+ ia_sbr_scale_fact_struct *ptr_sbr_sf_r,
+ FLAG apply_processing, FLAG low_pow_flag,
+ WORD32 *ptr_work_buf_core,
+ ia_sbr_tables_struct *sbr_tables_ptr,
+ ixheaacd_misc_tables *pstr_common_tables, WORD ch_fac,
+ ia_pvc_data_struct *ptr_pvc_data_str, FLAG drc_on,
+ WORD32 drc_sbr_factors[][64], WORD32 audio_object_type);
+
+WORD16 ixheaacd_create_sbrdec(ixheaacd_misc_tables *pstr_common_table,
ia_sbr_channel_struct *ptr_sbr_channel,
ia_sbr_header_data_struct *ptr_header_data,
WORD16 chan, FLAG down_sample_flag,
@@ -172,14 +171,14 @@ WORD16 ixheaacd_create_sbrdec(
#define MAX_NUM_QMF_BANDS_ESBR 128
WORD32 ixheaacd_sbr_dec_from_mps(FLOAT32 *p_mps_qmf_output, VOID *p_sbr_dec,
- VOID *p_sbr_frame, VOID *p_sbr_header);
+ VOID *p_sbr_frame, VOID *p_sbr_header);
WORD32 ixheaacd_qmf_hbe_apply(ia_esbr_hbe_txposer_struct *h_hbe_txposer,
- FLOAT32 qmf_buf_real[][64],
- FLOAT32 qmf_buf_imag[][64], WORD32 num_columns,
- FLOAT32 pv_qmf_buf_real[][64],
- FLOAT32 pv_qmf_buf_imag[][64],
- WORD32 pitch_in_bins);
+ FLOAT32 qmf_buf_real[][64],
+ FLOAT32 qmf_buf_imag[][64], WORD32 num_columns,
+ FLOAT32 pv_qmf_buf_real[][64],
+ FLOAT32 pv_qmf_buf_imag[][64],
+ WORD32 pitch_in_bins);
VOID ixheaacd_sbr_env_calc(ia_sbr_frame_info_data_struct *frame_data,
FLOAT32 input_real[][64], FLOAT32 input_imag[][64],
@@ -188,13 +187,13 @@ VOID ixheaacd_sbr_env_calc(ia_sbr_frame_info_data_struct *frame_data,
FLOAT32 *scratch_buff, FLOAT32 *env_out);
WORD32 ixheaacd_generate_hf(FLOAT32 ptr_src_buf_real[][64],
- FLOAT32 ptr_src_buf_imag[][64],
- FLOAT32 ptr_ph_vocod_buf_real[][64],
- FLOAT32 ptr_ph_vocod_buf_imag[][64],
- FLOAT32 ptr_dst_buf_real[][64],
- FLOAT32 ptr_dst_buf_imag[][64],
- ia_sbr_frame_info_data_struct *ptr_frame_data,
- ia_sbr_header_data_struct *ptr_header_data);
+ FLOAT32 ptr_src_buf_imag[][64],
+ FLOAT32 ptr_ph_vocod_buf_real[][64],
+ FLOAT32 ptr_ph_vocod_buf_imag[][64],
+ FLOAT32 ptr_dst_buf_real[][64],
+ FLOAT32 ptr_dst_buf_imag[][64],
+ ia_sbr_frame_info_data_struct *ptr_frame_data,
+ ia_sbr_header_data_struct *ptr_header_data);
VOID ixheaacd_clr_subsamples(WORD32 *ptr_qmf_buf, WORD32 num, WORD32 size);
@@ -217,17 +216,17 @@ WORD32 ixheaacd_sbr_read_pvc_sce(ia_sbr_frame_info_data_struct *ptr_frame_data,
ia_sbr_header_data_struct *ptr_header_data);
WORD32 ixheaacd_qmf_hbe_apply(ia_esbr_hbe_txposer_struct *h_hbe_txposer,
- FLOAT32 qmf_buf_real[][64],
- FLOAT32 qmf_buf_imag[][64], WORD32 num_columns,
- FLOAT32 pv_qmf_buf_real[][64],
- FLOAT32 pv_qmf_buf_imag[][64],
- WORD32 pitch_in_bins);
+ FLOAT32 qmf_buf_real[][64],
+ FLOAT32 qmf_buf_imag[][64], WORD32 num_columns,
+ FLOAT32 pv_qmf_buf_real[][64],
+ FLOAT32 pv_qmf_buf_imag[][64],
+ WORD32 pitch_in_bins);
WORD32 ixheaacd_esbr_dec(ia_sbr_dec_struct *ptr_sbr_dec,
- ia_sbr_header_data_struct *ptr_header_data,
- ia_sbr_frame_info_data_struct *ptr_frame_data,
- FLAG apply_processing, FLAG low_pow_flag,
- ia_sbr_tables_struct *sbr_tables_ptr, WORD32 ch_fac);
+ ia_sbr_header_data_struct *ptr_header_data,
+ ia_sbr_frame_info_data_struct *ptr_frame_data,
+ FLAG apply_processing, FLAG low_pow_flag,
+ ia_sbr_tables_struct *sbr_tables_ptr, WORD32 ch_fac);
VOID ixheaacd_hbe_repl_spec(WORD32 x_over_qmf[MAX_NUM_PATCHES],
FLOAT32 qmf_buf_real[][64],
diff --git a/decoder/ixheaacd_sbrdec_initfuncs.c b/decoder/ixheaacd_sbrdec_initfuncs.c
index b61d8c8..7ec8ac8 100644
--- a/decoder/ixheaacd_sbrdec_initfuncs.c
+++ b/decoder/ixheaacd_sbrdec_initfuncs.c
@@ -601,7 +601,6 @@ ia_handle_sbr_dec_inst_struct ixheaacd_init_sbr(
ixheaacd_esbr_hbe_data_init(ptr_sbr_dec[1]->p_hbe_txposer, samp_per_frame,
sbr_ratio_idx == SBR_UPSAMPLE_IDX_4_1 ? 1 : 0,
output_frame_size, hbe_txposer_buffers);
-
}
p_str_sbr_dec_inst->ptr_pvc_data_str->prev_first_bnd_idx = -1;
@@ -769,8 +768,7 @@ static PLATFORM_INLINE WORD16 ixheaacd_create_sbr_env_calc(
ixheaacd_reset_sbrenvelope_calc(hs);
if ((chan == 0) && (audio_object_type == AOT_ER_AAC_ELD)) {
- err = ixheaacd_calc_frq_bnd_tbls(ptr_header_data,
- pstr_common_table);
+ err = ixheaacd_calc_frq_bnd_tbls(ptr_header_data, pstr_common_table);
}
return err;
@@ -1107,9 +1105,9 @@ WORD16 ixheaacd_create_sbrdec(ixheaacd_misc_tables *pstr_common_table,
ptr_sbr_channel->pstr_prev_frame_data =
sbr_persistent_mem->pstr_prev_frame_data[chan];
- err = ixheaacd_create_sbr_env_calc(
- pstr_common_table, &hs->str_sbr_calc_env, chan,
- sbr_persistent_mem, ptr_header_data, audio_object_type);
+ err = ixheaacd_create_sbr_env_calc(pstr_common_table, &hs->str_sbr_calc_env,
+ chan, sbr_persistent_mem, ptr_header_data,
+ audio_object_type);
if (err) {
return (-1);
diff --git a/decoder/ixheaacd_sbrdec_lpfuncs.c b/decoder/ixheaacd_sbrdec_lpfuncs.c
index 1af42f1..0504f66 100644
--- a/decoder/ixheaacd_sbrdec_lpfuncs.c
+++ b/decoder/ixheaacd_sbrdec_lpfuncs.c
@@ -936,13 +936,13 @@ VOID ixheaacd_pre_processing(FLOAT32 ptr_src_buf_real[][64],
}
WORD32 ixheaacd_generate_hf(FLOAT32 ptr_src_buf_real[][64],
- FLOAT32 ptr_src_buf_imag[][64],
- FLOAT32 ptr_ph_vocod_buf_real[][64],
- FLOAT32 ptr_ph_vocod_buf_imag[][64],
- FLOAT32 ptr_dst_buf_real[][64],
- FLOAT32 ptr_dst_buf_imag[][64],
- ia_sbr_frame_info_data_struct *ptr_frame_data,
- ia_sbr_header_data_struct *ptr_header_data) {
+ FLOAT32 ptr_src_buf_imag[][64],
+ FLOAT32 ptr_ph_vocod_buf_real[][64],
+ FLOAT32 ptr_ph_vocod_buf_imag[][64],
+ FLOAT32 ptr_dst_buf_real[][64],
+ FLOAT32 ptr_dst_buf_imag[][64],
+ ia_sbr_frame_info_data_struct *ptr_frame_data,
+ ia_sbr_header_data_struct *ptr_header_data) {
WORD32 bw_index, i, k, k2, patch = 0;
WORD32 co_var_len;
WORD32 start_sample, end_sample, goal_sb;
@@ -1073,8 +1073,7 @@ WORD32 ixheaacd_generate_hf(FLOAT32 ptr_src_buf_real[][64],
patch = 0;
while (sb < usb) {
- if(MAX_NUM_PATCHES <= patch)
- return -1;
+ if (MAX_NUM_PATCHES <= patch) return -1;
ptr_frame_data->patch_param.start_subband[patch] = sb;
num_bands_in_patch = goal_sb - sb;
@@ -1111,7 +1110,7 @@ WORD32 ixheaacd_generate_hf(FLOAT32 ptr_src_buf_real[][64],
}
if (num_bands_in_patch <= 0) {
- return -1;
+ return -1;
}
for (k2 = sb; k2 < sb + num_bands_in_patch; k2++) {
@@ -1244,8 +1243,7 @@ WORD32 ixheaacd_generate_hf(FLOAT32 ptr_src_buf_real[][64],
}
}
ptr_frame_data->patch_param.num_patches = patch;
- if(patch >= (MAX_NUM_PATCHES + 1))
- return -1;
+ if (patch >= (MAX_NUM_PATCHES + 1)) return -1;
for (i = 0; i < num_if_bands; i++) {
bw_array_prev[i] = bw_array[i];
}
diff --git a/decoder/ixheaacd_sbrdecoder.c b/decoder/ixheaacd_sbrdecoder.c
index 1e53ba7..c40b37f 100644
--- a/decoder/ixheaacd_sbrdecoder.c
+++ b/decoder/ixheaacd_sbrdecoder.c
@@ -161,8 +161,7 @@ static WORD32 ixheaacd_sbr_dec_reset(ia_sbr_dec_struct *ptr_sbr_dec,
ptr_header_data->pstr_freq_band_data->freq_band_table,
ptr_header_data->pstr_freq_band_data->num_sf_bands,
ptr_header_data->is_usf_4);
- if(err)
- return err;
+ if (err) return err;
for (k = 0; k < 2; k++) {
if (!((upsample_ratio_idx == SBR_UPSAMPLE_IDX_4_1) && (k == 0))) {
@@ -186,8 +185,7 @@ static WORD32 ixheaacd_sbr_dec_reset(ia_sbr_dec_struct *ptr_sbr_dec,
ptr_sbr_dec->qmf_buf_imag + op_delay + xpos_delay, num_time_slots,
ptr_sbr_dec->ph_vocod_qmf_real + op_delay,
ptr_sbr_dec->ph_vocod_qmf_imag + op_delay, pitch_in_bins);
- if(err)
- return err;
+ if (err) return err;
if (upsample_ratio_idx == SBR_UPSAMPLE_IDX_4_1) {
ixheaacd_hbe_repl_spec(&ptr_sbr_dec->p_hbe_txposer->x_over_qmf[0],
@@ -371,7 +369,8 @@ WORD16 ixheaacd_applysbr(ia_handle_sbr_dec_inst_struct self,
stereo = 1;
ptr_header_data[1] = ptr_header_data[0];
- memcpy(self->pstr_sbr_header[1], self->pstr_sbr_header[0], sizeof(ia_sbr_header_data_struct));
+ memcpy(self->pstr_sbr_header[1], self->pstr_sbr_header[0],
+ sizeof(ia_sbr_header_data_struct));
break;
default:
frame_status = 0;
@@ -440,9 +439,7 @@ WORD16 ixheaacd_applysbr(ia_handle_sbr_dec_inst_struct self,
&(pstr_sbr_channel[lr]->str_sbr_dec), ptr_header_data[k],
low_pow_flag, self->pstr_common_tables,
ptr_frame_data[k]->pitch_in_bins, audio_object_type);
- if(err < 0)
- return err;
-
+ if (err < 0) return err;
}
}
@@ -473,9 +470,8 @@ WORD16 ixheaacd_applysbr(ia_handle_sbr_dec_inst_struct self,
err = ixheaacd_calc_frq_bnd_tbls(ptr_header_data[k],
self->pstr_common_tables);
- if(err)
- {
- return err;
+ if (err) {
+ return err;
}
}
}
@@ -490,8 +486,7 @@ WORD16 ixheaacd_applysbr(ia_handle_sbr_dec_inst_struct self,
&(pstr_sbr_channel[lr]->str_sbr_dec), ptr_header_data[k],
low_pow_flag, self->pstr_common_tables,
ptr_frame_data[k]->pitch_in_bins, audio_object_type);
- if(err < 0)
- return err;
+ if (err < 0) return err;
}
}
ptr_header_data[k]->status = 0;
@@ -531,8 +526,7 @@ WORD16 ixheaacd_applysbr(ia_handle_sbr_dec_inst_struct self,
frame_status = ixheaacd_sbr_read_pvc_sce(
ptr_frame_data[k], it_bit_buff, 0, self->ptr_pvc_data_str,
self->pstr_sbr_tables, ptr_header_data[k]);
- if(frame_status < 0)
- return frame_status;
+ if (frame_status < 0) return frame_status;
}
}
if (audio_object_type != AOT_ER_AAC_ELD) {
@@ -671,8 +665,7 @@ WORD16 ixheaacd_applysbr(ia_handle_sbr_dec_inst_struct self,
sbr_scratch_struct->ptr_work_buf_core, self->pstr_sbr_tables,
self->pstr_common_tables, ch_fac, self->ptr_pvc_data_str, 0, NULL,
audio_object_type);
- if(err_code)
- return err_code;
+ if (err_code) return err_code;
} else {
WORD32 err_code = 0;
err_code = ixheaacd_sbr_dec(
@@ -687,20 +680,18 @@ WORD16 ixheaacd_applysbr(ia_handle_sbr_dec_inst_struct self,
pstr_drc_dec->drc_on,
pstr_drc_dec->str_drc_channel_data[0].drc_factors_sbr,
audio_object_type);
- if(err_code)
- return err_code;
+ if (err_code) return err_code;
}
if (!down_mix_flag && (stereo || dual_mono) && (num_channels == 2)) {
pstr_sbr_channel[1]->str_sbr_dec.time_sample_buf = self->time_sample_buf[1];
if (ele_channels == 1 && usac_flag) {
- WORD32 err_code = ixheaacd_esbr_dec(&pstr_sbr_channel[1]->str_sbr_dec, ptr_header_data[1],
- ptr_frame_data[1],
- (ptr_header_data[1]->sync_state == SBR_ACTIVE),
- low_pow_flag, self->pstr_sbr_tables, ch_fac);
- if(err_code)
- return err_code;
+ WORD32 err_code = ixheaacd_esbr_dec(
+ &pstr_sbr_channel[1]->str_sbr_dec, ptr_header_data[1],
+ ptr_frame_data[1], (ptr_header_data[1]->sync_state == SBR_ACTIVE),
+ low_pow_flag, self->pstr_sbr_tables, ch_fac);
+ if (err_code) return err_code;
} else {
if (pstr_drc_dec == NULL) {
WORD32 err_code = ixheaacd_sbr_dec(
@@ -711,21 +702,19 @@ WORD16 ixheaacd_applysbr(ia_handle_sbr_dec_inst_struct self,
low_pow_flag, sbr_scratch_struct->ptr_work_buf_core,
self->pstr_sbr_tables, self->pstr_common_tables, ch_fac,
self->ptr_pvc_data_str, 0, NULL, audio_object_type);
- if(err_code)
- return err_code;
+ if (err_code) return err_code;
} else {
- WORD32 err_code = ixheaacd_sbr_dec(&pstr_sbr_channel[1]->str_sbr_dec,
- core_sample_buf + slot_element + 1, ptr_header_data[1],
- ptr_frame_data[1],
- pstr_sbr_channel[1]->pstr_prev_frame_data, NULL, NULL,
- NULL, (ptr_header_data[1]->sync_state == SBR_ACTIVE),
- low_pow_flag, sbr_scratch_struct->ptr_work_buf_core,
- self->pstr_sbr_tables, self->pstr_common_tables,
- ch_fac, self->ptr_pvc_data_str, pstr_drc_dec->drc_on,
- pstr_drc_dec->str_drc_channel_data[1].drc_factors_sbr,
- audio_object_type);
- if(err_code)
- return err_code;
+ WORD32 err_code = ixheaacd_sbr_dec(
+ &pstr_sbr_channel[1]->str_sbr_dec,
+ core_sample_buf + slot_element + 1, ptr_header_data[1],
+ ptr_frame_data[1], pstr_sbr_channel[1]->pstr_prev_frame_data, NULL,
+ NULL, NULL, (ptr_header_data[1]->sync_state == SBR_ACTIVE),
+ low_pow_flag, sbr_scratch_struct->ptr_work_buf_core,
+ self->pstr_sbr_tables, self->pstr_common_tables, ch_fac,
+ self->ptr_pvc_data_str, pstr_drc_dec->drc_on,
+ pstr_drc_dec->str_drc_channel_data[1].drc_factors_sbr,
+ audio_object_type);
+ if (err_code) return err_code;
}
}
diff --git a/decoder/ixheaacd_sbrqmftrans.h b/decoder/ixheaacd_sbrqmftrans.h
index 55455cb..7c3e61a 100644
--- a/decoder/ixheaacd_sbrqmftrans.h
+++ b/decoder/ixheaacd_sbrqmftrans.h
@@ -21,11 +21,11 @@
#define IXHEAACD_SBRQMFTRANS_H
WORD32 ixheaacd_qmf_hbe_apply(ia_esbr_hbe_txposer_struct *h_hbe_txposer,
- FLOAT32 qmf_buf_real[][64],
- FLOAT32 qmf_buf_imag[][64], WORD32 num_columns,
- FLOAT32 pv_qmf_buf_real[][64],
- FLOAT32 pv_qmf_buf_imag[][64],
- WORD32 pitch_in_bins);
+ FLOAT32 qmf_buf_real[][64],
+ FLOAT32 qmf_buf_imag[][64], WORD32 num_columns,
+ FLOAT32 pv_qmf_buf_real[][64],
+ FLOAT32 pv_qmf_buf_imag[][64],
+ WORD32 pitch_in_bins);
WORD32 ixheaacd_qmf_hbe_data_reinit(
ia_esbr_hbe_txposer_struct *ptr_hbe_transposer_str,
diff --git a/decoder/ixheaacd_spectrum_dec.c b/decoder/ixheaacd_spectrum_dec.c
index 544df08..dff3713 100644
--- a/decoder/ixheaacd_spectrum_dec.c
+++ b/decoder/ixheaacd_spectrum_dec.c
@@ -393,8 +393,8 @@ WORD32 ixheaacd_fd_channel_stream(
ixheaacd_scale_factor_data(info, tot_sfb, *max_sfb, info->sfb_per_sbk,
ptr_code_book);
- if((it_bit_buff->ptr_read_next > it_bit_buff->ptr_bit_buf_end - 3) && (it_bit_buff->size == it_bit_buff->max_size))
- {
+ if ((it_bit_buff->ptr_read_next > it_bit_buff->ptr_bit_buf_end - 3) &&
+ (it_bit_buff->size == it_bit_buff->max_size)) {
return -1;
}
@@ -433,8 +433,7 @@ WORD32 ixheaacd_fd_channel_stream(
usac_data, max_spec_coefficients, noise_level, noise_offset, arth_size,
it_bit_buff, *max_sfb, arith_reset_flag, noise_filling, chn);
- if(err_code != 0)
- return err_code;
+ if (err_code != 0) return err_code;
usac_data->fac_data_present[chn] = ixheaacd_read_bits_buf(it_bit_buff, 1);
diff --git a/decoder/ixheaacd_tns.h b/decoder/ixheaacd_tns.h
index 9d3cad5..d252ddd 100644
--- a/decoder/ixheaacd_tns.h
+++ b/decoder/ixheaacd_tns.h
@@ -75,8 +75,10 @@ VOID ixheaacd_tns_ar_filter_fixed_armv7(WORD32 *spectrum, WORD32 size,
WORD32 shift_value, WORD scale_spec);
VOID ixheaacd_tns_ar_filter_fixed_non_neon_armv7(WORD32 *spectrum, WORD32 size,
- WORD32 inc, WORD32 *lpc, WORD32 order,
- WORD32 shift_value, WORD scale_spec);
+ WORD32 inc, WORD32 *lpc,
+ WORD32 order,
+ WORD32 shift_value,
+ WORD scale_spec);
VOID ixheaacd_tns_ar_filter_fixed_armv8(WORD32 *spectrum, WORD32 size,
WORD32 inc, WORD32 *lpc, WORD32 order,
diff --git a/decoder/ixheaacd_type_def.h b/decoder/ixheaacd_type_def.h
index 9ecded3..b762b2f 100644
--- a/decoder/ixheaacd_type_def.h
+++ b/decoder/ixheaacd_type_def.h
@@ -33,49 +33,33 @@ typedef char* pCHAR8; /* pc pCHAR8 pc_nmae 1 */
typedef signed char WORD8; /* b WORD8 b_name 1 */
typedef signed char* pWORD8; /* pb pWORD8 pb_nmae 1 */
-typedef unsigned char
- UWORD8; /* ub UWORD8 ub_count 1 */
-typedef unsigned char*
- pUWORD8; /* pub pUWORD8 pub_count 1 */
-
-typedef signed short WORD16; /* s WORD16 s_count 2 */
-typedef signed short* pWORD16; /* ps pWORD16 ps_count 2 */
-typedef unsigned short
- UWORD16; /* us UWORD16 us_count 2 */
-typedef unsigned short*
- pUWORD16; /* pus pUWORD16 pus_count 2 */
-
-typedef signed int WORD24; /* k WORD24 k_count 3 */
-typedef signed int* pWORD24; /* pk pWORD24 pk_count 3 */
-typedef unsigned int
- UWORD24; /* uk UWORD24 uk_count 3 */
-typedef unsigned int*
- pUWORD24; /* puk pUWORD24 puk_count 3 */
-
-typedef signed int WORD32; /* i WORD32 i_count 4 */
-typedef signed int* pWORD32; /* pi pWORD32 pi_count 4 */
-typedef unsigned int
- UWORD32; /* ui UWORD32 ui_count 4 */
-typedef unsigned int*
- pUWORD32; /* pui pUWORD32 pui_count 4 */
-
-typedef signed long long
- WORD40; /* m WORD40 m_count 5 */
-typedef signed long long*
- pWORD40; /* pm pWORD40 pm_count 5 */
-typedef unsigned long long
- UWORD40; /* um UWORD40 um_count 5 */
-typedef unsigned long long*
- pUWORD40; /* pum pUWORD40 pum_count 5 */
-
-typedef signed long long
- WORD64; /* h WORD64 h_count 8 */
-typedef signed long long*
- pWORD64; /* ph pWORD64 ph_count 8 */
-typedef unsigned long long
- UWORD64; /* uh UWORD64 uh_count 8 */
-typedef unsigned long long*
- pUWORD64; /* puh pUWORD64 puh_count 8 */
+typedef unsigned char UWORD8; /* ub UWORD8 ub_count 1 */
+typedef unsigned char* pUWORD8; /* pub pUWORD8 pub_count 1 */
+
+typedef signed short WORD16; /* s WORD16 s_count 2 */
+typedef signed short* pWORD16; /* ps pWORD16 ps_count 2 */
+typedef unsigned short UWORD16; /* us UWORD16 us_count 2 */
+typedef unsigned short* pUWORD16; /* pus pUWORD16 pus_count 2 */
+
+typedef signed int WORD24; /* k WORD24 k_count 3 */
+typedef signed int* pWORD24; /* pk pWORD24 pk_count 3 */
+typedef unsigned int UWORD24; /* uk UWORD24 uk_count 3 */
+typedef unsigned int* pUWORD24; /* puk pUWORD24 puk_count 3 */
+
+typedef signed int WORD32; /* i WORD32 i_count 4 */
+typedef signed int* pWORD32; /* pi pWORD32 pi_count 4 */
+typedef unsigned int UWORD32; /* ui UWORD32 ui_count 4 */
+typedef unsigned int* pUWORD32; /* pui pUWORD32 pui_count 4 */
+
+typedef signed long long WORD40; /* m WORD40 m_count 5 */
+typedef signed long long* pWORD40; /* pm pWORD40 pm_count 5 */
+typedef unsigned long long UWORD40; /* um UWORD40 um_count 5 */
+typedef unsigned long long* pUWORD40; /* pum pUWORD40 pum_count 5 */
+
+typedef signed long long WORD64; /* h WORD64 h_count 8 */
+typedef signed long long* pWORD64; /* ph pWORD64 ph_count 8 */
+typedef unsigned long long UWORD64; /* uh UWORD64 uh_count 8 */
+typedef unsigned long long* pUWORD64; /* puh pUWORD64 puh_count 8 */
typedef float FLOAT32; /* f FLOAT32 f_count 4
*/
@@ -88,16 +72,14 @@ typedef void VOID; /* v VOID v_flag 4 */
typedef void* pVOID; /* pv pVOID pv_flag 4 */
/* variable size types: platform optimized implementation */
-typedef signed int BOOL; /* bool BOOL bool_true */
-typedef unsigned int UBOOL; /* ubool BOOL ubool_true */
-typedef signed int FLAG; /* flag FLAG flag_false */
-typedef unsigned int UFLAG; /* uflag FLAG uflag_false */
-typedef signed int LOOPIDX; /* lp LOOPIDX lp_index */
-typedef unsigned int
- ULOOPIDX; /* ulp SLOOPIDX ulp_index */
-typedef signed int WORD; /* lp LOOPIDX lp_index */
-typedef unsigned int
- UWORD; /* ulp SLOOPIDX ulp_index */
+typedef signed int BOOL; /* bool BOOL bool_true */
+typedef unsigned int UBOOL; /* ubool BOOL ubool_true */
+typedef signed int FLAG; /* flag FLAG flag_false */
+typedef unsigned int UFLAG; /* uflag FLAG uflag_false */
+typedef signed int LOOPIDX; /* lp LOOPIDX lp_index */
+typedef unsigned int ULOOPIDX; /* ulp SLOOPIDX ulp_index */
+typedef signed int WORD; /* lp LOOPIDX lp_index */
+typedef unsigned int UWORD; /* ulp SLOOPIDX ulp_index */
typedef LOOPIDX LOOPINDEX; /* lp LOOPIDX lp_index */
typedef ULOOPIDX ULOOPINDEX; /* ulp SLOOPIDX ulp_index */
diff --git a/decoder/x86/ixheaacd_function_selector_x86.c b/decoder/x86/ixheaacd_function_selector_x86.c
index 1501ae2..e70ab9a 100644
--- a/decoder/x86/ixheaacd_function_selector_x86.c
+++ b/decoder/x86/ixheaacd_function_selector_x86.c
@@ -229,20 +229,20 @@ VOID(*ixheaacd_aac_ld_dec_rearrange)
(WORD32 *ip, WORD32 *op, WORD32 mdct_len_2,
UWORD8 *re_arr_tab) = &ixheaacd_rearrange_dec;
-VOID (*ixheaacd_fft32x32_ld)
+VOID(*ixheaacd_fft32x32_ld)
(ia_aac_dec_imdct_tables_struct *imdct_tables_ptr, WORD32 npoints,
WORD32 *ptr_x, WORD32 *ptr_y) = ixheaacd_fft32x32_ld_dec;
-VOID (*ixheaacd_fft32x32_ld2)
+VOID(*ixheaacd_fft32x32_ld2)
(ia_aac_dec_imdct_tables_struct *imdct_tables_ptr, WORD32 npoints,
WORD32 *ptr_x, WORD32 *ptr_y) = &ixheaacd_fft32x32_ld_dec;
WORD16 (*ixheaacd_neg_expo_inc)(WORD16 neg_expo) = &ixheaacd_neg_expo_inc_dec;
-VOID (*ixheaacd_inv_dit_fft_8pt)
+VOID(*ixheaacd_inv_dit_fft_8pt)
(WORD32 *x, WORD32 *real, WORD32 *imag) = &ixheaacd_inv_dit_fft_8pt_dec;
-VOID (*ixheaacd_scale_factor_process)
+VOID(*ixheaacd_scale_factor_process)
(WORD32 *x_invquant, WORD16 *scale_fact, WORD no_band, WORD8 *width,
WORD32 *scale_tables_ptr, WORD32 total_channels, WORD32 object_type,
WORD32 aac_sf_data_resil_flag) = &ixheaacd_scale_factor_process_dec; \ No newline at end of file
diff --git a/decoder/x86_64/ixheaacd_function_selector_x86_64.c b/decoder/x86_64/ixheaacd_function_selector_x86_64.c
index 1501ae2..e70ab9a 100644
--- a/decoder/x86_64/ixheaacd_function_selector_x86_64.c
+++ b/decoder/x86_64/ixheaacd_function_selector_x86_64.c
@@ -229,20 +229,20 @@ VOID(*ixheaacd_aac_ld_dec_rearrange)
(WORD32 *ip, WORD32 *op, WORD32 mdct_len_2,
UWORD8 *re_arr_tab) = &ixheaacd_rearrange_dec;
-VOID (*ixheaacd_fft32x32_ld)
+VOID(*ixheaacd_fft32x32_ld)
(ia_aac_dec_imdct_tables_struct *imdct_tables_ptr, WORD32 npoints,
WORD32 *ptr_x, WORD32 *ptr_y) = ixheaacd_fft32x32_ld_dec;
-VOID (*ixheaacd_fft32x32_ld2)
+VOID(*ixheaacd_fft32x32_ld2)
(ia_aac_dec_imdct_tables_struct *imdct_tables_ptr, WORD32 npoints,
WORD32 *ptr_x, WORD32 *ptr_y) = &ixheaacd_fft32x32_ld_dec;
WORD16 (*ixheaacd_neg_expo_inc)(WORD16 neg_expo) = &ixheaacd_neg_expo_inc_dec;
-VOID (*ixheaacd_inv_dit_fft_8pt)
+VOID(*ixheaacd_inv_dit_fft_8pt)
(WORD32 *x, WORD32 *real, WORD32 *imag) = &ixheaacd_inv_dit_fft_8pt_dec;
-VOID (*ixheaacd_scale_factor_process)
+VOID(*ixheaacd_scale_factor_process)
(WORD32 *x_invquant, WORD16 *scale_fact, WORD no_band, WORD8 *width,
WORD32 *scale_tables_ptr, WORD32 total_channels, WORD32 object_type,
WORD32 aac_sf_data_resil_flag) = &ixheaacd_scale_factor_process_dec; \ No newline at end of file