aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarish Mahendrakar <harish.mahendrakar@ittiam.com>2022-08-08 17:23:45 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-08-08 17:23:45 +0000
commit92ad84ae515583926ec94cb7bd4e4e716a3e73ac (patch)
tree3f691ec11b78372bd7c6983733b1afa587c49311
parent9fcd70ea8901cef7e847e34f53638001820745d1 (diff)
parent8e00512043a5d9726eefca46978d7a9a10b7a481 (diff)
downloadlibxaac-92ad84ae515583926ec94cb7bd4e4e716a3e73ac.tar.gz
Update to v0.1.2 from upstream project am: 06b7d72a41 am: c13fd2dbf2 am: 8e00512043
Original change: https://android-review.googlesource.com/c/platform/external/libxaac/+/2170068 Change-Id: Ie86a7d40ae0967210d5d91b660544fddd46b070d Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--Android.bp1
-rw-r--r--CMakeLists.txt1
-rw-r--r--METADATA12
-rw-r--r--README.md192
-rw-r--r--decoder/armv7/ixheaacd_function_selector_arm_non_neon.c8
-rw-r--r--decoder/armv7/ixheaacd_function_selector_armv7.c32
-rw-r--r--decoder/armv7/ixheaacd_lap1.s20
-rw-r--r--decoder/armv7/ixheaacd_no_lap1.s103
-rw-r--r--decoder/armv7/ixheaacd_overlap_add1.s115
-rw-r--r--decoder/armv7/ixheaacd_post_twiddle_overlap.s309
-rw-r--r--decoder/armv8/ixheaacd_function_selector_armv8.c33
-rw-r--r--decoder/armv8/ixheaacd_no_lap1.s59
-rw-r--r--decoder/armv8/ixheaacd_overlap_add1.s106
-rw-r--r--decoder/armv8/ixheaacd_post_twiddle_overlap.s2523
-rw-r--r--decoder/drc_src/impd_drc_api.c25
-rw-r--r--decoder/drc_src/impd_drc_api_struct_def.h3
-rw-r--r--decoder/drc_src/impd_drc_config_params.h3
-rw-r--r--decoder/drc_src/impd_drc_init.c17
-rw-r--r--decoder/drc_src/impd_drc_interface_decoder.c10
-rw-r--r--decoder/drc_src/impd_drc_static_payload.c9
-rw-r--r--decoder/drc_src/impd_drc_struct.h2
-rw-r--r--decoder/generic/ixheaacd_function_selector_generic.c20
-rw-r--r--decoder/ixheaacd_aac_imdct.c44
-rw-r--r--decoder/ixheaacd_aac_imdct.h6
-rw-r--r--decoder/ixheaacd_aacdecoder.c22
-rw-r--r--decoder/ixheaacd_api.c256
-rw-r--r--decoder/ixheaacd_apicmd_standards.h1
-rw-r--r--decoder/ixheaacd_block.c23
-rw-r--r--decoder/ixheaacd_block.h32
-rw-r--r--decoder/ixheaacd_channelinfo.h1
-rw-r--r--decoder/ixheaacd_decode_main.c73
-rw-r--r--decoder/ixheaacd_env_extr.h2
-rw-r--r--decoder/ixheaacd_fft.c1225
-rw-r--r--decoder/ixheaacd_function_selector.h32
-rw-r--r--decoder/ixheaacd_headerdecode.c15
-rw-r--r--decoder/ixheaacd_interface.h28
-rw-r--r--decoder/ixheaacd_lpfuncs.c151
-rw-r--r--decoder/ixheaacd_lt_predict.c15
-rw-r--r--decoder/ixheaacd_lt_predict.h8
-rw-r--r--decoder/ixheaacd_mps_dec.c122
-rw-r--r--decoder/ixheaacd_mps_dec.h113
-rw-r--r--decoder/ixheaacd_mps_decor.h2
-rw-r--r--decoder/ixheaacd_mps_decorr.c28
-rw-r--r--decoder/ixheaacd_mps_hybfilter.h10
-rw-r--r--decoder/ixheaacd_mps_hybrid_filt.c374
-rw-r--r--decoder/ixheaacd_mps_parse.c15
-rw-r--r--decoder/ixheaacd_mps_poly_filt.c256
-rw-r--r--decoder/ixheaacd_mps_polyphase.h3
-rw-r--r--decoder/ixheaacd_mps_pre_mix.c1049
-rw-r--r--decoder/ixheaacd_mps_process.h1
-rw-r--r--decoder/ixheaacd_mps_rom.c7710
-rw-r--r--decoder/ixheaacd_mps_smoothing.c119
-rw-r--r--decoder/ixheaacd_mps_temp_process.c57
-rw-r--r--decoder/ixheaacd_mps_temp_reshape.c30
-rw-r--r--decoder/ixheaacd_multichannel.c34
-rw-r--r--decoder/ixheaacd_multichannel.h6
-rw-r--r--decoder/ixheaacd_peak_limiter.c206
-rw-r--r--decoder/ixheaacd_peak_limiter_struct_def.h52
-rw-r--r--decoder/ixheaacd_process.c13
-rw-r--r--decoder/ixheaacd_rom.c8
-rw-r--r--decoder/ixheaacd_sbr_dec.c16
-rw-r--r--decoder/ixheaacd_sbr_dec.h1
-rw-r--r--decoder/ixheaacd_sbrdec_initfuncs.c1
-rw-r--r--decoder/ixheaacd_sbrdec_lpfuncs.c13
-rw-r--r--decoder/ixheaacd_struct_def.h26
-rw-r--r--decoder/x86/ixheaacd_function_selector_x86.c33
-rw-r--r--decoder/x86_64/ixheaacd_function_selector_x86_64.c33
-rw-r--r--docs/Api_flowchart.pngbin0 -> 1677112 bytes
68 files changed, 9271 insertions, 6597 deletions
diff --git a/Android.bp b/Android.bp
index f10e600..10def9e 100644
--- a/Android.bp
+++ b/Android.bp
@@ -95,6 +95,7 @@ cc_library_static {
"decoder/ixheaacd_mps_temp_process.c",
"decoder/ixheaacd_mps_temp_reshape.c",
"decoder/ixheaacd_pns_js_thumb.c",
+ "decoder/ixheaacd_peak_limiter.c",
"decoder/ixheaacd_pred_vec_block.c",
"decoder/ixheaacd_process.c",
"decoder/ixheaacd_ps_bitdec.c",
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 471681e..813b9d3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -85,6 +85,7 @@ list(
"${XAAC_ROOT}/decoder/ixheaacd_mps_temp_process.c"
"${XAAC_ROOT}/decoder/ixheaacd_mps_temp_reshape.c"
"${XAAC_ROOT}/decoder/ixheaacd_pns_js_thumb.c"
+ "${XAAC_ROOT}/decoder/ixheaacd_peak_limiter.c"
"${XAAC_ROOT}/decoder/ixheaacd_pred_vec_block.c"
"${XAAC_ROOT}/decoder/ixheaacd_process.c"
"${XAAC_ROOT}/decoder/ixheaacd_ps_bitdec.c"
diff --git a/METADATA b/METADATA
index d97975c..d6eab38 100644
--- a/METADATA
+++ b/METADATA
@@ -1,3 +1,15 @@
+name: "libxaac"
+description: "Android fork of the xaac library."
third_party {
+ url {
+ type: GIT
+ value: "https://github.com/ittiam-systems/libxaac.git"
+ }
+ version: "601a6a03ce6d42c50c08f8bb07c4be2cbbf3b112"
license_type: NOTICE
+ last_upgrade_date {
+ year: 2022
+ month: 8
+ day: 01
+ }
}
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..b890e83
--- /dev/null
+++ b/README.md
@@ -0,0 +1,192 @@
+# Introduction of the Ex-HEAAC Decoder
+
+
+Ex-HEAAC (Extended HE AAC), the latest upgrade to the MPEG AAC codec family,
+is the audio codec of choice for digital radio and low bit rate
+streaming applications. Selected as the mandatory audio codec for DRM
+(Digital Radio Mondiale), Ex-HEAAC bridges the gap between speech and
+audio coding, and provides consistent high quality audio for all signal
+types, such as speech, music or mixed content.
+
+Another important feature is the codec’s coding efficiency. The audio
+codec produces excellent sound for both music and speech, delivering
+high quality performance at bit rates starting as low as 6 kbit/s for
+mono and 12 kbit/s for stereo services. Thus Ex-HEAAC streaming apps and
+streaming radio players may switch to very low bit rate streams and
+offer a continuous playback even while the network is congested. Once
+more bandwidth becomes available on the network again, the Ex-HEAAC
+client can request a higher bitrate version and seamless switch over
+the full range of bitrates. Audio bitrate that’s being saved due to the
+improved coding efficiency can be used to improve video quality. Ex-HEAAC
+supports AAC and HEAAC v2 as well.
+
+AAC is a popular audio coding technique recommended by MPEG committee.
+The codec handles audio signals sampled in the range of 8 kHz to 96
+kHz. It operates on a frame of 1024 samples. The bit-rates supported
+are in the range of 8 kbps to 576 kbps per channel.
+
+SBR and PS are the tools used in combination with the AAC general audio
+codec resulting in HEAAC v2 (also known as Enhanced AAC Plus). It
+provides significant increase in coding gain. In SBR, the high-band,
+i.e. the high frequency part of the spectrum is replicated using the
+low-band. In PS, channel redundancy is exploited and parameters are
+extracted from a down-mixed channel.The bit-rate is by far below the
+bit-rate required when using conventional AAC coding. This translates
+into better quality at lower bit-rates.
+
+
+# Introduction to Ex-HEAAC Decoder APIs
+
+## Files to be included are
+* [`ixheaacd_apicmd_standards.h`](decoder/ixheaacd_apicmd_standards.h)
+* [`ixheaacd_type_def.h`](decoder/ixheaacd_type_def.h)
+* [`ixheaacd_memory_standards.h`](decoder/ixheaacd_memory_standards.h)
+* [`ixheaacd_error_standards.h`](decoder/ixheaacd_error_standards.h)
+* [`ixheaacd_error_handler.h`](decoder/ixheaacd_error_handler.h)
+* [`ixheaacd_aac_config.h`](decoder/ixheaacd_aac_config.h)
+
+## Decoder APIs
+
+A single API is used to get and set configurations and execute the decode thread, based on command index passed.
+* ia_xheaacd_dec_api
+
+| **API Command** | **API Sub Command** | **Description** |
+|------|------|------|
+|IA_API_CMD_GET_LIB_ID_STRINGS | IA_CMD_TYPE_LIB_NAME | Gets the decoder library name |
+|IA_API_CMD_GET_LIB_ID_STRINGS | IA_CMD_TYPE_LIB_VERSION | Gets the decoder version |
+|IA_API_CMD_GET_API_SIZE | 0 | Gets the memory requirements size of the API |
+|IA_API_CMD_INIT | IA_CMD_TYPE_INIT_API_PRE_CONFIG_PARAMS | Sets the configuration parameters of the Ex-HEAAC v2 Decoder to default values |
+|IA_API_CMD_INIT | IA_CMD_TYPE_INIT_API_POST_CONFIG_PARAMS | Sets the attributes(size, priority, alignment) of all memory types required by the application onto the memory structure |
+|IA_API_CMD_SET_CONFIG_PARAM | IA_ENHAACPLUS_DEC_CONFIG_PARAM_SAMP_FREQ | Sets the core AAC sampling frequency for RAW header decoding |
+|IA_API_CMD_SET_CONFIG_PARAM | IA_ENHAACPLUS_DEC_CONFIG_PCM_WDSZ | Sets the bit width of the output pcm samples.The value has to be 16 |
+|IA_API_CMD_SET_CONFIG_PARAM | IA_ENHAACPLUS_DEC_CONFIG_PARAM_DOWNMIX | Sets the parameter whether the output needs to be down-mix to mono(1) or not(0) |
+|IA_API_CMD_SET_CONFIG_PARAM | IA_ENHAACPLUS_DEC_CONFIG_PARAM_TOSTEREO | Sets the flag to disable interleave mono to stereo |
+|IA_API_CMD_SET_CONFIG_PARAM | IA_ENHAACPLUS_DEC_CONFIG_PARAM_DSAMPLE | Sets the parameter whether the output needs to be downsampled(1) or not(0).This is valid only for Ex-HEAAC v2 build |
+|IA_API_CMD_SET_CONFIG_PARAM | IA_ENHAACPLUS_DEC_CONFIG_FRAMEOK | Sets the flag to 0 or 1 to indicate whether the current frame is valid(1) or not(0) |
+|IA_API_CMD_SET_CONFIG_PARAM | IA_ENHAACPLUS_DEC_CONFIG_ISMP4 | Sets the flag to 0 or 1 to indicate whether given test vector is an mp4 file or not |
+|IA_API_CMD_SET_CONFIG_PARAM | IA_ENHAACPLUS_DEC_CONFIG_PARAM_DISABLE_SYNC | Sets the flag of ADTS syncing or not ADTS syncing as 0 or 1 |
+|IA_API_CMD_SET_CONFIG_PARAM | IA_ENHAACPLUS_DEC_CONFIG_PARAM_AUTO_SBR_UPSAMPLE | Sets the parameter auto SBR upsample to 0 or 1.Used in case of stream changing from SBR present to SBR not present.This is valid only for Ex-HEAAC v2 build |
+|IA_API_CMD_SET_CONFIG_PARAM | IA_ENHAACPLUS_DEC_CONFIG_PARAM_MAX_CHANNEL | Sets the maximum number of channels present.Its maximum value is 2 for stereo library and 8 for multichannel library |
+|IA_API_CMD_SET_CONFIG_PARAM | IA_ENHAACPLUS_DEC_CONFIG_PARAM_COUP_CHANNEL | Sets the number of coupling channels to be used for coupling.It can take values from 0 to 16.This command is supported only if the library has multichannel support |
+|IA_API_CMD_SET_CONFIG_PARAM | IA_ENHAACPLUS_DEC_CONFIG_PARAM_DOWNMIX_STEREO | Sets the flag of downmixing n number of channels to stereo.Can be 0 or 1. This command is supported only if the library has multichannel support |
+|IA_API_CMD_SET_CONFIG_PARAM | IA_ENHAACPLUS_DEC_CONFIG_PARAM_ISLOAS | Sets the flag indicating that the input file is a .loas file.Can be 0 or 1 |
+|IA_API_CMD_GET_N_MEMTABS | 0 | Gets the number of memory types |
+|IA_API_CMD_GET_N_TABLES | 0 | Gets the number of tables |
+|IA_API_CMD_GET_MEM_INFO_SIZE | 0 | Gets the size of the memory type being referred to by the index |
+|IA_API_CMD_GET_MEM_INFO_ALIGNMENT | 0 | Gets the alignment information of the memory-type being referred to by the index |
+|IA_API_CMD_GET_MEM_INFO_TYPE | 0 | Gets the type of memory being referred to by the index |
+|IA_API_CMD_SET_MEM_PTR | 0 | Sets the pointer to the memory being referred to by the index to the input value |
+|IA_API_CMD_GET_TABLE_INFO_SIZE | 0 | Gets the size of the memory type being referred to by the index |
+|IA_API_CMD_GET_TABLE_INFO_ALIGNMENT | 0 | Gets the alignment information of the memory-type being referred to by the index |
+|IA_API_CMD_GET_TABLE_PTR | 0 | Gets the address of the current location of the table |
+|IA_API_CMD_SET_TABLE_PTR | 0 | Sets the relocated table address |
+|IA_API_CMD_INPUT_OVER | 0 | Signals the end of bit-stream to the library |
+|IA_API_CMD_SET_INPUT_BYTES | 0 | Sets the number of bytes available in the input buffer for initialization |
+|IA_API_CMD_INIT | IA_CMD_TYPE_INIT_PROCESS | Search for the valid header, does header decode to get the parameters and initializes state and configuration structure |
+|IA_API_CMD_INIT | IA_CMD_TYPE_INIT_DONE_QUERY | Checks if the initialization process has completed |
+|IA_API_CMD_GET_CURIDX_INPUT_BUF | 0 | Gets the number of input buffer bytes consumed by the last initialization |
+|IA_API_CMD_GET_CONFIG_PARAM | IA_ENHAACPLUS_DEC_CONFIG_PARAM_SAMP_FREQ | Gets the sampling frequency |
+|IA_API_CMD_GET_CONFIG_PARAM | IA_ENHAACPLUS_DEC_CONFIG_PARAM_NUM_CHANNELS | Gets the output number of channels |
+|IA_API_CMD_GET_CONFIG_PARAM | IA_ENHAACPLUS_DEC_CONFIG_PARAM_PCM_WDSZ | Gets the output PCM word size |
+|IA_API_CMD_GET_CONFIG_PARAM | IA_ENHAACPLUS_DEC_CONFIG_PARAM_CHANNEL_MODE | Gets the channel mode. (Mono or PS/Stereo/Dual-mono) |
+|IA_API_CMD_GET_CONFIG_PARAM | IA_ENHAACPLUS_DEC_CONFIG_PARAM_CHANNEL_MASK | Gets the channel mask |
+|IA_API_CMD_GET_CONFIG_PARAM | IA_ENHAACPLUS_DEC_CONFIG_PARAM_SBR_MODE | Gets the SBR mode (Present/ Not Present).This is valid only for Ex-HEAAC v2 build |
+|IA_API_CMD_EXECUTE | IA_CMD_TYPE_DO_EXECUTE | Executes the decode thread |
+|IA_API_CMD_EXECUTE | IA_CMD_TYPE_DONE_QUERY | Checks if the end of decode has been reached |
+|IA_API_CMD_GET_OUTPUT_BYTES | 0 | Gets the number of bytes output by the decoder in the last frame |
+
+## Flowchart of calling sequence
+
+![API Flowchart](docs/Api_flowchart.png)
+
+# Building the Ex-HEAAC Decoder
+
+## Building for AOSP
+* Makefiles for building the Ex-HEAAC decoder library is provided in root(`libxaac/`) folder.
+* Makefiles for building the Ex-HEAAC decoder testbench is provided in `test` folder.
+* Build the library followed by the application using the below commands:
+Go to root directory
+```
+$ mm
+```
+
+## Using CMake
+Users can also use cmake to build for `x86`, `x86_64`, and Windows (MSVS project) platforms.
+
+### Building for native platforms
+Run the following commands to build the Ex-HEAAC Decoder for native platform:
+```
+Go to the root directory(libxaac/) of the Ex-HEAAC Decoder.
+Create a new folder in the project root directory and move to the newly created folder.
+
+$ cd <path to libxaac>
+$ mkdir bin
+$ cd bin
+$ cmake ..
+$ cmake --build .
+```
+
+### Creating MSVS project files
+To create MSVS project files for the Ex-HEAAC decoder from cmake, run the following commands:
+```
+Go to the root directory(libxaac/) of the Ex-HEAAC Decoder.
+Create a new folder in the project root directory and move to the newly created folder.
+
+$ cd <path to libxaac>
+$ mkdir bin
+$ cd bin
+$ cmake -G "Visual Studio 15 2017" ..
+```
+
+The above command creates MSVS 2017 project files. If the version is different, modify the generator name accordingly.
+The Ex-HEAAC decoder can be built using these project files.
+
+# Running the Ex-HEAAC Decoder
+
+The Ex-HEAAC Decoder can be run by providing command-line parameters(CLI options) directly or by providing a parameter file as a command line argument.
+
+Command line usage :
+```
+<exceutable> -ifile:<input_file> -imeta:<meta_data_file> -ofile:<out_file> [options]
+
+[options] can be,
+[-pcmsz:<pcmwordsize>]
+[-dmix:<down_mix>]
+[-tostereo:<interleave_to_stereo>]
+[-dsample:<down_sample_sbr>]
+[-fs:<RAW_sample_rate>]
+[-nosync:<disable_sync>]
+[-sbrup:<auto_sbr_upsample>]
+[-maxchannel:<maximum_num_channels>]
+[-mp4:<mp4_flag>]
+
+where,
+ <inputfile> is the input AAC file name.
+ <meta_data_file> is a text file which contains metadata for USAC files with an MP4 container.
+ <outputfile> is the output file name.
+ <pcmwordsize> is the bits per sample info. Only 16 is valid
+ <down_mix> is to enable/disable always mono output. Default 0.
+ <interleave_to_stereo> is to enable/disable always interleaved to stereo output. Default 1.
+ <down_sample_sbr> is to enable/disable down-sampled SBR output. Default auto identification from header.
+ <RAW_sample_rate> is to indicate the core AAC sample rate for a RAW stream. If this is specified no other file format headers are searched for.
+ <disable_sync> is to disable the ADTS/ADIF sync search i.e when enabled the decoder expects the header to be at the start of input buffer. Default 0.
+ <auto_sbr_upsample> is to enable(1) or disable(0) auto SBR upsample in case of stream changing from SBR present to SBR not present. Default 1.
+ <maximum_num_channels> is the number of maxiumum channels the input may have. Default is 6 (5.1).
+ <mp4_flag> is a flag that should be set to 1 when passing raw stream along with meta data text file.
+
+```
+
+Sample CLI:
+```
+<xaac_dec_exe> -ifile:in_file.aac -ofile:out_file.wav -pcmsz:16
+```
+
+# Validating the Ex-HEAAC Decoder
+
+Conformance testing for AAC/HEAAC v1/HEAAC v2 mainly involves comparing
+decoder under test output with the ISO and 3GPP reference decoded output.
+
+Testing for USAC is done using encoded streams generated using ISO USAC
+reference encoder. The output generated by ITTIAM USAC decoder is
+compared against the output generated by ISO USAC decoder for 16-bit
+conformance on the respective(ARMv7, ARMv8, X86_32, X86_64) platforms.
diff --git a/decoder/armv7/ixheaacd_function_selector_arm_non_neon.c b/decoder/armv7/ixheaacd_function_selector_arm_non_neon.c
index 75ca6b3..d15cf74 100644
--- a/decoder/armv7/ixheaacd_function_selector_arm_non_neon.c
+++ b/decoder/armv7/ixheaacd_function_selector_arm_non_neon.c
@@ -69,7 +69,7 @@ VOID(*ixheaacd_covariance_matrix_calc_2)
WORD16) = &ixheaacd_covariance_matrix_calc_2_armv7;
VOID(*ixheaacd_over_lap_add1)
-(WORD32 *, WORD32 *, WORD16 *, const WORD16 *, WORD16, WORD16,
+(WORD32 *, WORD32 *, WORD32 *, const WORD16 *, WORD16, WORD16,
WORD16) = &ixheaacd_over_lap_add1_dec;
VOID(*ixheaacd_over_lap_add2)
@@ -155,13 +155,13 @@ VOID(*ixheaacd_post_twiddle)
WORD npoints) = &ixheaacd_post_twiddle_dec;
VOID(*ixheaacd_post_twid_overlap_add)
-(WORD16 pcm_out[], WORD32 spec_data[],
+(WORD32 pcm_out[], WORD32 spec_data[],
ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD npoints,
WORD32 *ptr_overlap_buf, WORD16 q_shift, const WORD16 *window,
WORD16 ch_fac) = &ixheaacd_post_twid_overlap_add_dec;
VOID(*ixheaacd_neg_shift_spec)
-(WORD32 *coef, WORD16 *out, WORD16 q_shift,
+(WORD32 *coef, WORD32 *out, WORD16 q_shift,
WORD16 ch_fac) = &ixheaacd_neg_shift_spec_dec;
VOID(*ixheaacd_spec_to_overlapbuf)
@@ -169,7 +169,7 @@ VOID(*ixheaacd_spec_to_overlapbuf)
WORD32 size) = &ixheaacd_spec_to_overlapbuf_armv7;
VOID(*ixheaacd_overlap_buf_out)
-(WORD16 *out_samples, WORD32 *ptr_overlap_buf, WORD32 size,
+(WORD32 *out_samples, WORD32 *ptr_overlap_buf, WORD32 size,
const WORD16 ch_fac) = &ixheaacd_overlap_buf_out_armv7;
VOID(*ixheaacd_overlap_out_copy)
diff --git a/decoder/armv7/ixheaacd_function_selector_armv7.c b/decoder/armv7/ixheaacd_function_selector_armv7.c
index c9f41f9..d3a17d7 100644
--- a/decoder/armv7/ixheaacd_function_selector_armv7.c
+++ b/decoder/armv7/ixheaacd_function_selector_armv7.c
@@ -76,7 +76,7 @@ VOID(*ixheaacd_covariance_matrix_calc_2)
WORD16) = &ixheaacd_covariance_matrix_calc_2_armv7;
VOID(*ixheaacd_over_lap_add1)
-(WORD32 *, WORD32 *, WORD16 *, const WORD16 *, WORD16, WORD16,
+(WORD32 *, WORD32 *, WORD32 *, const WORD16 *, WORD16, WORD16,
WORD16) = &ixheaacd_over_lap_add1_armv7;
VOID(*ixheaacd_over_lap_add2)
@@ -161,12 +161,13 @@ VOID(*ixheaacd_post_twiddle)
WORD npoints) = &ixheaacd_post_twiddle_armv7;
VOID(*ixheaacd_post_twid_overlap_add)
-(WORD16 pcm_out[], WORD32 spec_data[],
+(WORD32 pcm_out[], WORD32 spec_data[],
ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD npoints,
WORD32 *ptr_overlap_buf, WORD16 q_shift, const WORD16 *window,
WORD16 ch_fac) = &ixheaacd_post_twid_overlap_add_armv7;
+
VOID(*ixheaacd_neg_shift_spec)
-(WORD32 *coef, WORD16 *out, WORD16 q_shift,
+(WORD32 *coef, WORD32 *out, WORD16 q_shift,
WORD16 ch_fac) = &ixheaacd_neg_shift_spec_armv7;
VOID(*ixheaacd_spec_to_overlapbuf)
@@ -174,11 +175,11 @@ VOID(*ixheaacd_spec_to_overlapbuf)
WORD32 size) = &ixheaacd_spec_to_overlapbuf_armv7;
VOID(*ixheaacd_overlap_buf_out)
-(WORD16 *out_samples, WORD32 *ptr_overlap_buf, WORD32 size,
+(WORD32 *out_samples, WORD32 *ptr_overlap_buf, WORD32 size,
const WORD16 ch_fac) = &ixheaacd_overlap_buf_out_armv7;
VOID(*ixheaacd_overlap_out_copy)
-(WORD16 *out_samples, WORD32 *ptr_overlap_buf, WORD32 *ptr_overlap_buf1,
+(WORD32 *out_samples, WORD32 *ptr_overlap_buf, WORD32 *ptr_overlap_buf1,
const WORD16 ch_fac) = &ixheaacd_overlap_out_copy_armv7;
VOID(*ixheaacd_pretwiddle_compute)
@@ -194,18 +195,6 @@ VOID(*ixheaacd_complex_fft_p2)
(WORD32 *xr, WORD32 *xi, WORD32 nlength, WORD32 fft_mode,
WORD32 *preshift) = &ixheaacd_complex_fft_p2_armv7;
-VOID(*ixheaacd_mps_complex_fft_64)
-(WORD32 *ptr_x, WORD32 *fin_re, WORD32 *fin_im,
- WORD32 nlength) = &ixheaacd_mps_complex_fft_64_armv7;
-
-VOID(*ixheaacd_mps_synt_pre_twiddle)
-(WORD32 *ptr_in, const WORD32 *table_re, const WORD32 *table_im,
- WORD32 resolution) = &ixheaacd_mps_synt_pre_twiddle_armv7;
-
-VOID(*ixheaacd_mps_synt_post_twiddle)
-(WORD32 *ptr_in, const WORD32 *table_re, const WORD32 *table_im,
- WORD32 resolution) = &ixheaacd_mps_synt_post_twiddle_armv7;
-
VOID(*ixheaacd_calc_pre_twid)
(WORD32 *ptr_x, WORD32 *r_ptr, WORD32 *i_ptr, WORD32 nlength,
const WORD32 *cos_ptr, const WORD32 *sin_ptr) = &ixheaacd_calc_pre_twid_armv7;
@@ -214,14 +203,9 @@ VOID(*ixheaacd_calc_post_twid)
(WORD32 *ptr_x, WORD32 *r_ptr, WORD32 *i_ptr, WORD32 nlength,
const WORD32 *cos_ptr, const WORD32 *sin_ptr) = &ixheaacd_calc_post_twid_armv7;
-VOID(*ixheaacd_mps_synt_post_fft_twiddle)
-(WORD32 resolution, WORD32 *fin_re, WORD32 *fin_im, const WORD32 *table_re,
- const WORD32 *table_im,
- WORD32 *state) = &ixheaacd_mps_synt_post_fft_twiddle_armv7;
-
VOID(*ixheaacd_mps_synt_out_calc)
-(WORD32 resolution, WORD32 *out, WORD32 *state,
- const WORD32 *filter_coeff) = &ixheaacd_mps_synt_out_calc_armv7;
+(WORD32 resolution, FLOAT32 *out, FLOAT32 *state,
+ const FLOAT32 *filter_coeff) = &ixheaacd_mps_synt_out_calc_dec;
VOID(*ixheaacd_fft_15_ld)
(WORD32 *inp, WORD32 *op, WORD32 *fft3out,
diff --git a/decoder/armv7/ixheaacd_lap1.s b/decoder/armv7/ixheaacd_lap1.s
index 999dd35..2f2ced3 100644
--- a/decoder/armv7/ixheaacd_lap1.s
+++ b/decoder/armv7/ixheaacd_lap1.s
@@ -29,7 +29,7 @@
ixheaacd_overlap_buf_out_armv7:
STMFD sp!, {r4-r5}
- MOV r3, r3, lsl #1
+ MOV r3, r3, lsl #2
OUTSAMPLE_LOOP:
@@ -37,11 +37,11 @@ OUTSAMPLE_LOOP:
LDR r5, [r1], #4
SUBS r2, r2, #2
- QADD16 r4, r4, r4
- QADD16 r5, r5, r5
+ LSL r4,r4,#15
+ LSL r5,r5,#15
- STRH r4, [r0], r3
- STRH r5, [r0], r3
+ STR r4, [r0], r3
+ STR r5, [r0], r3
BGT OUTSAMPLE_LOOP
@@ -54,7 +54,7 @@ ixheaacd_overlap_out_copy_armv7:
STMFD sp!, {r4-r9, r14}
MOV r9, #32
MOV r8, r1
- MOV r3, r3, LSL #1
+ MOV r3, r3, LSL #2
OUT_OVERLAP_LOOP:
@@ -62,14 +62,14 @@ OUT_OVERLAP_LOOP:
LDR r5, [r1], #4
SUBS r9, r9, #1
- QADD16 r4, r4, r4
- QADD16 r5, r5, r5
+ LSL r4,r4,#15
+ LSL r5,r5,#15
LDR r6, [r2], #4
LDR r7, [r2], #4
- STRH r4, [r0], r3
- STRH r5, [r0], r3
+ STR r4, [r0], r3
+ STR r5, [r0], r3
STR r6, [r8], #4
STR r7, [r8], #4
diff --git a/decoder/armv7/ixheaacd_no_lap1.s b/decoder/armv7/ixheaacd_no_lap1.s
index 2884191..944e32b 100644
--- a/decoder/armv7/ixheaacd_no_lap1.s
+++ b/decoder/armv7/ixheaacd_no_lap1.s
@@ -32,79 +32,60 @@ ixheaacd_neg_shift_spec_armv7:
ADD R6, R6, R0
MOV R8, #-16
SUB R6, R6, #12
- MOV R7, R3, LSL #1
+ MOV R7, R3, LSL #2
VDUP.32 Q1, R2
- MOV R4, #0x8000
- VDUP.32 Q2, R4
-
VLD1.32 {D0, D1}, [R6], R8
VQNEG.S32 Q0, Q0
VLD1.32 {D6, D7}, [R6], R8
VQSHL.S32 Q15, Q0, Q1
- VQADD.S32 Q14, Q15, Q2
- VSHR.S32 Q13, Q14, #16
- VREV64.32 Q13, Q13
+ VMOV Q13, Q15
SUB R5, R5, #8
- VUZP.16 D27, D26
VQNEG.S32 Q3, Q3
-
+ VREV64.32 Q13,Q13
LOOP_1:
-
- VST1.16 D27[0], [R1], R7
- VQSHL.S32 Q12, Q3, Q1
- VLD1.32 {D0, D1}, [R6], R8
- VST1.16 D27[1], [R1], R7
- VQADD.S32 Q11, Q12, Q2
- VST1.16 D27[2], [R1], R7
- VQNEG.S32 Q0, Q0
- VST1.16 D27[3], [R1], R7
- VSHR.S32 Q10, Q11, #16
- VREV64.32 Q10, Q10
- SUBS R5, R5, #8
-
-
- VUZP.16 D21, D20
- VQSHL.S32 Q15, Q0, Q1
- VST1.16 D21[0], [R1], R7
- VLD1.32 {D6, D7}, [R6], R8
- VQADD.S32 Q14, Q15, Q2
- VST1.16 D21[1], [R1], R7
- VSHR.S32 Q13, Q14, #16
- VST1.16 D21[2], [R1], R7
- VREV64.32 Q13, Q13
- VST1.16 D21[3], [R1], R7
-
-
- VUZP.16 D27, D26
- VQNEG.S32 Q3, Q3
-
-
-
- BGT LOOP_1
-
- VST1.16 D27[0], [R1], R7
- VQSHL.S32 Q12, Q3, Q1
- VST1.16 D27[1], [R1], R7
- VST1.16 D27[2], [R1], R7
- VQADD.S32 Q11, Q12, Q2
- VST1.16 D27[3], [R1], R7
- VSHR.S32 Q10, Q11, #16
-
-
- VREV64.32 Q10, Q10
-
- VUZP.16 D21, D20
-
- VST1.16 D21[0], [R1], R7
- VST1.16 D21[1], [R1], R7
- VST1.16 D21[2], [R1], R7
- VST1.16 D21[3], [R1], R7
- VPOP {D8 - D15}
- LDMFD sp!, {R4-R12, R15}
+ VST1.32 {D27[0]},[R1], R7
+ VQSHL.S32 Q12, Q3, Q1
+ VLD1.32 {D0, D1}, [R6], R8
+ VST1.32 {D27[1]}, [R1], R7
+ VST1.32 {D26[0]}, [R1], R7
+ VQNEG.S32 Q0, Q0
+ VST1.32 {D26[1]}, [R1], R7
+ VMOV Q10 , Q12
+ SUBS R5, R5, #8
+
+
+ VREV64.32 Q10,Q10
+ VQSHL.S32 Q15, Q0, Q1
+ VST1.32 {D21[0]},[R1], R7
+ VLD1.32 {D6, D7}, [R6],R8
+ VST1.32 {D21[1]}, [R1],R7
+ VMOV Q13,Q15
+ VST1.32 {D20[0]}, [R1],R7
+ VST1.32 {D20[1]}, [R1],R7
+
+ VREV64.32 Q13,Q13
+ VQNEG.S32 Q3, Q3
+
+ BGT LOOP_1
+
+ VST1.32 {D27[0]},[R1],R7
+ VQSHL.S32 Q12, Q3, Q1
+ VST1.32 {D27[1]}, [R1],R7
+ VST1.32 {D26[0]}, [R1],R7
+ VST1.32 {D26[1]}, [R1],R7
+ VMOV Q10, Q12
+
+ VREV64.32 Q10,Q10
+ VST1.32 {D21[0]}, [R1], R7
+ VST1.32 {D21[1]}, [R1], R7
+ VST1.32 {D20[0]}, [R1], R7
+ VST1.32 {D20[1]}, [R1], R7
+ VPOP {D8 - D15}
+ LDMFD sp!, {R4-R12, R15}
.end
diff --git a/decoder/armv7/ixheaacd_overlap_add1.s b/decoder/armv7/ixheaacd_overlap_add1.s
index b376470..5c8f3c4 100644
--- a/decoder/armv7/ixheaacd_overlap_add1.s
+++ b/decoder/armv7/ixheaacd_overlap_add1.s
@@ -32,6 +32,8 @@ ixheaacd_over_lap_add1_armv7:
LDR R4, [SP, #104]
LDR R5, [SP, #108]
LDR R6, [SP, #112]
+
+ LSL R6 , R6 , #1
MOV R10, R5, LSL #1
SUB R11, R10, #1
MOV R10, R11, LSL #2
@@ -45,11 +47,10 @@ ixheaacd_over_lap_add1_armv7:
MOV R12, #-16
VDUP.16 Q11, R4
VLD1.32 {D6, D7}, [R10], R12
- MOV R7, #0x2000
+ MOV R7, #0x0
VREV64.32 Q3, Q3
RSB R7, R7, #0
VQNEG.S32 Q0, Q3
- VDUP.32 Q10, R7
VUZP.16 D1, D0
SUB R11, R5, #1
VUZP.16 D7, D6
@@ -66,7 +67,6 @@ ixheaacd_over_lap_add1_armv7:
ADD R6, R6, R2
-
VMULL.U16 Q15, D7, D2
VLD1.32 {D4, D5}, [R1]!
VSHR.U32 Q15, Q15, #16
@@ -81,12 +81,7 @@ ixheaacd_over_lap_add1_armv7:
VQMOVN.S64 D28, Q13
VMULL.S32 Q13, D5, D15
VQMOVN.S64 D29, Q13
-
- VQADD.S32 Q14, Q14, Q10
VQSUB.S32 Q13, Q15, Q14
- VQSHL.S32 Q13, Q13, #2
- VSHR.S32 Q13, Q13, #16
- VUZP.16 D26, D27
VMULL.U16 Q12, D1, D3
@@ -104,16 +99,12 @@ ixheaacd_over_lap_add1_armv7:
VQMOVN.S64 D17, Q0
VREV64.32 Q3, Q3
- VQADD.S32 Q8, Q8, Q10
VQNEG.S32 Q0, Q3
VUZP.16 D1, D0
VQSUB.S32 Q9, Q12, Q8
VUZP.16 D7, D6
- VQSHL.S32 Q9, Q9, #2
VLD2.16 {D2, D3}, [R8], R12
- VSHR.S32 Q9, Q9, #16
VREV64.16 Q1, Q1
- VUZP.16 D18, D19
VLD1.32 {D4, D5}, [R1]!
SUB R5, R5, #8
@@ -121,25 +112,25 @@ ixheaacd_over_lap_add1_armv7:
LOOP_1:
- VST1.16 D26[0], [R11], R4
+
+ VST1.32 D26[0], [R11], R4
VMULL.U16 Q15, D7, D2
- VST1.16 D26[1], [R11], R4
+ VST1.32 D26[1], [R11], R4
VMULL.U16 Q12, D1, D3
- VST1.16 D26[2], [R11], R4
+ VST1.32 D27[0], [R11] ,R4
VSHR.U32 Q15, Q15, #16
- VST1.16 D26[3], [R11], R4
+ VST1.32 D27[1], [R11] ,R4
VSHR.U32 Q12, Q12, #16
- VST1.16 D18[0], [R6], R9
+ VST1.32 D18[0], [R6], R9
VMLAL.S16 Q15, D6, D2
- VST1.16 D18[1], [R6], R9
+ VST1.32 D18[1], [R6], R9
VMLAL.S16 Q12, D0, D3
- VST1.16 D18[2], [R6], R9
+ VST1.32 D19[0], [R6], R9
VQSHL.S32 Q15, Q15, Q11
- VST1.16 D18[3], [R6], R9
+ VST1.32 D19[1], [R6], R9
VQSHL.S32 Q12, Q12, Q11
VLD1.32 {D6, D7}, [R10], R12
-
VADDL.S16 Q7, D3, D12
VMULL.S32 Q8, D4, D14
@@ -148,8 +139,6 @@ LOOP_1:
VQMOVN.S64 D29, Q8
VREV64.32 Q3, Q3
-
-
VADDL.S16 Q7, D2, D12
VMULL.S32 Q0, D4, D14
@@ -160,34 +149,27 @@ LOOP_1:
VLD2.16 {D2, D3}, [R8], R12
VQNEG.S32 Q0, Q3
VLD1.32 {D4, D5}, [R1]!
- VQADD.S32 Q14, Q14, Q10
VUZP.16 D1, D0
- VQADD.S32 Q8, Q8, Q10
VUZP.16 D7, D6
VQSUB.S32 Q13, Q15, Q14
VREV64.16 Q1, Q1
VQSUB.S32 Q9, Q12, Q8
- VQSHL.S32 Q13, Q13, #2
- VQSHL.S32 Q9, Q9, #2
VMULL.U16 Q15, D7, D2
- VSHR.S32 Q13, Q13, #16
- VUZP.16 D26, D27
- VSHR.S32 Q9, Q9, #16
- VST1.16 D26[0], [R11], R4
+ VST1.32 D26[0], [R11], R4
VMULL.U16 Q12, D1, D3
- VUZP.16 D18, D19
+
VSHR.U32 Q15, Q15, #16
- VST1.16 D26[1], [R11], R4
+ VST1.32 {D26[1]}, [R11], R4
VMLAL.S16 Q15, D6, D2 @MLA
- VST1.16 D26[2], [R11], R4
+ VST1.32 {D27[0]}, [R11], R4
VSHR.U32 Q12, Q12, #16
- VST1.16 D26[3], [R11], R4
+ VST1.32 {D27[1]}, [R11], R4
VMLAL.S16 Q12, D0, D3 @MLA
- VST1.16 D18[0], [R6], R9
+ VST1.32 {D18[0]}, [R6], R9
VQSHL.S32 Q15, Q15, Q11
- VST1.16 D18[1], [R6], R9
+ VST1.32 {D18[1]}, [R6], R9
VQSHL.S32 Q12, Q12, Q11
- VST1.16 D18[2], [R6], R9
+ VST1.32 {D19[0]}, [R6], R9
VADDL.S16 Q7, D3, D12
@@ -197,7 +179,7 @@ LOOP_1:
VMULL.S32 Q8, D5, D15
VQMOVN.S64 D29, Q8
- VST1.16 D18[3], [R6], R9
+ VST1.32 {D19[1]}, [R6], R9
VADDL.S16 Q7, D2, D12
@@ -208,45 +190,40 @@ LOOP_1:
VQMOVN.S64 D17, Q0
VLD1.32 {D6, D7}, [R10], R12
- VQADD.S32 Q14, Q14, Q10
VREV64.32 Q3, Q3
VQNEG.S32 Q0, Q3
VUZP.16 D1, D0
VQSUB.S32 Q13, Q15, Q14
VUZP.16 D7, D6
- VQADD.S32 Q8, Q8, Q10
VLD2.16 {D2, D3}, [R8], R12
VQSUB.S32 Q9, Q12, Q8
VREV64.16 Q1, Q1
- VQSHL.S32 Q13, Q13, #2
+
VLD1.32 {D4, D5}, [R1]!
- VQSHL.S32 Q9, Q9, #2
- VSHR.S32 Q13, Q13, #16
+
SUBS R5, R5, #8
- VSHR.S32 Q9, Q9, #16
- VUZP.16 D26, D27
- VUZP.16 D18, D19
+
BGT LOOP_1
- VST1.16 D26[0], [R11], R4
+ VST1.32 {D26[0]}, [R11], R4
VMULL.U16 Q15, D7, D2
- VST1.16 D26[1], [R11], R4
+ VST1.32 {D26[1]}, [R11], R4
VMULL.U16 Q12, D1, D3
- VST1.16 D26[2], [R11], R4
+ VST1.32 {D27[0]}, [R11], R4
VSHR.U32 Q15, Q15, #16
- VST1.16 D26[3], [R11], R4
+ VST1.32 {D27[1]}, [R11], R4
VSHR.U32 Q12, Q12, #16
- VST1.16 D18[0], [R6], R9
+ VST1.32 {D18[0]}, [R6], R9
VMLAL.S16 Q15, D6, D2
- VST1.16 D18[1], [R6], R9
+ VST1.32 {D18[1]}, [R6], R9
VMLAL.S16 Q12, D0, D3
- VST1.16 D18[2], [R6], R9
+ VST1.32 {D19[0]}, [R6], R9
VQSHL.S32 Q15, Q15, Q11
- VST1.16 D18[3], [R6], R9
+ VST1.32 {D19[1]}, [R6], R9
VQSHL.S32 Q12, Q12, Q11
@@ -268,29 +245,19 @@ LOOP_1:
VMULL.S32 Q13, D5, D15
VQMOVN.S64 D17, Q13
- VQADD.S32 Q14, Q14, Q10
- VQADD.S32 Q8, Q8, Q10
+
VQSUB.S32 Q13, Q15, Q14
VQSUB.S32 Q9, Q12, Q8
- VQSHL.S32 Q13, Q13, #2
- VQSHL.S32 Q9, Q9, #2
- VSHR.S32 Q13, Q13, #16
- VSHR.S32 Q9, Q9, #16
- VUZP.16 D26, D27
-
- VUZP.16 D18, D19
-
-
- VST1.16 D26[0], [R11], R4
- VST1.16 D26[1], [R11], R4
- VST1.16 D26[2], [R11], R4
- VST1.16 D26[3], [R11], R4
+ VST1.32 D26[0], [R11], R4
+ VST1.32 D26[1], [R11], R4
+ VST1.32 D27[0], [R11], R4
+ VST1.32 D27[1], [R11], R4
- VST1.16 D18[0], [R6], R9
- VST1.16 D18[1], [R6], R9
- VST1.16 D18[2], [R6], R9
- VST1.16 D18[3], [R6], R9
+ VST1.32 D18[0], [R6], R9
+ VST1.32 D18[1], [R6], R9
+ VST1.32 D19[0], [R6], R9
+ VST1.32 D19[1], [R6], R9
VPOP {d8 - d15}
LDMFD sp!, {R4-R12, R15}
diff --git a/decoder/armv7/ixheaacd_post_twiddle_overlap.s b/decoder/armv7/ixheaacd_post_twiddle_overlap.s
index 24a5ba3..57d20cd 100644
--- a/decoder/armv7/ixheaacd_post_twiddle_overlap.s
+++ b/decoder/armv7/ixheaacd_post_twiddle_overlap.s
@@ -44,7 +44,7 @@ ixheaacd_post_twid_overlap_add_armv7:
VMOV.S16 D18, #50
RSB R9, R5, #15
- VMOV.S32 Q10, #0x00008000
+ VMOV.S32 Q10, #0x0000000
VDUP.32 Q8, R5
SUB R5, R5, #16
STR R5, [sp, #116]
@@ -149,14 +149,12 @@ NEXT1:
VQSUB.S32 D8, D0, D8
- VQSHL.S32 D8, D8, #2
VDUP.32 D0, R8
- VQADD.S32 D8, D8, D0
- VSHR.S32 D8, D8, #16
LDR R7, [sp, #112]
+ LSL R7 , R7 , #1
LSL R10, R7, #1
ASR R5, R3, #1
@@ -166,8 +164,8 @@ NEXT1:
MVN R9, R10
ADD R9, R9, #1
- VST1.16 D8[2], [R0], R9
- VST1.16 D8[0], [R5], R10
+ VST1.32 D8[1], [R0], R9
+ VST1.32 D8[0], [R5], R10
MOV R8, R1
@@ -397,28 +395,19 @@ PROLOGUE_NEON:
VMLAL.S16 Q15, D15, D10
VLD2.32 {Q5, Q6}, [R6], R12
- VQSHL.S32 Q2, Q2, #2
VUZP.16 D10, D11
- VQSHL.S32 Q3, Q3, #2
VUZP.16 D12, D13
- VQADD.S32 Q7, Q2, Q10
+ VMOV Q7,Q2
VREV64.16 Q5, Q5
- VQADD.S32 Q3, Q3, Q10
VREV64.16 Q6, Q6
- VSHR.S32 Q7, Q7, #16
-
- VUZP.16 D14, D15
- VSHR.S32 Q3, Q3, #16
-
- VUZP.16 D6, D7
-
- VMOV D15, D6
VQSHL.S32 Q4, Q4, Q8
+ VMOV Q9,Q3
+
VLD2.32 {Q2, Q3}, [R8]!
VQSHL.S32 Q15, Q15, Q8
@@ -428,72 +417,61 @@ PROLOGUE_NEON:
VUZP.16 D6, D7
VQSUB.S32 Q11, Q15, Q11
- VQSHL.S32 Q15, Q4, #2
+ VMOV Q15,Q4
VLD2.16 {D8, D9}, [R2]!
- VQSHL.S32 Q11, Q11, #2
- VQADD.S32 Q15, Q15, Q10
- VQADD.S32 Q11, Q11, Q10
+CORE_LOOP_PTO:
- VSHR.S32 Q15, Q15, #16
+ VST1.32 D14[0], [R0, :32], R9
- VUZP.16 D30, D31
- VSHR.S32 Q11, Q11, #16
+ VST1.32 D22[0], [R0, :32], R9
+ VST1.32 D14[1], [R0, :32], R9
- VUZP.16 D22, D23
- VMOV D23, D30
+ VST1.32 D22[1], [R0, :32], R9
-CORE_LOOP_PTO:
- VST1.16 D14[0], [R0, : 16], R9
- VMULL.U16 Q15, D0, D9
+ VST1.32 D15[0], [R0, :32], R9
- VST1.16 D22[0], [R0, : 16], R9
- VMULL.U16 Q14, D2, D8
+ VST1.32 D23[0], [R0, :32], R9
- VST1.16 D14[1], [R0, : 16], R9
- VMULL.U16 Q13, D0, D8
+ VST1.32 D15[1], [R0, :32], R9
- VST1.16 D22[1], [R0, : 16], R9
- VMULL.U16 Q12, D2, D9
+ VST1.32 D23[1], [R0, :32], R9
- VST1.16 D14[2], [R0, : 16], R9
- VSHR.U32 Q15, Q15, #16
+ VST1.32 D18[0], [R5, :32], R10
- VST1.16 D22[2], [R0, : 16], R9
- VSHR.U32 Q14, Q14, #16
+ VST1.32 D30[0], [R5, :32] ,R10
- VST1.16 D14[3], [R0, : 16], R9
- VMLAL.S16 Q15, D1, D9
+ VST1.32 D18[1], [R5, :32], R10
- VST1.16 D22[3], [R0, : 16], R9
- VMLAL.S16 Q14, D3, D8
+ VST1.32 D30[1], [R5, :32], R10
- VST1.16 D15[0], [R5, : 16], R10
- VSHR.U32 Q13, Q13, #16
+ VST1.32 D19[0], [R5, :32], R10
- VST1.16 D23[0], [R5, : 16], R10
- VSHR.U32 Q12, Q12, #16
+ VST1.32 D31[0], [R5, :32], R10
- VST1.16 D15[1], [R5, : 16], R10
- VMLAL.S16 Q13, D1, D8
+ VST1.32 D19[1], [R5, :32], R10
+
+ VST1.32 D31[1], [R5, :32], R10
- VST1.16 D23[1], [R5, : 16], R10
+ VMULL.U16 Q15, D0, D9
+ VMULL.U16 Q14, D2, D8
+ VMULL.U16 Q13, D0, D8
+ VMULL.U16 Q12, D2, D9
+ VSHR.U32 Q15, Q15, #16
+ VSHR.U32 Q14, Q14, #16
+ VMLAL.S16 Q15, D1, D9
+ VMLAL.S16 Q14, D3, D8
+ VSHR.U32 Q13, Q13, #16
+ VSHR.U32 Q12, Q12, #16
+ VMLAL.S16 Q13, D1, D8
VMLAL.S16 Q12, D3, D9
- VST1.16 D15[2], [R5, : 16], R10
VADD.I32 Q15, Q15, Q14
-
- VST1.16 D23[2], [R5, : 16], R10
VNEG.S32 Q15, Q15
-
- VST1.16 D15[3], [R5, : 16], R10
-
- VST1.16 D23[3], [R5, : 16], R10
VSUB.I32 Q14, Q12, Q13
-
VMOV Q13, Q15
VMULL.U16 Q11, D4, D8
@@ -501,6 +479,7 @@ CORE_LOOP_PTO:
VUZP.16 D24, D25
+ VMOV.S16 D18, #50
VUZP.16 D26, D27
VMULL.U16 Q1, D24, D18
@@ -660,28 +639,21 @@ CORE_LOOP_PTO:
VMLAL.S16 Q15, D15, D10
VLD2.32 {Q5, Q6}, [R6], R12
- VQSHL.S32 Q2, Q2, #2
VUZP.16 D10, D11
- VQSHL.S32 Q3, Q3, #2
VUZP.16 D12, D13
- VQADD.S32 Q7, Q2, Q10
+ VMOV Q7 , Q2
VREV64.16 Q5, Q5
- VQADD.S32 Q3, Q3, Q10
VREV64.16 Q6, Q6
- VSHR.S32 Q7, Q7, #16
-
- VUZP.16 D14, D15
- VSHR.S32 Q3, Q3, #16
- VUZP.16 D6, D7
- VMOV D15, D6
VQSHL.S32 Q4, Q4, Q8
+ VMOV Q9,Q3
+
VLD2.32 {Q2, Q3}, [R8]!
VQSHL.S32 Q15, Q15, Q8
@@ -691,22 +663,9 @@ CORE_LOOP_PTO:
VUZP.16 D6, D7
VQSUB.S32 Q11, Q15, Q11
- VQSHL.S32 Q15, Q4, #2
+ VMOV Q15,Q4
VLD2.16 {D8, D9}, [R2]!
- VQSHL.S32 Q11, Q11, #2
-
- VQADD.S32 Q15, Q15, Q10
- VQADD.S32 Q11, Q11, Q10
-
- VSHR.S32 Q15, Q15, #16
-
- VUZP.16 D30, D31
- VSHR.S32 Q11, Q11, #16
-
-
- VUZP.16 D22, D23
- VMOV D23, D30
SUBS R3, R3, #1
BNE CORE_LOOP_PTO
@@ -717,54 +676,57 @@ CORE_LOOP_PTO:
EPILOGUE:
- VST1.16 D14[0], [R0], R9
- VMULL.U16 Q15, D0, D9
+ VST1.32 D14[0], [R0], R9
- VST1.16 D22[0], [R0], R9
- VMULL.U16 Q14, D2, D8
+ VST1.32 D22[0], [R0], R9
- VST1.16 D14[1], [R0], R9
- VMULL.U16 Q13, D0, D8
+ VST1.32 D14[1], [R0], R9
- VST1.16 D22[1], [R0], R9
- VMULL.U16 Q12, D2, D9
+ VST1.32 D22[1], [R0], R9
- VST1.16 D14[2], [R0], R9
- VSHR.U32 Q15, Q15, #16
+ VST1.32 D15[0], [R0], R9
- VST1.16 D22[2], [R0], R9
- VSHR.U32 Q14, Q14, #16
+ VST1.32 D23[0], [R0], R9
- VST1.16 D14[3], [R0], R9
- VMLAL.S16 Q15, D1, D9
+ VST1.32 D15[1], [R0], R9
- VST1.16 D22[3], [R0], R9
- VMLAL.S16 Q14, D3, D8
+ VST1.32 D23[1], [R0], R9
- VST1.16 D15[0], [R5], R10
- VSHR.U32 Q13, Q13, #16
+ VST1.32 D18[0], [R5], R10
- VST1.16 D23[0], [R5], R10
- VSHR.U32 Q12, Q12, #16
+ VST1.32 D30[0], [R5], R10
- VST1.16 D15[1], [R5], R10
- VMLAL.S16 Q13, D1, D8
+ VST1.32 D18[1], [R5], R10
- VST1.16 D23[1], [R5], R10
- VMLAL.S16 Q12, D3, D9
+ VST1.32 D30[1], [R5], R10
- VST1.16 D15[2], [R5], R10
- VADD.I32 Q15, Q15, Q14
+ VST1.32 D19[0], [R5], R10
- VST1.16 D23[2], [R5], R10
- VNEG.S32 Q15, Q15
+ VST1.32 D31[0], [R5], R10
+
+ VST1.32 D19[1], [R5], R10
+
+ VST1.32 D31[1], [R5], R10
- VST1.16 D15[3], [R5], R10
+ VMULL.U16 Q15, D0, D9
+ VMULL.U16 Q14, D2, D8
+ VMULL.U16 Q13, D0, D8
+ VMULL.U16 Q12, D2, D9
+ VSHR.U32 Q15, Q15, #16
+ VSHR.U32 Q14, Q14, #16
+ VMLAL.S16 Q15, D1, D9
+ VMLAL.S16 Q14, D3, D8
+ VSHR.U32 Q13, Q13, #16
+ VSHR.U32 Q12, Q12, #16
+ VMLAL.S16 Q13, D1, D8
+ VMLAL.S16 Q12, D3, D9
+ VADD.I32 Q15, Q15, Q14
+ VNEG.S32 Q15, Q15
- VST1.16 D23[3], [R5], R10
VSUB.I32 Q14, Q12, Q13
+ VMOV.S16 D18, #50
VMULL.U16 Q11, D4, D8
VMOV Q13, Q15
@@ -925,22 +887,10 @@ EPILOGUE:
VMLAL.S16 Q15, D15, D10
- VQSHL.S32 Q2, Q2, #2
- VQSHL.S32 Q3, Q3, #2
VQADD.S32 Q7, Q2, Q10
- VQADD.S32 Q3, Q3, Q10
-
- VSHR.S32 Q7, Q7, #16
-
- VUZP.16 D14, D15
- VSHR.S32 Q3, Q3, #16
-
- VUZP.16 D6, D7
-
- VMOV D15, D6
VQSHL.S32 Q4, Q4, Q8
VQSHL.S32 Q15, Q15, Q8
@@ -949,40 +899,24 @@ EPILOGUE:
VQSUB.S32 Q11, Q15, Q11
- VQSHL.S32 Q15, Q4, #2
-
- VQSHL.S32 Q11, Q11, #2
-
- VQADD.S32 Q15, Q15, Q10
- VQADD.S32 Q11, Q11, Q10
-
- VSHR.S32 Q15, Q15, #16
-
- VUZP.16 D30, D31
- VSHR.S32 Q11, Q11, #16
-
- VUZP.16 D22, D23
- VMOV D23, D30
-
-
-
-
- VST1.16 D14[0], [R0], R9
- VST1.16 D22[0], [R0], R9
- VST1.16 D14[1], [R0], R9
- VST1.16 D22[1], [R0], R9
- VST1.16 D14[2], [R0], R9
- VST1.16 D22[2], [R0], R9
- VST1.16 D14[3], [R0], R9
- VST1.16 D22[3], [R0], R9
- VST1.16 D15[0], [R5], R10
- VST1.16 D23[0], [R5], R10
- VST1.16 D15[1], [R5], R10
- VST1.16 D23[1], [R5], R10
- VST1.16 D15[2], [R5], R10
- VST1.16 D23[2], [R5], R10
- VST1.16 D15[3], [R5], R10
- VST1.16 D23[3], [R5], R10
+ VMOV Q15 , Q4
+
+ VST1.32 D14[0], [R0], R9
+ VST1.32 D22[0], [R0], R9
+ VST1.32 D14[1], [R0], R9
+ VST1.32 D22[1], [R0], R9
+ VST1.32 D15[0], [R0], R9
+ VST1.32 D23[0], [R0], R9
+ VST1.32 D15[1], [R0], R9
+ VST1.32 D23[1], [R0], R9
+ VST1.32 D6[0], [R5], R10
+ VST1.32 D30[0], [R5], R10
+ VST1.32 D6[1], [R5], R10
+ VST1.32 D30[1], [R5], R10
+ VST1.32 D7[0], [R5], R10
+ VST1.32 D31[0], [R5], R10
+ VST1.32 D7[1], [R5], R10
+ VST1.32 D31[1], [R5], R10
ARM_EPILOGUE:
@@ -1212,22 +1146,10 @@ ARM_LOOP:
VMLAL.S16 Q15, D15, D10
- VQSHL.S32 Q2, Q2, #2
- VQSHL.S32 Q3, Q3, #2
- VQADD.S32 Q7, Q2, Q10
+ VMOV Q7 , Q2
- VQADD.S32 Q3, Q3, Q10
-
- VSHR.S32 Q7, Q7, #16
-
- VUZP.16 D14, D15
- VSHR.S32 Q3, Q3, #16
-
- VUZP.16 D6, D7
-
- VMOV D15, D6
VQSHL.S32 Q4, Q4, Q8
VQSHL.S32 Q15, Q15, Q8
@@ -1236,39 +1158,26 @@ ARM_LOOP:
VQSUB.S32 Q11, Q15, Q11
- VQSHL.S32 Q15, Q4, #2
-
- VQSHL.S32 Q11, Q11, #2
-
- VQADD.S32 Q15, Q15, Q10
- VQADD.S32 Q11, Q11, Q10
-
- VSHR.S32 Q15, Q15, #16
-
- VUZP.16 D30, D31
- VSHR.S32 Q11, Q11, #16
-
- VUZP.16 D22, D23
- VMOV D23, D30
+ VMOV Q15, Q4
- VST1.16 D14[0], [R0], R9
- VST1.16 D22[0], [R0], R9
- VST1.16 D14[1], [R0], R9
- VST1.16 D22[1], [R0], R9
- VST1.16 D14[2], [R0], R9
- VST1.16 D22[2], [R0], R9
- VST1.16 D14[3], [R0], R9
+ VST1.32 D14[0], [R0], R9
+ VST1.32 D22[0], [R0], R9
+ VST1.32 D14[1], [R0], R9
+ VST1.32 D22[1], [R0], R9
+ VST1.32 D15[0], [R0], R9
+ VST1.32 D23[0], [R0], R9
+ VST1.32 D15[1], [R0], R9
- VST1.16 D15[0], [R5], R10
- VST1.16 D23[0], [R5], R10
- VST1.16 D15[1], [R5], R10
- VST1.16 D23[1], [R5], R10
- VST1.16 D15[2], [R5], R10
- VST1.16 D23[2], [R5], R10
- VST1.16 D15[3], [R5], R10
+ VST1.32 D6[0], [R5], R10
+ VST1.32 D30[0], [R5], R10
+ VST1.32 D6[1], [R5], R10
+ VST1.32 D30[1], [R5], R10
+ VST1.32 D7[0], [R5], R10
+ VST1.32 D31[0], [R5], R10
+ VST1.32 D7[1], [R5], R10
VPOP {d8 - d15}
LDMFD sp!, {R4-R12}
diff --git a/decoder/armv8/ixheaacd_function_selector_armv8.c b/decoder/armv8/ixheaacd_function_selector_armv8.c
index 351e472..8cb4067 100644
--- a/decoder/armv8/ixheaacd_function_selector_armv8.c
+++ b/decoder/armv8/ixheaacd_function_selector_armv8.c
@@ -74,7 +74,7 @@ VOID(*ixheaacd_covariance_matrix_calc_2)
WORD16) = &ixheaacd_covariance_matrix_calc_2_dec;
VOID(*ixheaacd_over_lap_add1)
-(WORD32 *, WORD32 *, WORD16 *, const WORD16 *, WORD16, WORD16,
+(WORD32 *, WORD32 *, WORD32 *, const WORD16 *, WORD16, WORD16,
WORD16) = &ixheaacd_over_lap_add1_armv8;
VOID(*ixheaacd_over_lap_add2)
@@ -159,13 +159,13 @@ VOID(*ixheaacd_post_twiddle)
WORD npoints) = &ixheaacd_post_twiddle_armv8;
VOID(*ixheaacd_post_twid_overlap_add)
-(WORD16 pcm_out[], WORD32 spec_data[],
+(WORD32 pcm_out[], WORD32 spec_data[],
ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD npoints,
WORD32 *ptr_overlap_buf, WORD16 q_shift, const WORD16 *window,
WORD16 ch_fac) = &ixheaacd_post_twid_overlap_add_armv8;
VOID(*ixheaacd_neg_shift_spec)
-(WORD32 *coef, WORD16 *out, WORD16 q_shift,
+(WORD32 *coef, WORD32 *out, WORD16 q_shift,
WORD16 ch_fac) = &ixheaacd_neg_shift_spec_armv8;
VOID(*ixheaacd_spec_to_overlapbuf)
@@ -173,11 +173,11 @@ VOID(*ixheaacd_spec_to_overlapbuf)
WORD32 size) = &ixheaacd_spec_to_overlapbuf_dec;
VOID(*ixheaacd_overlap_buf_out)
-(WORD16 *out_samples, WORD32 *ptr_overlap_buf, WORD32 size,
+(WORD32 *out_samples, WORD32 *ptr_overlap_buf, WORD32 size,
const WORD16 ch_fac) = &ixheaacd_overlap_buf_out_dec;
VOID(*ixheaacd_overlap_out_copy)
-(WORD16 *out_samples, WORD32 *ptr_overlap_buf, WORD32 *ptr_overlap_buf1,
+(WORD32 *out_samples, WORD32 *ptr_overlap_buf, WORD32 *ptr_overlap_buf1,
const WORD16 ch_fac) = &ixheaacd_overlap_out_copy_dec;
VOID(*ixheaacd_pretwiddle_compute)
@@ -193,18 +193,6 @@ VOID(*ixheaacd_complex_fft_p2)
(WORD32 *xr, WORD32 *xi, WORD32 nlength, WORD32 fft_mode,
WORD32 *preshift) = &ixheaacd_complex_fft_p2_dec;
-VOID(*ixheaacd_mps_complex_fft_64)
-(WORD32 *ptr_x, WORD32 *fin_re, WORD32 *fin_im,
- WORD32 nlength) = &ixheaacd_mps_complex_fft_64_dec;
-
-VOID(*ixheaacd_mps_synt_pre_twiddle)
-(WORD32 *ptr_in, const WORD32 *table_re, const WORD32 *table_im,
- WORD32 resolution) = &ixheaacd_mps_synt_pre_twiddle_dec;
-
-VOID(*ixheaacd_mps_synt_post_twiddle)
-(WORD32 *ptr_in, const WORD32 *table_re, const WORD32 *table_im,
- WORD32 resolution) = &ixheaacd_mps_synt_post_twiddle_dec;
-
VOID(*ixheaacd_calc_pre_twid)
(WORD32 *ptr_x, WORD32 *r_ptr, WORD32 *i_ptr, WORD32 nlength,
const WORD32 *cos_ptr, const WORD32 *sin_ptr) = &ixheaacd_calc_pre_twid_dec;
@@ -213,14 +201,9 @@ VOID(*ixheaacd_calc_post_twid)
(WORD32 *ptr_x, WORD32 *r_ptr, WORD32 *i_ptr, WORD32 nlength,
const WORD32 *cos_ptr, const WORD32 *sin_ptr) = &ixheaacd_calc_post_twid_dec;
-VOID(*ixheaacd_mps_synt_post_fft_twiddle)
-(WORD32 resolution, WORD32 *fin_re, WORD32 *fin_im, const WORD32 *table_re,
- const WORD32 *table_im,
- WORD32 *state) = &ixheaacd_mps_synt_post_fft_twiddle_dec;
-
VOID(*ixheaacd_mps_synt_out_calc)
-(WORD32 resolution, WORD32 *out, WORD32 *state,
- const WORD32 *filter_coeff) = &ixheaacd_mps_synt_out_calc_dec;
+(WORD32 resolution, FLOAT32 *out, FLOAT32 *state,
+ const FLOAT32 *filter_coeff) = &ixheaacd_mps_synt_out_calc_dec;
VOID(*ixheaacd_fft_15_ld)
(WORD32 *inp, WORD32 *op, WORD32 *fft3out,
@@ -246,4 +229,4 @@ VOID(*ixheaacd_inv_dit_fft_8pt)
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
+ WORD32 aac_sf_data_resil_flag) = &ixheaacd_scale_factor_process_armv8;
diff --git a/decoder/armv8/ixheaacd_no_lap1.s b/decoder/armv8/ixheaacd_no_lap1.s
index d339879..1c71f42 100644
--- a/decoder/armv8/ixheaacd_no_lap1.s
+++ b/decoder/armv8/ixheaacd_no_lap1.s
@@ -53,71 +53,60 @@ ixheaacd_neg_shift_spec_armv8:
ADD X6, X6, X0
MOV X8, #-16
SUB X6, X6, #12
- LSL X7, X3, #1
+ LSL X7, X3, #2
DUP V31.4S, W2
- MOV W4, #0x8000
- DUP V30.4S, W4
+
LD1 {V0.4S}, [X6], X8
SQNEG V0.4S, V0.4S
LD1 {V6.4S}, [X6], X8
SQSHL V25.4S, V0.4S, V31.4S
- SQADD V24.4S, V25.4S, V30.4S
- SSHR V23.4S, V24.4S, #16
- REV64 V23.4S, V23.4S
+
+ REV64 V25.4S, V25.4S
SUB X5, X5, #8
- UZP1 V27.8H, V23.8H, V23.8H
SQNEG V29.4S, V6.4S
LOOP_1:
- ST1 {V27.H}[2], [X1], X7
+ ST1 {V25.S}[2], [X1], X7
SQSHL V22.4S, V29.4S, V31.4S
LD1 {V0.4S}, [X6], X8
- ST1 {V27.H}[3], [X1], X7
- SQADD V21.4S, V22.4S, V30.4S
- ST1 {V27.H}[0], [X1], X7
+ ST1 {V25.S}[3], [X1], X7
+ ST1 {V25.S}[0], [X1], X7
SQNEG V0.4S, V0.4S
- ST1 {V27.H}[1], [X1], X7
- SSHR V20.4S, V21.4S, #16
- REV64 V20.4S, V20.4S
+ ST1 {V25.S}[1], [X1], X7
+ REV64 V22.4S, V22.4S
SUBS X5, X5, #8
- UZP1 V27.8H, V20.8H, V20.8H
SQSHL V25.4S, V0.4S, V31.4S
- ST1 {V27.H}[2], [X1], X7
+ ST1 {V22.S}[2], [X1], X7
LD1 {V6.4S}, [X6], X8
- SQADD V24.4S, V25.4S, V30.4S
- ST1 {V27.H}[3], [X1], X7
- SSHR V23.4S, V24.4S, #16
- ST1 {V27.H}[0], [X1], X7
- REV64 V23.4S, V23.4S
- ST1 {V27.H}[1], [X1], X7
+ ST1 {V22.S}[3], [X1], X7
+ ST1 {V22.S}[0], [X1], X7
+ REV64 V25.4S, V25.4S
+ ST1 {V22.S}[1], [X1], X7
- UZP1 V27.8H, V23.8H, V23.8H
SQNEG V29.4S, V6.4S
BGT LOOP_1
- ST1 {V27.H}[2], [X1], X7
+ ST1 {V25.S}[2], [X1], X7
SQSHL V22.4S, V29.4S, V31.4S
- ST1 {V27.H}[3], [X1], X7
- ST1 {V27.H}[0], [X1], X7
- SQADD V21.4S, V22.4S, V30.4S
- ST1 {V27.H}[1], [X1], X7
- SSHR V20.4S, V21.4S, #16
+ ST1 {V25.S}[3], [X1], X7
+ ST1 {V25.S}[0], [X1], X7
+
+ ST1 {V25.S}[1], [X1], X7
- REV64 V20.4S, V20.4S
+ REV64 V22.4S, V22.4S
- UZP1 V27.8H, V20.8H, V20.8H
- ST1 {V27.H}[2], [X1], X7
- ST1 {V27.H}[3], [X1], X7
- ST1 {V27.H}[0], [X1], X7
- ST1 {V27.H}[1], [X1], X7
+ ST1 {V22.S}[2], [X1], X7
+ ST1 {V22.S}[3], [X1], X7
+ ST1 {V22.S}[0], [X1], X7
+ ST1 {V22.S}[1], [X1], X7
pop_v_regs
RET
diff --git a/decoder/armv8/ixheaacd_overlap_add1.s b/decoder/armv8/ixheaacd_overlap_add1.s
index 14f5402..844effc 100644
--- a/decoder/armv8/ixheaacd_overlap_add1.s
+++ b/decoder/armv8/ixheaacd_overlap_add1.s
@@ -47,6 +47,7 @@
.global ixheaacd_over_lap_add1_armv8
ixheaacd_over_lap_add1_armv8:
push_v_regs
+ LSL X6 , X6 , #1
LSL X10, X5, #1
SUB X11, X10, #1
LSL X10, X11, #2
@@ -58,11 +59,9 @@ ixheaacd_over_lap_add1_armv8:
MOV X12, #-16
DUP V11.8H, W4
LD1 {V3.4S}, [X10], X12
- MOV W7, #0x2000
NEG W7, W7
SQNEG V0.4S, V3.4S
- DUP V10.4S, W7
UZP1 V31.8H, V0.8H, V0.8H
UZP2 V30.8H, V0.8H, V0.8H
REV64 V31.8h, V31.8h
@@ -105,12 +104,7 @@ ixheaacd_over_lap_add1_armv8:
SQXTN2 V28.4S, V29.2D
MOV V14.16B, V28.16B
- SQADD V14.4S, V14.4S, V10.4S
SQSUB V13.4S, V15.4S, V14.4S
- SQSHL V13.4S, V13.4S, #2
- SSHR V13.4S, V13.4S, #16
- UZP1 V26.8H, V13.8H, V13.8H
-
UMULL V12.4S, V31.4H, V3.4H
USHR V12.4S, V12.4S, #16
SMLAL V12.4S, V30.4H, V3.4H
@@ -124,8 +118,6 @@ ixheaacd_over_lap_add1_armv8:
SQXTN2 V28.4S, V29.2D
MOV V8.16B, V28.16B
- SQADD V8.4S, V8.4S, V10.4S
-
SQNEG V0.4S, V3.4S
UZP1 V1.8H, V0.8H, V0.8H
UZP2 V0.8H, V0.8H, V0.8H
@@ -136,12 +128,9 @@ ixheaacd_over_lap_add1_armv8:
UZP2 V6.8H, V3.8H, V3.8H
REV64 V7.8h, V7.8h
REV64 V6.8h, V6.8h
- SQSHL V9.4S, V9.4S, #2
LD2 {V2.4H, V3.4H}, [X8], X12
- SSHR V9.4S, V9.4S, #16
REV64 V2.4H, V2.4H
REV64 V3.4H, V3.4H
- UZP1 V18.8H, V9.8H, V9.8H
LD1 {V4.4S}, [X1], #16
SUB W5, W5, #8
@@ -149,21 +138,21 @@ ixheaacd_over_lap_add1_armv8:
LOOP_1:
- ST1 {V26.H}[0], [X11], X4
+ ST1 {V13.S}[0], [X11], X4
UMULL V15.4S, V7.4H, V2.4H
- ST1 {V26.H}[1], [X11], X4
+ ST1 {V13.S}[1], [X11], X4
UMULL V12.4S, V1.4H, V3.4H
- ST1 {V26.H}[2], [X11], X4
+ ST1 {V13.S}[2], [X11], X4
USHR V15.4S, V15.4S, #16
- ST1 {V26.H}[3], [X11], X4
+ ST1 {V13.S}[3], [X11], X4
USHR V12.4S, V12.4S, #16
- ST1 {V18.H}[0], [X6], X9
+ ST1 {V9.S}[0], [X6], X9
SMLAL V15.4S, V6.4H, V2.4H
- ST1 {V18.H}[1], [X6], X9
+ ST1 {V9.S}[1], [X6], X9
SMLAL V12.4S, V0.4H, V3.4H
- ST1 {V18.H}[2], [X6], X9
+ ST1 {V9.S}[2], [X6], X9
SQSHL V15.4S, V15.4S, V11.4S
- ST1 {V18.H}[3], [X6], X9
+ ST1 {V9.S}[3], [X6], X9
SQSHL V12.4S, V12.4S, V11.4S
LD1 {V6.4S}, [X10], X12
@@ -187,12 +176,10 @@ LOOP_1:
LD1 {V4.4S}, [X1], #16
- SQADD V14.4S, V14.4S, V10.4S
UZP1 V1.8H, V0.8H, V0.8H
UZP2 V0.8H, V0.8H, V0.8H
REV64 V1.8h, V1.8h
REV64 V0.8h, V0.8h
- SQADD V8.4S, V8.4S, V10.4S
UZP1 V7.8H, V6.8H, V6.8H
UZP2 V6.8H, V6.8H, V6.8H
REV64 V7.8h, V7.8h
@@ -201,27 +188,21 @@ LOOP_1:
REV64 V2.4H, V2.4H
REV64 V3.4H, V3.4H
SQSUB V9.4S, V12.4S, V8.4S
- SQSHL V13.4S, V13.4S, #2
- SQSHL V9.4S, V9.4S, #2
UMULL V15.4S, V7.4H, V2.4H
- SSHR V13.4S, V13.4S, #16
- UZP1 V26.8H, V13.8H, V13.8H
- SSHR V9.4S, V9.4S, #16
- ST1 {V26.H}[0], [X11], X4
+ ST1 {V13.S}[0], [X11], X4
UMULL V12.4S, V1.4H, V3.4H
- UZP1 V18.8H, V9.8H, V9.8H
USHR V15.4S, V15.4S, #16
- ST1 {V26.H}[1], [X11], X4
+ ST1 {V13.S}[1], [X11], X4
SMLAL V15.4S, V6.4H, V2.4H
- ST1 {V26.H}[2], [X11], X4
+ ST1 {V13.S}[2], [X11], X4
USHR V12.4S, V12.4S, #16
- ST1 {V26.H}[3], [X11], X4
+ ST1 {V13.S}[3], [X11], X4
SMLAL V12.4S, V0.4H, V3.4H
- ST1 {V18.H}[0], [X6], X9
+ ST1 {V9.S}[0], [X6], X9
SQSHL V15.4S, V15.4S, V11.4S
- ST1 {V18.H}[1], [X6], X9
+ ST1 {V9.S}[1], [X6], X9
SQSHL V12.4S, V12.4S, V11.4S
- ST1 {V18.H}[2], [X6], X9
+ ST1 {V9.S}[2], [X6], X9
SSHLL V27.4S, V3.4H, #0
SMULL V28.2D, V27.2S, V4.2S
@@ -230,7 +211,7 @@ LOOP_1:
SQXTN2 V28.4S, V29.2D
MOV V14.16B, V28.16B
- ST1 {V18.H}[3], [X6], X9
+ ST1 {V9.S}[3], [X6], X9
SSHLL V27.4S, V2.4H, #0
@@ -241,7 +222,6 @@ LOOP_1:
MOV V8.16B, V28.16B
LD1 {V3.4S}, [X10], X12
- SQADD V14.4S, V14.4S, V10.4S
SQNEG V0.4S, V3.4S
UZP1 V1.8H, V0.8H, V0.8H
@@ -253,39 +233,35 @@ LOOP_1:
UZP2 V6.8H, V3.8H, V3.8H
REV64 V7.8H, V7.8H
REV64 V6.8H, V6.8H
- SQADD V8.4S, V8.4S, V10.4S
+
LD2 {V2.4H, V3.4H}, [X8], X12
SQSUB V9.4S, V12.4S, V8.4S
REV64 V2.4H, V2.4H
REV64 V3.4H, V3.4H
- SQSHL V13.4S, V13.4S, #2
+
LD1 {V4.4S}, [X1], #16
- SQSHL V9.4S, V9.4S, #2
- SSHR V13.4S, V13.4S, #16
+
SUBS X5, X5, #8
- SSHR V9.4S, V9.4S, #16
- UZP1 V26.8H, V13.8H, V13.8H
- UZP1 V18.8H, V9.8H, V9.8H
BGT LOOP_1
- ST1 {V26.H}[0], [X11], X4
+ ST1 {V13.S}[0], [X11], X4
UMULL V15.4S, V7.4H, V2.4H
- ST1 {V26.H}[1], [X11], X4
+ ST1 {V13.S}[1], [X11], X4
UMULL V12.4s, V1.4H, V3.4H
- ST1 {V26.H}[2], [X11], X4
+ ST1 {V13.S}[2], [X11], X4
USHR V15.4S, V15.4S, #16
- ST1 {V26.H}[3], [X11], X4
+ ST1 {V13.S}[3], [X11], X4
USHR V12.4S, V12.4S, #16
- ST1 {V18.H}[0], [X6], X9
+ ST1 {V9.S}[0], [X6], X9
SMLAL V15.4S, V6.4H, V2.4H
- ST1 {V18.H}[1], [X6], X9
+ ST1 {V9.S}[1], [X6], X9
SMLAL V12.4S, V0.4H, V3.4H
- ST1 {V18.H}[2], [X6], X9
+ ST1 {V9.S}[2], [X6], X9
SQSHL V15.4S, V15.4S, V11.4S
- ST1 {V18.H}[3], [X6], X9
+ ST1 {V9.S}[3], [X6], X9
SQSHL V12.4S, V12.4S, V11.4S
@@ -303,28 +279,20 @@ LOOP_1:
SQXTN2 V28.4S, V29.2D
MOV V8.16B, V28.16B
- SQADD V14.4S, V14.4S, V10.4S
- SQADD V8.4S, V8.4S, V10.4S
+
SQSUB V13.4S, V15.4S, V14.4S
SQSUB V9.4S, V12.4S, V8.4S
- SQSHL V13.4S, V13.4S, #2
- SQSHL V9.4S, V9.4S, #2
- SSHR V13.4S, V13.4S, #16
- SSHR V9.4S, V9.4S, #16
- UZP1 V26.8H, V13.8H, V13.8H
-
- UZP1 V18.8H, V9.8H, V9.8H
- ST1 {V26.H}[0], [X11], X4
- ST1 {V26.H}[1], [X11], X4
- ST1 {V26.H}[2], [X11], X4
- ST1 {V26.H}[3], [X11], X4
+ ST1 {V13.S}[0], [X11], X4
+ ST1 {V13.S}[1], [X11], X4
+ ST1 {V13.S}[2], [X11], X4
+ ST1 {V13.S}[3], [X11], X4
- ST1 {V18.H}[0], [X6], X9
- ST1 {V18.H}[1], [X6], X9
- ST1 {V18.H}[2], [X6], X9
- ST1 {V18.H}[3], [X6], X9
+ ST1 {V9.S}[0], [X6], X9
+ ST1 {V9.S}[1], [X6], X9
+ ST1 {V9.S}[2], [X6], X9
+ ST1 {V9.S}[3], [X6], X9
pop_v_regs
RET
diff --git a/decoder/armv8/ixheaacd_post_twiddle_overlap.s b/decoder/armv8/ixheaacd_post_twiddle_overlap.s
index b8ee331..f05e6e4 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
@@ -48,18 +48,18 @@
ixheaacd_post_twid_overlap_add_armv8:
// STMFD sp!, {x4-x12}
- push_v_regs
- //stp x19, x20,[sp,#-16]!
+ push_v_regs
+ //stp x19, x20,[sp,#-16]!
//VPUSH {d8 - d15}
//LDR w4, [sp, #100]
- //sxtw x4,w4
+ //sxtw x4,w4
//LDR w5, [sp, #104]
- //sxtw x5,w5
+ //sxtw x5,w5
//LDR w6, [sp, #108]
- //sxtw x6,w6
- MOV x16, x5
- MOV x17, x7
+ //sxtw x6,w6
+ MOV x16, x5
+ MOV x17, x7
LSL x9, x3, #2
ASR x9, x9, #1
ADD x6, x6, x9
@@ -71,141 +71,141 @@ ixheaacd_post_twid_overlap_add_armv8:
- 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, #0x00, 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
+ //sxtw x8,w8
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 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
-
- SUB x8, x12, x11
+ 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
ADD x5, x5, #1
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
-
- ADD x8, x8, x10
+ 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
- MVN x8, x8
+ 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]
- //sxtw x8,w8
- MOV v1.s[0], w26
- MOV v2.s[0], w5
+ // LDR w8, [sp, #120]
+ //sxtw x8,w8
+ 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]
- ASR w5, w5, w9
+ 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
+ ADDS x8, x20, #0
+ BGE NEXT2
+ CMN x8, #1
NEXT2:
MOV x20, #0x80000000
- csel x7, x20, x7, LT
+ csel x7, x20, x7,LT
MOV x20, #0x7fffffff
- csel x7, x20, x7, GT
- LSL x20, x7, x11
- csel x7, x20, x7, EQ
+ 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
+ SUB x9, x11, #31
+ negs x9,x9
+ ASR x20, x12, x9
//MOV x8, x20
- ADDS x8, x20, #0
- BGE NEXT3
- CMN x8, #1
+ ADDS x8, x20, #0
+ BGE NEXT3
+ CMN x8, #1
NEXT3:
MOV x20, #0x80000000
- csel x12, x20, x12, LT
+ csel x12, x20, x12,LT
MOV x20, #0x7fffffff
- csel x12, x20, x12, GT
- LSL x20, x12, x11
- csel x12, x20, x12, EQ
+ 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 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
+ //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
+ 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
- //sxtw x7,w7
- LSL x10, x7, #1
+ MOV x7, x17
+ //sxtw x7,w7
+ LSL x10, x7, #2
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.S}[1],[x0], x9
+ ST1 {V8.S}[0],[x5], x10
MOV x8, x1
@@ -311,1723 +311,1568 @@ PROLOGUE_NEON:
ASR x3, x3, #2
SUB x3, x3, #2
- 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 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]
+ 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]
- //VUZP.16 D2, D3
+ //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]
+ 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]
//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]
+ 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]
- 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]
+ 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]
- 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]
+ 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]
- 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]
+ 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]
- 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]
+ 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]
// 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]
+ 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]
- 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
+ //sxtw x11,w11
+ MOV w11, w26
+ dup v14.4s,w11
+ SQADD v28.4s, v28.4s , v14.4s
//LDR w11, [sp, #116]
- MOV w11, w25
- //sxtw x11,w11
- dup v0.4s, w11
- sQshL v28.4s, v28.4s, v0.4s
+ MOV w11, w25
+ //sxtw x11,w11
+ 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]
+ 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]
// 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]
+ 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]
- 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]
+ 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]
// 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]
+ 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]
- 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
+ //sxtw x11,w11
+ 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
+ //sxtw x11,w11
+ 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]
+ 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]
// 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]
+ 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
+ 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]
+ 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]
// 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]
+ 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]
- 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
-// 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]
- 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]
- sQshL v6.4s, v6.4s, #2
+ 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 V14.16B , V4.16B
-// VUZP.16 D12, D13
+ rev64 v10.8h, v10.8h
+ MOV v11.d[0], v10.d[1]
- 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]
- SQADD v14.4s, v4.4s , v20.4s
+ rev64 v12.8h, v12.8h
+ MOV v13.d[0], v12.d[1]
- rev64 v10.8h, v10.8h
- MOV v11.d[0], v10.d[1]
- SQADD v6.4s, v6.4s , v20.4s
+ sQshL v8.4s, v8.4s, v16.4s
- rev64 v12.8h, v12.8h
- MOV v13.d[0], v12.d[1]
- sshR v14.4s, v14.4s, #16
+ MOV V31.16B, V6.16B
+ LD2 { v4.4s, v5.4s}, [x8]
+ ADD x8, x8,#32
-// VUZP.16 D14, D15
+ MOV v6.16b, v5.16b
+ sQshL v30.4s, v30.4s, v16.4s
+
+// VUZP.16 D4, D5
- 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]
+ 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]
- sshR v6.4s, v6.4s, #16
+ 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 v15.8b, v6.8b
- sQshL v8.4s, v8.4s, v16.4s
+ 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]
- LD2 { v4.4s, v5.4s}, [x8]
- ADD x8, x8, #32
- MOV v6.16b, v5.16b
- sQshL v30.4s, v30.4s, v16.4s
+ SQSUB v22.4s, v30.4s , v22.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 V30.16B, V8.16B
- SQSUB v8.4s, v8.4s , v24.4s
+ LD2 {v8.4h, v9.4h}, [x2]
+ ADD x2, x2, #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]
+CORE_LOOP:
+ ST1 {V14.S}[0], [x0]
+ ADD x0, x0, x9
+ ST1 {V22.S}[0], [x0]
+ ADD x0, x0, x9
- SQSUB v22.4s, v30.4s , v22.4s
- sQshL v30.4s, v8.4s, #2
+ ST1 {V14.S}[1], [x0]
+ ADD x0, x0, x9
- 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
+ ST1 {V22.S}[1], [x0]
+ ADD x0, x0, x9
- sshR v30.4s, v30.4s, #16
-// VUZP.16 D30, D31
+ ST1 {V14.S}[2], [x0]
+ ADD x0, x0, x9
- 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]
- sshR v22.4s, v22.4s, #16
+ ST1 {V22.S}[2], [x0]
+ ADD x0, x0, x9
-// VUZP.16 D22, D23
+ ST1 {V14.S}[3], [x0]
+ ADD x0, x0, x9
- 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]
+ ST1 {V22.S}[3], [x0]
+ ADD x0, x0, x9
- mov v23.8b, v30.8b
-CORE_LOOP:
- ST1 {v14.h}[0], [x0]
- ADD x0, x0, x9
- uMULL v30.4s, v0.4h, v9.4h
+ ST1 {V31.S}[0], [x5]
+ ADD x5, x5, x10
- 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 {V30.S}[0], [x5]
+ ADD x5, x5, x10
- 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 {V31.S}[1], [x5]
+ ADD x5, x5, x10
- 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 {V30.S}[1], [x5]
+ ADD x5, x5, x10
- 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 {V31.S}[2], [x5]
+ ADD x5, x5, x10
- 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 {V30.S}[2], [x5]
+ ADD x5, x5, x10
- 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 {V31.S}[3], [x5]
+ ADD x5, x5, x10
- ST1 {v23.h}[2], [x5]
- ADD x5, x5, x10
- NEG v30.4s, v30.4s
+ ST1 {V30.S}[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
+ 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
+ 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
+ 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
+ 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]
+ 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]
// 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]
+ 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]
- 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
+ //sxtw x11,w11
+ 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
+ //sxtw x11,w11
+ 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]
+ 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]
// 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]
+ 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]
- 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]
+ 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]
// 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]
+ 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]
- 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
+ //sxtw x11,w11
+ 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]
+ //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]
// 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
- 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
+ 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
//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]
+ 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]
- 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]
+ 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]
// 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]
+ 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]
+
+ 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
- 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
- UZP2 v21.8h, v10.8h, v10.8h
- MOV v10.d[0], v19.d[0]
- MOV v10.d[1], v21.d[0]
+ 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]
+
- 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]
+ 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]
- 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
+ MOV V14.16B, V4.16B
- rev64 v12.8h, v12.8h
- MOV v13.d[0], v12.d[1]
- sshR v14.4s, v14.4s, #16
+ rev64 v10.8h, v10.8h
+ MOV v11.d[0], v10.d[1]
-// 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]
+ rev64 v12.8h, v12.8h
+ MOV v13.d[0], v12.d[1]
+ sQshL v8.4s, v8.4s, v16.4s
- sshR v6.4s, v6.4s, #16
+ LD2 { v4.4s, v5.4s}, [x8]
+ ADD x8, x8, #32
-// VUZP.16 D6, D7
+ MOV V31.16B, V6.16B
+ MOV v6.16b, v5.16b
- 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]
+ sQshL v30.4s, v30.4s, v16.4s
- mov v15.8b, v6.8b
- sQshL v8.4s, v8.4s, v16.4s
+ 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]
- LD2 { v4.4s, v5.4s}, [x8]
- ADD x8, x8, #32
- MOV v6.16b, v5.16b
- sQshL v30.4s, v30.4s, v16.4s
+ SQSUB v8.4s, v8.4s , v24.4s
-// VUZP.16 D4, D5
+// VUZP.16 D6, D7
- 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]
+ 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]
+ SQSUB v22.4s, v30.4s , v22.4s
- SQSUB v8.4s, v8.4s , v24.4s
+ MOV V30.16B , V8.16B
-// VUZP.16 D6, D7
+ LD2 {v8.4h, v9.4h}, [x2]
+ ADD x2, x2,#16
- 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]
- SQSUB v22.4s, v30.4s , v22.4s
- sQshL v30.4s, v8.4s, #2
+ SUBS x3, x3, #1
+ BNE CORE_LOOP
- 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
- 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]
+EPILOGUE:
+ ST1 {V14.S}[0],[x0]
+ ADD x0, x0, x9
- sshR v22.4s, v22.4s, #16
+ ST1 {V22.S}[0],[x0]
+ ADD x0, x0, x9
-// 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]
+ ST1 {V14.S}[1],[x0]
+ ADD x0, x0, x9
- mov v23.8b, v30.8b
- SUBS x3, x3, #1
- BNE CORE_LOOP
+ ST1 {V22.S}[1],[x0]
+ ADD x0, x0, x9
+ ST1 {V14.S}[2],[x0]
+ ADD x0, x0, x9
+ ST1 {V22.S}[2],[x0]
+ ADD x0, x0, x9
+
+
+ ST1 {V14.S}[3],[x0]
+ ADD x0, x0, x9
-EPILOGUE:
- ST1 {v14.h}[0], [x0]
- ADD x0, x0, x9
- uMULL v30.4s, v0.4h, v9.4h
+ ST1 {V22.S}[3],[x0]
+ ADD x0, x0, x9
- 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 {V31.S}[0],[x5]
+ ADD x5, x5, x10
- 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 {V30.S}[0],[x5]
+ ADD x5, x5, x10
- 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 {V31.S}[1],[x5]
+ ADD x5, x5, x10
- 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 {V30.S}[1],[x5]
+ ADD x5, x5, x10
- 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 {V31.S}[2],[x5]
+ ADD x5, x5, x10
- 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 {V30.S}[2],[x5]
+ ADD x5, x5, x10
- ST1 {v23.h}[2], [x5]
- ADD x5, x5, x10
- NEG v30.4s, v30.4s
- ST1 {v15.h}[3], [x5]
- ADD x5, x5, x10
+ ST1 {V31.S}[3],[x5]
+ ADD x5, x5, x10
- ST1 {v23.h}[3], [x5]
- ADD x5, x5, x10
- SUB v28.4s, v24.4s , v26.4s
+ ST1 {V30.S}[3],[x5]
+ ADD x5, x5, x10
- uMULL v22.4s, v4.4h, v8.4h
- mov v26.16b, v30.16b
- mov v24.16b, v28.16b
+ 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
+ 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
+ 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
+ SUB v28.4s, v24.4s , v26.4s
- 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
//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]
+ 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]
// 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]
+ 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]
- 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
+ //sxtw x11,w11
+ 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
+ //sxtw x11,w11
+ 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]
+ 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]
// 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]
+ 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]
- 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]
+ 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]
// 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]
+ 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]
- 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
+ //sxtw x11,w11
+ 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
+ //sxtw x11,w11
+ 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]
+ 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]
-// 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]
+ 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
+ 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]
-
- 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
-
- ushR v8.4s, v8.4s, #16
-
- ushR v30.4s, v30.4s, #16
-
- sMLAL v8.4s, v27.4h, v11.4h
-
- sMLAL v30.4s, v15.4h, v10.4h
-
- sQshL v4.4s, v4.4s, #2
-
- sQshL v6.4s, v6.4s, #2
-
- SQADD v14.4s, v4.4s , v20.4s
+ SADDL v0.4s, v11.4h, v1.4h
+ MOV v1.d[0], v0.d[1]
- SQADD v6.4s, v6.4s , v20.4s
+ 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]
- sshR v14.4s, v14.4s, #16
+ uMULL v8.4s, v26.4h, v11.4h
+ uMULL v30.4s, v14.4h, v10.4h
-// 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]
+ ushR v8.4s, v8.4s,#16
- sshR v6.4s, v6.4s, #16
+ ushR v30.4s, v30.4s,#16
-// VUZP.16 D6, D7
+ sMLAL v8.4s, v27.4h, v11.4h
- 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]
+ sMLAL v30.4s, v15.4h, v10.4h
- mov v15.8b, v6.8b
- sQshL v8.4s, v8.4s, v16.4s
- sQshL v30.4s, v30.4s, v16.4s
+ MOV V14.16B, V4.16B
- SQSUB v8.4s, v8.4s , v24.4s
- SQSUB v22.4s, v30.4s , v22.4s
+ sQshL v8.4s, v8.4s, v16.4s
- sQshL v30.4s, v8.4s, #2
+ sQshL v30.4s, v30.4s, v16.4s
- sQshL v22.4s, v22.4s, #2
+ SQSUB v8.4s, v8.4s , v24.4s
- SQADD v30.4s, v30.4s , v20.4s
- SQADD v22.4s, v22.4s , v20.4s
+ SQSUB v22.4s, v30.4s , v22.4s
- sshR v30.4s, v30.4s, #16
+ MOV V30.16B , V8.16B
- //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]
- 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
+ ST1 {V14.S}[0],[x0]
+ ADD x0, x0, x9
+ ST1 {V22.S}[0],[x0]
+ ADD x0, x0, x9
+ ST1 {V14.S}[1],[x0]
+ ADD x0, x0, x9
+ ST1 {V22.S}[1],[x0]
+ ADD x0, x0, x9
+ ST1 {V14.S}[2],[x0]
+ ADD x0, x0, x9
+ ST1 {V22.S}[2],[x0]
+ ADD x0, x0, x9
+ ST1 {V14.S}[3],[x0]
+ ADD x0, x0, x9
+ ST1 {V22.S}[3],[x0]
+ ADD x0, x0, x9
+ ST1 {V6.S}[0],[x5]
+ ADD x5, x5, x10
+ ST1 {V30.S}[0],[x5]
+ ADD x5, x5, x10
+ ST1 {V6.S}[1],[x5]
+ ADD x5, x5, x10
+ ST1 {V30.S}[1],[x5]
+ ADD x5, x5, x10
+ ST1 {V6.S}[2],[x5]
+ ADD x5, x5, x10
+ ST1 {V30.S}[2],[x5]
+ ADD x5, x5, x10
+ ST1 {V6.S}[3],[x5]
+ ADD x5, x5, x10
+ ST1 {V30.S}[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]
+ 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]
- //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]
+ //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]
- 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]
+ 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]
// 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]
+ 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]
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]
+ 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]
- //VUZP.16 D12, D13
+ //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]
+ 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]
- 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]
+ 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]
//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]
+ 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]
- 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
+ //sxtw x11,w11
+ 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
+ //sxtw x11,w11
+ 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]
+ 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]
-// 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]
+ 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]
- 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]
+ 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]
// 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]
+ 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]
- 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
+ //sxtw x11,w11
+ 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
+ //sxtw x11,w11
+ 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]
+ 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
+ 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
+ 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]
+ 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]
-// 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]
+ 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
+ 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
+ MOV V14.16B , V4.16B
- sQshL v6.4s, v6.4s, #2
+ //mov v15.8b, v6.8b
+ sQshL v8.4s, v8.4s, v16.4s
- SQADD v14.4s, v4.4s , v20.4s
+ sQshL v30.4s, v30.4s, v16.4s
- SQADD v6.4s, v6.4s , v20.4s
+ SQSUB v8.4s, v8.4s , v24.4s
- sshR v14.4s, v14.4s, #16
-
-// VUZP.16 D14, D15
+ SQSUB v22.4s, v30.4s , v22.4s
- 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 V30.16B, V8.16B
- 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 v15.8b, v6.8b
- sQshL v8.4s, v8.4s, v16.4s
- sQshL v30.4s, v30.4s, v16.4s
- SQSUB v8.4s, v8.4s , v24.4s
- SQSUB v22.4s, v30.4s , v22.4s
+ ST1 {V14.S}[0],[x0]
+ ADD x0, x0, x9
+ ST1 {V22.S}[0],[x0]
+ ADD x0, x0, x9
+ ST1 {V14.S}[1],[x0]
+ ADD x0, x0, x9
+ ST1 {V22.S}[1],[x0]
+ ADD x0, x0, x9
+ ST1 {V14.S}[2],[x0]
+ ADD x0, x0, x9
+ ST1 {V22.S}[2],[x0]
+ ADD x0, x0, x9
+ ST1 {V14.S}[3],[x0]
+ ADD x0, x0, x9
- sQshL v30.4s, v8.4s, #2
+ ST1 {V6.S}[0],[x5]
+ ADD x5, x5, x10
+ ST1 {V30.S}[0],[x5]
+ ADD x5, x5, x10
+ ST1 {V6.S}[1],[x5]
+ ADD x5, x5, x10
+ ST1 {V30.S}[1],[x5]
+ ADD x5, x5, x10
+ ST1 {V6.S}[2],[x5]
+ ADD x5, x5, x10
+ ST1 {V30.S}[2],[x5]
+ ADD x5, x5, x10
+ ST1 {V6.S}[3],[x5]
+ ADD x5, x5, x10
- sQshL v22.4s, v22.4s, #2
+ pop_v_regs
+ ret
- SQADD v30.4s, v30.4s , v20.4s
- SQADD v22.4s, v22.4s , v20.4s
-
- 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]
-
- 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}
- // LDMFD sp!, {x4-x12}
- //ldp x19, x20,[sp],#16
- pop_v_regs
- ret
- //BX x14
diff --git a/decoder/drc_src/impd_drc_api.c b/decoder/drc_src/impd_drc_api.c
index 62df69b..7121a71 100644
--- a/decoder/drc_src/impd_drc_api.c
+++ b/decoder/drc_src/impd_drc_api.c
@@ -19,7 +19,6 @@
*/
#include <string.h>
#include <stdlib.h>
-
#include "impd_type_def.h"
#include "impd_error_standards.h"
#include "impd_apicmd_standards.h"
@@ -108,6 +107,8 @@ IA_ERRORCODE ia_drc_dec_api(pVOID p_ia_drc_dec_obj, WORD32 i_cmd, WORD32 i_idx,
pUWORD32 pus_value = pv_value;
pWORD8 pb_value = pv_value;
SIZE_T *ps_value = pv_value;
+ pWORD32 pi_value = pv_value;
+ float *pf_value = pv_value;
switch (i_cmd) {
case IA_API_CMD_GET_MEM_INFO_SIZE:
@@ -269,6 +270,15 @@ IA_ERRORCODE ia_drc_dec_api(pVOID p_ia_drc_dec_obj, WORD32 i_cmd, WORD32 i_idx,
*ps_value = (SIZE_T)p_obj_drc->str_payload.pstr_drc_sel_proc_output;
break;
}
+ case IA_DRC_DEC_CONFIG_DRC_TARGET_LOUDNESS: {
+ *pi_value = p_obj_drc->str_payload.pstr_loudness_info->loudness_info
+ ->loudness_measure->method_val;
+ if (*pi_value < -1)
+ *pi_value = *pi_value * -4;
+ else
+ *pi_value = -1;
+ break;
+ }
}
break;
}
@@ -335,7 +345,18 @@ IA_ERRORCODE ia_drc_dec_api(pVOID p_ia_drc_dec_obj, WORD32 i_cmd, WORD32 i_idx,
p_obj_drc->str_config.loud_norm_flag = *pus_value;
break;
}
-
+ case IA_DRC_DEC_CONFIG_DRC_ALBUM_MODE: {
+ p_obj_drc->str_config.album_mode = *pus_value;
+ break;
+ }
+ case IA_DRC_DEC_CONFIG_DRC_BOOST: {
+ p_obj_drc->str_config.boost = (*pf_value);
+ break;
+ }
+ case IA_DRC_DEC_CONFIG_DRC_COMPRESS: {
+ p_obj_drc->str_config.compress = (*pf_value);
+ break;
+ }
default: { return -1; }
}
break;
diff --git a/decoder/drc_src/impd_drc_api_struct_def.h b/decoder/drc_src/impd_drc_api_struct_def.h
index 6c2734a..265a82f 100644
--- a/decoder/drc_src/impd_drc_api_struct_def.h
+++ b/decoder/drc_src/impd_drc_api_struct_def.h
@@ -55,6 +55,9 @@ typedef struct ia_drc_config_struct {
WORD32 effect_type;
WORD32 target_loudness;
WORD32 loud_norm_flag;
+ WORD32 album_mode;
+ FLOAT32 boost;
+ FLOAT32 compress;
} ia_drc_config_struct;
diff --git a/decoder/drc_src/impd_drc_config_params.h b/decoder/drc_src/impd_drc_config_params.h
index e83385a..13a79ec 100644
--- a/decoder/drc_src/impd_drc_config_params.h
+++ b/decoder/drc_src/impd_drc_config_params.h
@@ -41,4 +41,7 @@
#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_DRC_ALBUM_MODE 0x0014
+#define IA_DRC_DEC_CONFIG_DRC_BOOST 0x0015
+#define IA_DRC_DEC_CONFIG_DRC_COMPRESS 0x0016
#endif
diff --git a/decoder/drc_src/impd_drc_init.c b/decoder/drc_src/impd_drc_init.c
index 6a41fc0..fa8578e 100644
--- a/decoder/drc_src/impd_drc_init.c
+++ b/decoder/drc_src/impd_drc_init.c
@@ -59,7 +59,8 @@ impd_drc_dec_interface_process(ia_bit_buf_struct *it_bit_buff,
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 target_loudness, WORD32 loud_norm, WORD32 album_mode, FLOAT32 boost,
+ FLOAT32 compress);
#define BITSTREAM_FILE_FORMAT_SPLIT 1
#define LIM_DEFAULT_THRESHOLD (0.89125094f)
@@ -111,6 +112,7 @@ IA_ERRORCODE impd_drc_set_default_config(ia_drc_api_struct *p_obj_drc) {
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_config.album_mode = 0;
memset(&p_obj_drc->str_bit_handler, 0, sizeof(p_obj_drc->str_bit_handler));
return IA_NO_ERROR;
@@ -411,7 +413,8 @@ IA_ERRORCODE impd_drc_init(ia_drc_api_struct *p_obj_drc) {
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);
+ p_obj_drc->str_config.loud_norm_flag, p_obj_drc->str_config.album_mode,
+ p_obj_drc->str_config.boost, p_obj_drc->str_config.compress);
if (err_code != IA_NO_ERROR) return err_code;
@@ -454,6 +457,16 @@ IA_ERRORCODE impd_drc_init(ia_drc_api_struct *p_obj_drc) {
p_obj_drc->str_bit_handler.num_bytes_bs_loudness_info);
if (err_code != IA_NO_ERROR) return err_code;
+ if (p_obj_drc->str_payload.pstr_loudness_info->loudness_info
+ ->anchor_loudness_present)
+ p_obj_drc->str_payload.pstr_selection_proc->uni_drc_sel_proc_params
+ .loudness_measurement_method = METHOD_DEFINITION_ANCHOR_LOUDNESS;
+
+ if (p_obj_drc->str_payload.pstr_loudness_info->loudness_info
+ ->expert_loudness_present)
+ p_obj_drc->str_payload.pstr_selection_proc->uni_drc_sel_proc_params
+ .loudness_measurement_system = USER_MEASUREMENT_SYSTEM_EXPERT_PANEL;
+
err_code = impd_drc_uni_sel_proc_process(
p_obj_drc->str_payload.pstr_selection_proc,
p_obj_drc->str_payload.pstr_drc_config,
diff --git a/decoder/drc_src/impd_drc_interface_decoder.c b/decoder/drc_src/impd_drc_interface_decoder.c
index 4e0301c..557ea2f 100644
--- a/decoder/drc_src/impd_drc_interface_decoder.c
+++ b/decoder/drc_src/impd_drc_interface_decoder.c
@@ -23,7 +23,6 @@
#include <assert.h>
#include <string.h>
#include "impd_type_def.h"
-
#include "impd_drc_bitbuffer.h"
#include "impd_drc_common.h"
#include "impd_drc_interface.h"
@@ -32,7 +31,8 @@
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 target_loudness, WORD32 loud_norm, WORD32 album_mode, FLOAT32 boost,
+ FLOAT32 compress) {
WORD32 err = 0;
WORD32 i = 0;
@@ -67,7 +67,7 @@ impd_drc_dec_interface_add_effect_type(
(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.album_mode = album_mode;
pstr_drc_interface->loudness_norm_param_interface.peak_limiter = 0;
pstr_drc_interface->loudness_norm_param_interface
.change_loudness_deviation_max = 1;
@@ -138,8 +138,8 @@ impd_drc_dec_interface_add_effect_type(
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.compress = compress;
+ pstr_drc_interface->drc_parameter_interface.boost = boost;
pstr_drc_interface->drc_parameter_interface
.change_drc_characteristic_target = 1;
pstr_drc_interface->drc_parameter_interface.drc_characteristic_target = 0;
diff --git a/decoder/drc_src/impd_drc_static_payload.c b/decoder/drc_src/impd_drc_static_payload.c
index e389c24..3ad9562 100644
--- a/decoder/drc_src/impd_drc_static_payload.c
+++ b/decoder/drc_src/impd_drc_static_payload.c
@@ -2477,6 +2477,15 @@ impd_parse_loudness_info(ia_bit_buf_struct* it_bit_buff, WORD32 version,
for (i = 0; i < loudness_info->measurement_count; i++) {
err = impd_parse_loudness_measure(it_bit_buff,
&(loudness_info->loudness_measure[i]));
+
+ if (loudness_info->loudness_measure[i].method_def ==
+ METHOD_DEFINITION_ANCHOR_LOUDNESS)
+ loudness_info->anchor_loudness_present = 1;
+
+ if (loudness_info->loudness_measure[i].measurement_system ==
+ MEASUREMENT_SYSTEM_EXPERT_PANEL)
+ loudness_info->expert_loudness_present = 1;
+
if (err) return (err);
}
diff --git a/decoder/drc_src/impd_drc_struct.h b/decoder/drc_src/impd_drc_struct.h
index 16e2191..5aa7e30 100644
--- a/decoder/drc_src/impd_drc_struct.h
+++ b/decoder/drc_src/impd_drc_struct.h
@@ -444,6 +444,8 @@ typedef struct {
WORD32 true_peak_level_measurement_system; /* Parsed but unused */
WORD32 true_peak_level_reliability; /* Parsed but unused */
WORD32 measurement_count;
+ WORD32 anchor_loudness_present;
+ WORD32 expert_loudness_present;
ia_loudness_measure_struct loudness_measure[MEASUREMENT_COUNT_MAX];
} ia_loudness_info_struct;
diff --git a/decoder/generic/ixheaacd_function_selector_generic.c b/decoder/generic/ixheaacd_function_selector_generic.c
index b6c34a5..9354159 100644
--- a/decoder/generic/ixheaacd_function_selector_generic.c
+++ b/decoder/generic/ixheaacd_function_selector_generic.c
@@ -194,18 +194,6 @@ VOID(*ixheaacd_complex_fft_p2)
(WORD32 *xr, WORD32 *xi, WORD32 nlength, WORD32 fft_mode,
WORD32 *preshift) = &ixheaacd_complex_fft_p2_dec;
-VOID(*ixheaacd_mps_complex_fft_64)
-(WORD32 *ptr_x, WORD32 *fin_re, WORD32 *fin_im,
- WORD32 nlength) = &ixheaacd_mps_complex_fft_64_dec;
-
-VOID(*ixheaacd_mps_synt_pre_twiddle)
-(WORD32 *ptr_in, const WORD32 *table_re, const WORD32 *table_im,
- WORD32 resolution) = &ixheaacd_mps_synt_pre_twiddle_dec;
-
-VOID(*ixheaacd_mps_synt_post_twiddle)
-(WORD32 *ptr_in, const WORD32 *table_re, const WORD32 *table_im,
- WORD32 resolution) = &ixheaacd_mps_synt_post_twiddle_dec;
-
VOID(*ixheaacd_calc_pre_twid)
(WORD32 *ptr_x, WORD32 *r_ptr, WORD32 *i_ptr, WORD32 nlength,
const WORD32 *cos_ptr, const WORD32 *sin_ptr) = &ixheaacd_calc_pre_twid_dec;
@@ -214,14 +202,10 @@ VOID(*ixheaacd_calc_post_twid)
(WORD32 *ptr_x, WORD32 *r_ptr, WORD32 *i_ptr, WORD32 nlength,
const WORD32 *cos_ptr, const WORD32 *sin_ptr) = &ixheaacd_calc_post_twid_dec;
-VOID(*ixheaacd_mps_synt_post_fft_twiddle)
-(WORD32 resolution, WORD32 *fin_re, WORD32 *fin_im, const WORD32 *table_re,
- const WORD32 *table_im,
- WORD32 *state) = &ixheaacd_mps_synt_post_fft_twiddle_dec;
VOID(*ixheaacd_mps_synt_out_calc)
-(WORD32 resolution, WORD32 *out, WORD32 *state,
- const WORD32 *filter_coeff) = &ixheaacd_mps_synt_out_calc_dec;
+(WORD32 resolution, FLOAT32 *out, FLOAT32 *state,
+ const FLOAT32 *filter_coeff) = &ixheaacd_mps_synt_out_calc_dec;
VOID(*ixheaacd_fft_15_ld)
(WORD32 *inp, WORD32 *op, WORD32 *fft3out,
diff --git a/decoder/ixheaacd_aac_imdct.c b/decoder/ixheaacd_aac_imdct.c
index 43f2025..6b158de 100644
--- a/decoder/ixheaacd_aac_imdct.c
+++ b/decoder/ixheaacd_aac_imdct.c
@@ -467,14 +467,14 @@ VOID ixheaacd_post_twiddle_dec(WORD32 out_ptr[], WORD32 spec_data[],
}
VOID ixheaacd_post_twid_overlap_add_dec(
- WORD16 pcm_out[], WORD32 spec_data[],
+ WORD32 pcm_out[], WORD32 spec_data[],
ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD npoints,
WORD32 *ptr_overlap_buf, WORD16 q_shift, const WORD16 *window,
WORD16 ch_fac) {
WORD i;
WORD16 cos, cos1, sin, sin1;
WORD32 size = npoints / 2;
- WORD16 *pcmout1 = pcm_out + (ch_fac * size);
+ WORD32 *pcmout1 = pcm_out + (ch_fac * size);
const WORD16 *cos_sin_ptr = ptr_imdct_tables->cosine_array_2048_256;
pcm_out = pcmout1 - ch_fac;
@@ -511,7 +511,7 @@ VOID ixheaacd_post_twid_overlap_add_dec(
ixheaacd_shl32_sat(ixheaacd_mult32x16lin32(outi, win1), q_shift),
ixheaacd_mult32x16lin32_drc(overlap_data, (WORD16)(win1 >> 16)));
- *pcm_out = ixheaacd_round16(ixheaacd_shl32_sat(accu, 2));
+ *pcm_out = accu;
pcm_out -= ch_fac;
accu = ixheaacd_sub32_sat(
@@ -520,7 +520,7 @@ VOID ixheaacd_post_twid_overlap_add_dec(
q_shift),
ixheaacd_mult32x16lin32_drc(overlap_data, (WORD16)(win1)));
- *pcmout1 = ixheaacd_round16(ixheaacd_shl32_sat(accu, 2));
+ *pcmout1 = accu;
pcmout1 += ch_fac;
@@ -550,14 +550,16 @@ VOID ixheaacd_post_twid_overlap_add_dec(
accu = ixheaacd_sub32_sat(
ixheaacd_shl32_sat(ixheaacd_mult32x16lin32(outr, win1), q_shift),
ixheaacd_mult32x16lin32_drc(overlap_data, (WORD16)(win1 >> 16)));
- *pcm_out = ixheaacd_round16(ixheaacd_shl32_sat(accu, 2));
+
+ *pcm_out = accu;
pcm_out -= ch_fac;
accu = ixheaacd_sub32_sat(
ixheaacd_shl32_sat(
ixheaacd_mult32x16hin32_drc(ixheaacd_negate32(outr), win1),
q_shift),
ixheaacd_mult32x16lin32_drc(overlap_data, (WORD16)win1));
- *pcmout1 = ixheaacd_round16(ixheaacd_shl32_sat(accu, 2));
+
+ *pcmout1 = accu;
pcmout1 += ch_fac;
tempr = *(spec_data - i);
@@ -585,14 +587,15 @@ VOID ixheaacd_post_twid_overlap_add_dec(
accu = ixheaacd_sub32_sat(
ixheaacd_shl32_sat(ixheaacd_mult32x16lin32(outi, win1), q_shift),
ixheaacd_mult32x16lin32_drc(overlap_data, (WORD16)(win1 >> 16)));
- *pcm_out = ixheaacd_round16(ixheaacd_shl32_sat(accu, 2));
+
+ *pcm_out = accu;
pcm_out -= ch_fac;
accu = ixheaacd_sub32_sat(
ixheaacd_shl32_sat(
ixheaacd_mult32x16hin32_drc(ixheaacd_negate32(outi), win1),
q_shift),
ixheaacd_mult32x16lin32_drc(overlap_data, (WORD16)(win1)));
- *pcmout1 = ixheaacd_round16(ixheaacd_shl32_sat(accu, 2));
+ *pcmout1 = accu;
pcmout1 += ch_fac;
}
cos1 = *cos_sin_ptr++;
@@ -620,14 +623,16 @@ VOID ixheaacd_post_twid_overlap_add_dec(
accu = ixheaacd_sub32_sat(
ixheaacd_shl32_sat(ixheaacd_mult32x16lin32(outr, win1), q_shift),
ixheaacd_mult32x16lin32_drc(overlap_data, (WORD16)(win1 >> 16)));
- *pcm_out = ixheaacd_round16(ixheaacd_shl32_sat(accu, 2));
+
+ *pcm_out = accu;
pcm_out -= ch_fac;
accu = ixheaacd_sub32_sat(
ixheaacd_shl32_sat(
ixheaacd_mult32x16hin32_drc(ixheaacd_negate32(outr), win1),
q_shift),
ixheaacd_mult32x16lin32_drc(overlap_data, (WORD16)win1));
- *pcmout1 = ixheaacd_round16(ixheaacd_shl32_sat(accu, 2));
+
+ *pcmout1 = accu;
pcmout1 += ch_fac;
} else {
q_shift = -q_shift;
@@ -663,7 +668,7 @@ VOID ixheaacd_post_twid_overlap_add_dec(
ixheaacd_shr32(ixheaacd_mult32x16lin32(outi, win1), q_shift),
ixheaacd_mult32x16lin32_drc(overlap_data, (WORD16)(win1 >> 16)));
- *pcm_out = ixheaacd_round16(ixheaacd_shl32_sat(accu, 2));
+ *pcm_out = accu;
pcm_out -= ch_fac;
accu = ixheaacd_sub32_sat(
@@ -672,7 +677,7 @@ VOID ixheaacd_post_twid_overlap_add_dec(
q_shift),
ixheaacd_mult32x16lin32_drc(overlap_data, (WORD16)(win1)));
- *pcmout1 = ixheaacd_round16(ixheaacd_shl32_sat(accu, 2));
+ *pcmout1 = accu;
pcmout1 += ch_fac;
for (i = size - 2; i != 0;) {
@@ -701,14 +706,16 @@ VOID ixheaacd_post_twid_overlap_add_dec(
ixheaacd_shr32(ixheaacd_mult32x16lin32(outr, win1), q_shift),
ixheaacd_mult32x16lin32_drc(overlap_data, (WORD16)(win1 >> 16)));
- *pcm_out = ixheaacd_round16(ixheaacd_shl32_sat(accu, 2));
+ *pcm_out = accu;
pcm_out -= ch_fac;
+
accu = ixheaacd_sub32_sat(
ixheaacd_shr32(
ixheaacd_mult32x16hin32_drc(ixheaacd_negate32(outr), win1),
q_shift),
ixheaacd_mult32x16lin32_drc(overlap_data, (WORD16)win1));
- *pcmout1 = ixheaacd_round16(ixheaacd_shl32_sat(accu, 2));
+
+ *pcmout1 = accu;
pcmout1 += ch_fac;
tempr = *(spec_data - i);
@@ -735,15 +742,16 @@ VOID ixheaacd_post_twid_overlap_add_dec(
ixheaacd_shr32(ixheaacd_mult32x16lin32(outi, win1), q_shift),
ixheaacd_mult32x16lin32_drc(overlap_data, (WORD16)(win1 >> 16)));
- *pcm_out = ixheaacd_round16(ixheaacd_shl32_sat(accu, 2));
+ *pcm_out = accu;
pcm_out -= ch_fac;
+
accu = ixheaacd_sub32_sat(
ixheaacd_shr32(
ixheaacd_mult32x16hin32_drc(ixheaacd_negate32(outi), win1),
q_shift),
ixheaacd_mult32x16lin32_drc(overlap_data, (WORD16)(win1)));
- *pcmout1 = ixheaacd_round16(ixheaacd_shl32_sat(accu, 2));
+ *pcmout1 = accu;
pcmout1 += ch_fac;
}
cos1 = *cos_sin_ptr++;
@@ -773,14 +781,14 @@ VOID ixheaacd_post_twid_overlap_add_dec(
ixheaacd_shr32(ixheaacd_mult32x16lin32(outr, win1), q_shift),
ixheaacd_mult32x16lin32_drc(overlap_data, (WORD16)(win1 >> 16)));
- *pcm_out = ixheaacd_round16(ixheaacd_shl32_sat(accu, 2));
+ *pcm_out = accu;
pcm_out -= ch_fac;
accu = ixheaacd_sub32_sat(
ixheaacd_shr32(
ixheaacd_mult32x16hin32_drc(ixheaacd_negate32(outr), win1),
q_shift),
ixheaacd_mult32x16lin32_drc(overlap_data, (WORD16)win1));
- *pcmout1 = ixheaacd_round16(ixheaacd_shl32_sat(accu, 2));
+ *pcmout1 = accu;
pcmout1 += ch_fac;
}
}
diff --git a/decoder/ixheaacd_aac_imdct.h b/decoder/ixheaacd_aac_imdct.h
index d6dc58f..950eef9 100644
--- a/decoder/ixheaacd_aac_imdct.h
+++ b/decoder/ixheaacd_aac_imdct.h
@@ -38,19 +38,19 @@ VOID ixheaacd_post_twiddle_armv8(
ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD32 npoints);
VOID ixheaacd_post_twid_overlap_add_dec(
- WORD16 pcm_out[], WORD32 spec_data[],
+ WORD32 pcm_out[], WORD32 spec_data[],
ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD npoints,
WORD32 *ptr_overlap_buf, WORD16 q_shift, const WORD16 *window,
WORD16 ch_fac);
VOID ixheaacd_post_twid_overlap_add_armv7(
- WORD16 pcm_out[], WORD32 spec_data[],
+ WORD32 pcm_out[], WORD32 spec_data[],
ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD npoints,
WORD32 *ptr_overlap_buf, WORD16 q_shift, const WORD16 *window,
WORD16 ch_fac);
VOID ixheaacd_post_twid_overlap_add_armv8(
- WORD16 pcm_out[], WORD32 spec_data[],
+ WORD32 pcm_out[], WORD32 spec_data[],
ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD npoints,
WORD32 *ptr_overlap_buf, WORD16 q_shift, const WORD16 *window,
WORD16 ch_fac);
diff --git a/decoder/ixheaacd_aacdecoder.c b/decoder/ixheaacd_aacdecoder.c
index 6c26d2d..c9c1547 100644
--- a/decoder/ixheaacd_aacdecoder.c
+++ b/decoder/ixheaacd_aacdecoder.c
@@ -85,16 +85,18 @@
#define EXT_FILL_DATA 1
#define EXT_FIL 0
+#define MIN(x, y) ((x) > (y) ? (y) : (x))
+
WORD32 ixheaacd_aacdec_decodeframe(
ia_exhaacplus_dec_api_struct *p_obj_exhaacplus_dec,
- ia_aac_dec_scratch_struct *aac_scratch_ptrs, WORD16 *time_data,
+ ia_aac_dec_scratch_struct *aac_scratch_ptrs, VOID *time_data_tmp,
FLAG frame_status, WORD *type, WORD *ch_idx, WORD init_flag, WORD channel,
WORD *element_index_order, WORD skip_full_decode, WORD ch_fac,
WORD slot_element, WORD max_channels, WORD32 total_channels,
WORD32 frame_length, WORD32 frame_size, ia_drc_dec_struct *pstr_drc_dec,
WORD32 object_type, WORD32 ch_config,
ia_eld_specific_config_struct eld_specific_config, WORD16 adtsheader,
- ia_drc_dec_struct *drc_dummy)
+ ia_drc_dec_struct *drc_dummy, UWORD8 *slot_pos)
{
WORD ch, ele_type;
@@ -129,6 +131,8 @@ WORD32 ixheaacd_aacdec_decodeframe(
WORD32 *work_buffer_2 = aac_scratch_ptrs->extra_scr_4k[2];
p_state_enhaacplus_dec = p_obj_exhaacplus_dec->p_state_aac;
+ WORD32 *time_data = (WORD32 *)time_data_tmp;
+
aac_dec_handle = p_state_enhaacplus_dec->pstr_aac_dec_info[*ch_idx];
it_bit_buff = p_state_enhaacplus_dec->ptr_bit_stream;
@@ -810,8 +814,14 @@ WORD32 ixheaacd_aacdec_decodeframe(
if (skip_full_decode == 0) {
ixheaacd_imdct_process(
aac_dec_handle->pstr_aac_dec_overlap_info[ch], spec_coef[ch],
- &str_ics_info[ch], time_data + slot_element, (WORD16)ch_fac,
- scratch[ch], aac_dec_handle->pstr_aac_tables, object_type);
+ &str_ics_info[ch], time_data + slot_element, ch_fac, scratch[ch],
+ aac_dec_handle->pstr_aac_tables, object_type, slot_element);
+
+ if (slot_pos != NULL) *slot_pos = slot_element;
+
+ p_obj_exhaacplus_dec->p_state_aac
+ ->qshift_adj[p_obj_exhaacplus_dec->p_state_aac->qshift_cnt++] =
+ str_ics_info[ch].qshift_adj;
aac_dec_handle->ptr_aac_dec_static_channel_info[ch]
->overlap_add_data.win_shape = str_ics_info[ch].window_shape;
@@ -827,7 +837,7 @@ WORD32 ixheaacd_aacdec_decodeframe(
time_data + slot_element, overlap1,
aac_dec_handle->samples_per_frame, object_type,
(WORD16)ch_fac, str_ics_info[ch].window_sequence,
- (WORD16 *)ptr_long_window_next);
+ (WORD16 *)ptr_long_window_next, slot_element);
} else {
ixheaacd_lt_update_state(
aac_dec_handle->ptr_aac_dec_static_channel_info[ch]
@@ -835,7 +845,7 @@ WORD32 ixheaacd_aacdec_decodeframe(
time_data + slot_element, overlap1,
aac_dec_handle->samples_per_frame, object_type,
(WORD16)ch_fac, str_ics_info[ch].window_sequence,
- (WORD16 *)ptr_short_window_next);
+ (WORD16 *)ptr_short_window_next, slot_element);
}
}
}
diff --git a/decoder/ixheaacd_api.c b/decoder/ixheaacd_api.c
index 3a17d1d..8e9a2a6 100644
--- a/decoder/ixheaacd_api.c
+++ b/decoder/ixheaacd_api.c
@@ -119,6 +119,18 @@
#define IXHEAACD_CCE_DEC_INFO_MEM_SIZE (610)
#define IXHEAACD_CCE_DEC_INFO_MEM_SIZE_8 (IXHEAACD_CCE_DEC_INFO_MEM_SIZE + 8)
+#define LD_OBJ -2
+
+#define MIN(x, y) ((x) > (y) ? (y) : (x))
+
+WORD32 ixheaacd_peak_limiter_init(ia_peak_limiter_struct *peak_limiter,
+ UWORD32 num_channels, UWORD32 sample_rate,
+ FLOAT32 *buffer, UWORD32 *delay_in_samples);
+
+VOID ixheaacd_peak_limiter_process(ia_peak_limiter_struct *peak_limiter,
+ VOID *samples, UWORD32 frame_len,
+ WORD8 *qshift_adj);
+
IA_ERRORCODE ixheaacd_dec_mem_api(
ia_exhaacplus_dec_api_struct *p_obj_exhaacplus_dec, WORD32 i_cmd,
WORD32 i_idx, VOID *pv_value) {
@@ -277,11 +289,41 @@ static VOID ixheaacd_allocate_aac_scr(
VOID ixheaacd_allocate_sbr_scr(ia_sbr_scr_struct *sbr_scratch_struct,
VOID *base_scratch_ptr, VOID *output_ptr,
WORD total_elements, WORD ch_fac,
- WORD32 audio_object_type) {
+ WORD32 audio_object_type, WORD32 total_channels,
+ WORD8 *p_qshift_arr, UWORD8 slot_pos,
+ UWORD8 num_ch) {
WORD32 temp = 0;
+ WORD32 j, i;
sbr_scratch_struct->ptr_work_buf_core = base_scratch_ptr;
sbr_scratch_struct->ptr_work_buf = (WORD8 *)base_scratch_ptr + (18 * 1024);
+ if (p_qshift_arr != NULL && *p_qshift_arr != LD_OBJ) {
+ WORD32 *tmp_buf = (WORD32 *)output_ptr;
+
+ for (j = 1; j < num_ch; j++) {
+ if ((*p_qshift_arr + j) == 0)
+ *(p_qshift_arr + j) = *(p_qshift_arr + j - 1);
+ }
+
+ if (total_channels > 2) {
+ for (j = 0; j < num_ch; j++) {
+ for (i = 0; i < 1024; i++) {
+ *((WORD16 *)tmp_buf + slot_pos + total_channels * i + j) =
+ ixheaacd_round16(ixheaacd_shl32_sat(
+ *(tmp_buf + slot_pos + total_channels * i + j),
+ *(p_qshift_arr + j)));
+ }
+ }
+ } else {
+ for (j = 0; j < num_ch; j++) {
+ for (i = 0; i < 1024; i++) {
+ *((WORD16 *)tmp_buf + total_channels * i + j) =
+ ixheaacd_round16(ixheaacd_shl32_sat(
+ *(tmp_buf + total_channels * i + j), *(p_qshift_arr + j)));
+ }
+ }
+ }
+ }
if (total_elements > 1) {
sbr_scratch_struct->extra_scr_1k[0] =
(WORD8 *)base_scratch_ptr + (18 * 1024);
@@ -319,6 +361,7 @@ IA_ERRORCODE ixheaacd_dec_api(pVOID p_ia_enhaacplus_dec_obj, WORD32 i_cmd,
pWORD32 pui_value_signed = pv_value;
pWORD8 pb_value = pv_value;
pVOID *pp_value = (pVOID *)pv_value;
+ float *pf_value = pv_value;
if ((i_cmd != IA_API_CMD_GET_API_SIZE) &&
(i_cmd != IA_API_CMD_GET_LIB_ID_STRINGS)) {
@@ -406,6 +449,7 @@ IA_ERRORCODE ixheaacd_dec_api(pVOID p_ia_enhaacplus_dec_obj, WORD32 i_cmd,
p_obj_exhaacplus_dec->aac_config.ui_drc_target_level = 108;
p_obj_exhaacplus_dec->aac_config.ui_drc_set = 0;
p_obj_exhaacplus_dec->aac_config.ui_flush_cmd = 0;
+ p_obj_exhaacplus_dec->aac_config.output_level = -1;
p_obj_exhaacplus_dec->aac_config.ui_max_channels = 6;
@@ -558,28 +602,29 @@ IA_ERRORCODE ixheaacd_dec_api(pVOID p_ia_enhaacplus_dec_obj, WORD32 i_cmd,
}
case IA_ENHAACPLUS_DEC_CONFIG_PARAM_DRC_CUT: {
p_obj_exhaacplus_dec->aac_config.ui_drc_set = 1;
- if (*pui_value > 127) {
+ if (*pf_value > 1) {
p_obj_exhaacplus_dec->aac_config.ui_drc_cut = 0;
return (IA_ENHAACPLUS_DEC_CONFIG_NONFATAL_INVALID_DRC_CUT);
}
p_obj_exhaacplus_dec->aac_config.ui_drc_cut =
- (WORD32)((*pui_value / 127.0) * 100);
+ (WORD32)((*pf_value) * 100);
break;
}
case IA_ENHAACPLUS_DEC_CONFIG_PARAM_DRC_BOOST: {
p_obj_exhaacplus_dec->aac_config.ui_drc_set = 1;
- if (*pui_value > 127) {
+ if (*pf_value > 1) {
p_obj_exhaacplus_dec->aac_config.ui_drc_boost = 0;
return (IA_ENHAACPLUS_DEC_CONFIG_NONFATAL_INVALID_DRC_BOOST);
}
p_obj_exhaacplus_dec->aac_config.ui_drc_boost =
- (WORD32)((*pui_value / 127.0) * 100);
+ (WORD32)((*pf_value) * 100);
break;
}
case IA_ENHAACPLUS_DEC_CONFIG_PARAM_DRC_TARGET_LEVEL: {
p_obj_exhaacplus_dec->aac_config.ui_drc_set = 1;
+ p_obj_exhaacplus_dec->aac_config.i_loud_ref_level = *pui_value_signed;
if (*pui_value > 127) {
p_obj_exhaacplus_dec->aac_config.ui_drc_target_level = 108;
return (IA_ENHAACPLUS_DEC_CONFIG_NONFATAL_INVALID_DRC_TARGET);
@@ -815,6 +860,10 @@ IA_ERRORCODE ixheaacd_dec_api(pVOID p_ia_enhaacplus_dec_obj, WORD32 i_cmd,
(IA_ENHAACPDEC_NUM_MEMTABS);
break;
}
+ case IA_API_CMD_GET_LOUDNESS_VAL: {
+ *pui_value = p_obj_exhaacplus_dec->aac_config.output_level;
+ break;
+ }
case IA_API_CMD_SET_MEMTABS_PTR: {
if (pv_value == NULL) return IA_ENHAACPLUS_DEC_API_FATAL_MEM_ALLOC;
memset(pv_value, 0, (sizeof(ia_mem_info_struct) + sizeof(pVOID *)) *
@@ -844,6 +893,9 @@ IA_ERRORCODE ixheaacd_dec_api(pVOID p_ia_enhaacplus_dec_obj, WORD32 i_cmd,
p_obj_exhaacplus_dec->p_state_aac->fatal_err_present) {
err_code = IA_FATAL_ERROR;
} else {
+ memset(p_obj_exhaacplus_dec->p_state_aac->qshift_adj, 0,
+ sizeof(p_obj_exhaacplus_dec->p_state_aac->qshift_adj));
+ p_obj_exhaacplus_dec->p_state_aac->qshift_cnt = 0;
err_code = ixheaacd_dec_execute(p_obj_exhaacplus_dec);
}
if (err_code != IA_NO_ERROR) {
@@ -1018,6 +1070,7 @@ IA_ERRORCODE ixheaacd_decoder_flush_api(
p_obj_exhaacplus_dec->aac_config.ui_coupling_channel = 0;
p_obj_exhaacplus_dec->aac_config.downmix = 0;
+ p_obj_exhaacplus_dec->p_state_aac->peak_lim_init = 0;
{
ia_aac_dec_tables_struct *pstr_aac_tables =
@@ -1324,6 +1377,8 @@ IA_ERRORCODE ixheaacd_dec_init(
p_obj_exhaacplus_dec->p_state_aac =
p_obj_exhaacplus_dec->pp_mem_aac[IA_ENHAACPLUS_DEC_PERSIST_IDX];
+ p_obj_exhaacplus_dec->p_state_aac->preroll_config_present = 0;
+
if (p_obj_exhaacplus_dec->p_state_aac != NULL) {
ret_val = setjmp(p_obj_exhaacplus_dec->p_state_aac->xaac_jmp_buf);
if (ret_val != 0) {
@@ -1808,7 +1863,18 @@ IA_ERRORCODE ixheaacd_dec_init(
p_state_enhaacplus_dec->ch_config,
p_state_enhaacplus_dec->eld_specific_config,
p_state_enhaacplus_dec->s_adts_hdr_present,
- &p_state_enhaacplus_dec->drc_dummy);
+ &p_state_enhaacplus_dec->drc_dummy,
+ &p_state_enhaacplus_dec->slot_pos);
+
+ if (p_state_enhaacplus_dec->pstr_drc_dec->drc_element_found == 1) {
+ if (p_obj_exhaacplus_dec->aac_config.i_loud_ref_level < 0) {
+ p_obj_exhaacplus_dec->aac_config.output_level =
+ p_state_enhaacplus_dec->pstr_drc_dec->prog_ref_level;
+ } else {
+ p_obj_exhaacplus_dec->aac_config.output_level =
+ p_obj_exhaacplus_dec->aac_config.i_loud_ref_level;
+ }
+ }
memset(&(p_obj_exhaacplus_dec->p_state_aac->pstr_aac_dec_info[ch_idx]
->pstr_aac_dec_ch_info[0]
@@ -1899,7 +1965,8 @@ IA_ERRORCODE ixheaacd_dec_init(
WORD16 num_channels_1_t = num_channels_1;
ixheaacd_allocate_sbr_scr(
&sbr_scratch_struct, p_state_enhaacplus_dec->aac_scratch_mem_v,
- time_data, 1, 1, p_state_enhaacplus_dec->audio_object_type);
+ time_data, 1, 1, p_state_enhaacplus_dec->audio_object_type, 0, NULL,
+ 0, 0);
if (ixheaacd_applysbr(
p_state_enhaacplus_dec->str_sbr_dec_info[ch_idx],
@@ -2227,7 +2294,7 @@ IA_ERRORCODE ixheaacd_dec_execute(
WORD type;
WORD total_channels = 0;
WORD total_elements = 0;
- WORD16 *actual_out_buffer;
+ WORD16 *actual_out_buffer = NULL;
WORD ps_enable;
WORD esbr_mono_downmix = 0;
WORD8 element_used[MAX_BS_ELEMENT];
@@ -2347,7 +2414,7 @@ IA_ERRORCODE ixheaacd_dec_execute(
scratch_pointer = 12 * 1024;
p_state_enhaacplus_dec->coup_ch_output =
- (WORD16 *)((WORD8 *)
+ (WORD32 *)((WORD8 *)
p_obj_exhaacplus_dec->p_state_aac->aac_scratch_mem_v +
scratch_pointer);
}
@@ -2363,6 +2430,52 @@ IA_ERRORCODE ixheaacd_dec_execute(
p_obj_exhaacplus_dec->p_state_aac->ui_out_bytes = 0;
if (p_state_enhaacplus_dec->ui_in_bytes == 0) {
+ WORD32 i, j;
+ if (p_state_enhaacplus_dec->peak_lim_init == 1) {
+ p_obj_exhaacplus_dec->p_state_aac->ui_out_bytes =
+ (p_state_enhaacplus_dec->peak_limiter.attack_time_samples) *
+ total_channels * sizeof(WORD16);
+
+ for (j = 0; j < total_channels; j++) {
+ for (i = 0;
+ i < (p_state_enhaacplus_dec->peak_limiter.attack_time_samples -
+ p_state_enhaacplus_dec->peak_limiter.delayed_input_index);
+ i++) {
+ *(time_data + total_channels * i + j) = ixheaacd_round16(
+ *(p_state_enhaacplus_dec->peak_limiter.delayed_input +
+ (p_state_enhaacplus_dec->peak_limiter.delayed_input_index) *
+ total_channels +
+ total_channels * i + j));
+ }
+ }
+
+ for (j = 0; j < total_channels; j++) {
+ for (i = 0;
+ i < p_state_enhaacplus_dec->peak_limiter.delayed_input_index;
+ i++) {
+ *(time_data +
+ (p_state_enhaacplus_dec->peak_limiter.attack_time_samples -
+ p_state_enhaacplus_dec->peak_limiter.delayed_input_index) *
+ total_channels +
+ total_channels * i + j) =
+ ixheaacd_round16(
+ *(p_state_enhaacplus_dec->peak_limiter.delayed_input +
+ total_channels * i + j));
+ }
+ }
+
+ if (p_obj_exhaacplus_dec->aac_config.dup_stereo_flag) {
+ for (i = 0;
+ i < (p_state_enhaacplus_dec->peak_limiter.attack_time_samples);
+ i++) {
+ time_data[2 * i + 1] = time_data[2 * i + 0];
+ }
+ }
+ p_state_enhaacplus_dec->peak_lim_init = 0xFF;
+ } else {
+ p_obj_exhaacplus_dec->p_state_aac->ui_out_bytes = 0;
+ }
+
p_state_enhaacplus_dec->i_bytes_consumed = 0;
return IA_NO_ERROR;
}
@@ -2505,6 +2618,10 @@ IA_ERRORCODE ixheaacd_dec_execute(
p_state_enhaacplus_dec->pstr_drc_dec->state = 1;
}
+ WORD16 *intermediate_scr =
+ (WORD16 *)(WORD8 *)p_state_enhaacplus_dec->aac_scratch_mem_v +
+ (128 * 1024);
+
for (ch_idx1 = 0; ch_idx1 < total_elements; ch_idx1++) {
WORD32 skip_full_decode = 0;
WORD32 ch_idx = ch_idx1;
@@ -2582,7 +2699,8 @@ IA_ERRORCODE ixheaacd_dec_execute(
if (p_obj_exhaacplus_dec->aac_config.element_type[1] < 3 &&
p_obj_exhaacplus_dec->aac_config.element_type[1] > 0 &&
p_obj_exhaacplus_dec->aac_config.ui_max_channels > 2) {
- actual_out_buffer = p_state_enhaacplus_dec->coup_ch_output;
+ actual_out_buffer =
+ (WORD16 *)(VOID *)p_state_enhaacplus_dec->coup_ch_output;
}
ch_fac = 1;
slot_ele = 0;
@@ -2599,8 +2717,8 @@ IA_ERRORCODE ixheaacd_dec_execute(
time_data, channel, p_obj_exhaacplus_dec->aac_config.ui_max_channels,
p_state_enhaacplus_dec->audio_object_type);
- if(p_state_enhaacplus_dec->ch_config == 2 && channel == 1)
- return IA_ENHAACPLUS_DEC_EXE_NONFATAL_DECODE_FRAME_ERROR;
+ if (p_state_enhaacplus_dec->ch_config == 2 && channel == 1)
+ return IA_ENHAACPLUS_DEC_EXE_NONFATAL_DECODE_FRAME_ERROR;
error_code = ixheaacd_aacdec_decodeframe(
p_obj_exhaacplus_dec, &aac_scratch_struct, actual_out_buffer,
@@ -2614,7 +2732,21 @@ IA_ERRORCODE ixheaacd_dec_execute(
p_state_enhaacplus_dec->ch_config,
p_state_enhaacplus_dec->eld_specific_config,
p_state_enhaacplus_dec->s_adts_hdr_present,
- &p_state_enhaacplus_dec->drc_dummy);
+ &p_state_enhaacplus_dec->drc_dummy,
+ &p_state_enhaacplus_dec->slot_pos);
+
+ p_state_enhaacplus_dec->slot_pos -= (channel - 1);
+ p_state_enhaacplus_dec->sbr_present = 0;
+
+ if (p_obj_exhaacplus_dec->p_state_aac->qshift_adj[0] != LD_OBJ &&
+ p_state_enhaacplus_dec->frame_counter == 0) {
+ ixheaacd_peak_limiter_init(
+ &p_state_enhaacplus_dec->peak_limiter, total_channels,
+ p_obj_exhaacplus_dec->p_state_aac->p_config->ui_samp_freq,
+ &p_state_enhaacplus_dec->peak_limiter.buffer[0],
+ &p_obj_exhaacplus_dec->p_state_aac->delay_in_samples);
+ p_obj_exhaacplus_dec->p_state_aac->peak_lim_init = 1;
+ }
if (p_state_enhaacplus_dec->audio_object_type < ER_OBJECT_START ||
(p_state_enhaacplus_dec->audio_object_type != AOT_ER_AAC_LD &&
@@ -2692,10 +2824,15 @@ IA_ERRORCODE ixheaacd_dec_execute(
if (p_state_enhaacplus_dec->str_sbr_dec_info[ch_idx] &&
p_state_enhaacplus_dec->pstr_stream_sbr[0][0].no_elements) {
ia_sbr_scr_struct sbr_scratch_struct;
- ixheaacd_allocate_sbr_scr(&sbr_scratch_struct,
- p_state_enhaacplus_dec->aac_scratch_mem_v,
- time_data, total_elements, ch_fac,
- p_state_enhaacplus_dec->audio_object_type);
+ ixheaacd_allocate_sbr_scr(
+ &sbr_scratch_struct, p_state_enhaacplus_dec->aac_scratch_mem_v,
+ time_data, total_elements, ch_fac,
+ p_state_enhaacplus_dec->audio_object_type, total_channels,
+ p_obj_exhaacplus_dec->p_state_aac->qshift_adj,
+ p_state_enhaacplus_dec->slot_pos, channel);
+
+ p_state_enhaacplus_dec->sbr_present = 1;
+ p_state_enhaacplus_dec->peak_lim_init = 0;
if (ixheaacd_applysbr(
p_state_enhaacplus_dec->str_sbr_dec_info[ch_idx],
@@ -2721,8 +2858,17 @@ IA_ERRORCODE ixheaacd_dec_execute(
sample_rate = sample_rate_dec;
}
+ if (p_state_enhaacplus_dec->sbr_present ||
+ p_obj_exhaacplus_dec->p_state_aac->qshift_adj[0] == LD_OBJ) {
+ num_of_out_samples = frame_size;
+
+ } else {
+ num_of_out_samples =
+ frame_size -
+ MIN(p_obj_exhaacplus_dec->p_state_aac->delay_in_samples, frame_size);
+ }
+
p_obj_exhaacplus_dec->aac_config.ui_samp_freq = sample_rate;
- num_of_out_samples = frame_size;
p_state_enhaacplus_dec->num_channel_last = num_ch;
p_state_enhaacplus_dec->num_of_out_samples = num_of_out_samples;
@@ -2732,12 +2878,11 @@ IA_ERRORCODE ixheaacd_dec_execute(
{
if (p_obj_exhaacplus_dec->aac_config.flag_to_stereo == 1 &&
channel == 1 && total_elements == 1 && num_ch == 1) {
- WORD i;
num_ch = 2;
+ p_obj_exhaacplus_dec->aac_config.dup_stereo_flag = 1;
- for (i = 0; i < frame_size; i++) {
- actual_out_buffer[2 * i + 1] = actual_out_buffer[2 * i + 0];
- }
+ } else {
+ p_obj_exhaacplus_dec->aac_config.dup_stereo_flag = 0;
}
p_obj_exhaacplus_dec->aac_config.ui_n_channels = num_ch;
@@ -2750,6 +2895,22 @@ IA_ERRORCODE ixheaacd_dec_execute(
else {
channel_coupling_flag = 1;
}
+
+ if (p_state_enhaacplus_dec->sbr_present && total_channels > 2) {
+ for (int j = 0; j < channel; j++) {
+ for (int i = 0; i < frame_size; i++) {
+ intermediate_scr[total_channels * i + j +
+ p_state_enhaacplus_dec->slot_pos] =
+ actual_out_buffer[total_channels * i + j +
+ p_state_enhaacplus_dec->slot_pos];
+ }
+ }
+ }
+ }
+
+ if (p_state_enhaacplus_dec->sbr_present && total_channels > 2) {
+ memcpy(time_data, intermediate_scr,
+ sizeof(WORD16) * frame_size * total_channels);
}
{
@@ -2766,12 +2927,63 @@ IA_ERRORCODE ixheaacd_dec_execute(
p_state_enhaacplus_dec->frame_counter++;
+ WORD32 i, j;
+
if (channel_coupling_flag) {
ixheaacd_dec_ind_coupling(p_obj_exhaacplus_dec,
p_state_enhaacplus_dec->coup_ch_output,
num_of_out_samples, total_channels, time_data);
}
+ for (i = 0; i < total_channels; i++) {
+ if (p_obj_exhaacplus_dec->p_state_aac->qshift_adj[i + 1] == 0)
+ p_obj_exhaacplus_dec->p_state_aac->qshift_adj[i + 1] =
+ p_obj_exhaacplus_dec->p_state_aac->qshift_adj[0];
+ }
+
+ if (p_obj_exhaacplus_dec->aac_config.flag_to_stereo == 1 &&
+ total_elements == 1 && num_ch == 2 &&
+ p_obj_exhaacplus_dec->aac_config.dup_stereo_flag == 1) {
+ WORD i;
+
+ if (!p_state_enhaacplus_dec->sbr_present &&
+ p_obj_exhaacplus_dec->p_state_aac->qshift_adj[0] != LD_OBJ) {
+ for (i = 0; i < frame_size; i++) {
+ *((WORD32 *)actual_out_buffer + 2 * i + 1) =
+ *((WORD32 *)actual_out_buffer + 2 * i);
+ }
+ } else {
+ for (i = 0; i < frame_size; i++) {
+ *(actual_out_buffer + 2 * i + 1) = *(actual_out_buffer + 2 * i);
+ }
+ }
+ }
+
+ if (!p_state_enhaacplus_dec->sbr_present &&
+ p_obj_exhaacplus_dec->p_state_aac->peak_lim_init == 1 &&
+ p_obj_exhaacplus_dec->p_state_aac->qshift_adj[0] != LD_OBJ) {
+ ixheaacd_peak_limiter_process(
+ &p_state_enhaacplus_dec->peak_limiter, time_data, frame_size,
+ p_obj_exhaacplus_dec->p_state_aac->qshift_adj);
+
+ for (i = 0; i < frame_size * 2; i++) {
+ for (j = 0; j < total_channels; j++) {
+ *((WORD16 *)time_data + total_channels * i + j) =
+ ixheaacd_round16(*((WORD32 *)time_data + total_channels * i + j));
+ }
+ }
+
+ memmove(
+ time_data,
+ (time_data +
+ total_channels * p_obj_exhaacplus_dec->p_state_aac->delay_in_samples),
+ sizeof(WORD16) * num_of_out_samples * total_channels);
+
+ p_obj_exhaacplus_dec->p_state_aac->delay_in_samples =
+ p_obj_exhaacplus_dec->p_state_aac->delay_in_samples -
+ MIN(p_obj_exhaacplus_dec->p_state_aac->delay_in_samples, frame_size);
+ }
+
if ((total_channels > 2) && (1 == p_obj_exhaacplus_dec->aac_config.downmix)) {
ixheaacd_dec_downmix_to_stereo(p_obj_exhaacplus_dec, num_of_out_samples,
total_elements, time_data, total_channels);
diff --git a/decoder/ixheaacd_apicmd_standards.h b/decoder/ixheaacd_apicmd_standards.h
index 802585d..baa8f40 100644
--- a/decoder/ixheaacd_apicmd_standards.h
+++ b/decoder/ixheaacd_apicmd_standards.h
@@ -60,6 +60,7 @@
#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_GET_LOUDNESS_VAL 0x001F
/*****************************************************************************/
/* Ittiam standard API command indices */
diff --git a/decoder/ixheaacd_block.c b/decoder/ixheaacd_block.c
index 2784edd..2424676 100644
--- a/decoder/ixheaacd_block.c
+++ b/decoder/ixheaacd_block.c
@@ -17,6 +17,7 @@
*****************************************************************************
* Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
*/
+#include <stdlib.h>
#include "ixheaacd_sbr_common.h"
#include "ixheaacd_type_def.h"
@@ -1122,6 +1123,10 @@ WORD ixheaacd_huffman_dec_word2(ia_bit_buf_struct *it_bit_buff, WORD32 cb_no,
} else {
it_bit_buff->ptr_read_next += (it_bit_buff->bit_pos) >> 3;
it_bit_buff->bit_pos = it_bit_buff->bit_pos & 0x7;
+ if ((SIZE_T)(it_bit_buff->ptr_read_next) > (SIZE_T)(it_bit_buff->ptr_bit_buf_end + 1))
+ {
+ return IA_ENHAACPLUS_DEC_EXE_NONFATAL_INSUFFICIENT_INPUT_BYTES;
+ }
bits_cons = ((it_bit_buff->ptr_read_next - start_read_pos) << 3) +
((it_bit_buff->bit_pos - start_bit_pos));
@@ -1131,9 +1136,11 @@ WORD ixheaacd_huffman_dec_word2(ia_bit_buf_struct *it_bit_buff, WORD32 cb_no,
return ret_val;
}
-void ixheaacd_lap1_512_480(WORD32 *coef, WORD32 *prev, WORD16 *out,
+void ixheaacd_lap1_512_480(WORD32 *coef, WORD32 *prev, VOID *out_tmp,
const WORD16 *window, WORD16 q_shift, WORD16 size,
- WORD16 stride) {
+ WORD16 stride , WORD slot_element) {
+
+
WORD32 accu;
WORD32 i;
WORD16 rounding_fac = -0x2000;
@@ -1145,6 +1152,8 @@ void ixheaacd_lap1_512_480(WORD32 *coef, WORD32 *prev, WORD16 *out,
WORD32 *pwin1, *pwin2;
WORD32 *pCoef = &coef[size * 2 - 1 - 0];
+ WORD16 * out = (WORD16*)out_tmp - slot_element;
+
pwin1 = &window_i[size - 1 - 0];
pwin2 = &window_i[size + 0];
@@ -1182,12 +1191,12 @@ void ixheaacd_lap1_512_480(WORD32 *coef, WORD32 *prev, WORD16 *out,
}
}
-VOID ixheaacd_over_lap_add1_dec(WORD32 *coef, WORD32 *prev, WORD16 *out,
+VOID ixheaacd_over_lap_add1_dec(WORD32 *coef, WORD32 *prev, WORD32 *out,
const WORD16 *window, WORD16 q_shift,
WORD16 size, WORD16 ch_fac) {
WORD32 accu;
WORD32 i;
- WORD16 rounding_fac = -0x2000;
+ WORD16 rounding_fac = 0;
for (i = 0; i < size; i++) {
WORD16 window1, window2;
@@ -1198,16 +1207,14 @@ VOID ixheaacd_over_lap_add1_dec(WORD32 *coef, WORD32 *prev, WORD16 *out,
ixheaacd_shl32_dir_sat_limit(
ixheaacd_mult32x16in32(coef[size * 2 - 1 - i], window2), q_shift),
ixheaacd_mac32x16in32_drc(rounding_fac, prev[i], window1));
- out[ch_fac * (size - i - 1)] =
- ixheaacd_shr32(ixheaacd_shl32_dir_sat_limit(accu, 2), 16);
+ out[ch_fac * (size - i - 1)] = accu;
accu = ixheaacd_sub32_sat(
ixheaacd_shl32_dir_sat_limit(
ixheaacd_mult32x16in32(ixheaacd_negate32(coef[size * 2 - 1 - i]),
window1),
q_shift),
ixheaacd_mac32x16in32_drc(rounding_fac, prev[i], window2));
- out[ch_fac * (size + i)] =
- ixheaacd_shr32(ixheaacd_shl32_dir_sat_limit(accu, 2), 16);
+ out[ch_fac * (size + i)] = accu;
}
}
diff --git a/decoder/ixheaacd_block.h b/decoder/ixheaacd_block.h
index 739116c..51a1d9f 100644
--- a/decoder/ixheaacd_block.h
+++ b/decoder/ixheaacd_block.h
@@ -78,15 +78,15 @@ IA_ERRORCODE ixheaacd_read_section_data(
WORD32 aac_spect_data_resil_flag, WORD32 aac_sect_data_resil_flag,
ia_aac_dec_tables_struct *ptr_aac_tables);
-VOID ixheaacd_over_lap_add1_dec(WORD32 *coef, WORD32 *prev, WORD16 *out,
+VOID ixheaacd_over_lap_add1_dec(WORD32 *coef, WORD32 *prev, WORD32 *out,
const WORD16 *window, WORD16 q_shift,
WORD16 size, WORD16 ch_fac);
-VOID ixheaacd_over_lap_add1_armv7(WORD32 *coef, WORD32 *prev, WORD16 *out,
+VOID ixheaacd_over_lap_add1_armv7(WORD32 *coef, WORD32 *prev, WORD32 *out,
const WORD16 *window, WORD16 q_shift,
WORD16 size, WORD16 ch_fac);
-VOID ixheaacd_over_lap_add1_armv8(WORD32 *coef, WORD32 *prev, WORD16 *out,
+VOID ixheaacd_over_lap_add1_armv8(WORD32 *coef, WORD32 *prev, WORD32 *out,
const WORD16 *window, WORD16 q_shift,
WORD16 size, WORD16 ch_fac);
@@ -120,10 +120,10 @@ VOID ixheaacd_spec_to_overlapbuf_armv7(WORD32 *ptr_overlap_buf,
WORD32 *ptr_spec_coeff, WORD32 q_shift,
WORD32 size);
-VOID ixheaacd_overlap_buf_out_dec(WORD16 *out_samples, WORD32 *ptr_overlap_buf,
+VOID ixheaacd_overlap_buf_out_dec(WORD32 *out_samples, WORD32 *ptr_overlap_buf,
WORD32 size, const WORD16 ch_fac);
-VOID ixheaacd_overlap_buf_out_armv7(WORD16 *out_samples,
+VOID ixheaacd_overlap_buf_out_armv7(WORD32 *out_samples,
WORD32 *ptr_overlap_buf, WORD32 size,
const WORD16 ch_fac);
@@ -132,33 +132,33 @@ WORD32 ixheaacd_inv_quant(WORD32 *x_quant, WORD32 *ixheaacd_pow_table_Q13);
VOID ixheaacd_imdct_process(ia_aac_dec_overlap_info *ptr_aac_dec_overlap_info,
WORD32 *ptr_spec_coeff,
ia_ics_info_struct *ptr_ics_info,
- WORD16 out_samples[], const WORD16 ch_fac,
+ VOID* out_samples, const WORD16 ch_fac,
WORD32 *scratch,
ia_aac_dec_tables_struct *ptr_aac_tables,
- WORD32 object_type);
+ WORD32 object_type , WORD slot_element);
-VOID ixheaacd_neg_shift_spec_dec(WORD32 *coef, WORD16 *out, WORD16 q_shift,
+VOID ixheaacd_neg_shift_spec_dec(WORD32 *coef, WORD32 *out, WORD16 q_shift,
WORD16 ch_fac);
-VOID ixheaacd_neg_shift_spec_armv7(WORD32 *coef, WORD16 *out, WORD16 q_shift,
+VOID ixheaacd_neg_shift_spec_armv7(WORD32 *coef, WORD32 *out, WORD16 q_shift,
WORD16 ch_fac);
-VOID ixheaacd_neg_shift_spec_armv8(WORD32 *coef, WORD16 *out, WORD16 q_shift,
+VOID ixheaacd_neg_shift_spec_armv8(WORD32 *coef, WORD32 *out, WORD16 q_shift,
WORD16 ch_fac);
VOID ixheaacd_nolap1_32(WORD32 *coef, WORD32 *out, WORD16 cu_scale,
WORD16 stride);
-VOID ixheaacd_overlap_out_copy_dec(WORD16 *out_samples, WORD32 *ptr_overlap_buf,
+VOID ixheaacd_overlap_out_copy_dec(WORD32 *out_samples, WORD32 *ptr_overlap_buf,
WORD32 *ptr_overlap_buf1,
const WORD16 ch_fac);
-VOID ixheaacd_overlap_out_copy_armv7(WORD16 *out_samples,
+VOID ixheaacd_overlap_out_copy_armv7(WORD32 *out_samples,
WORD32 *ptr_overlap_buf,
WORD32 *ptr_overlap_buf1,
const WORD16 ch_fac);
-VOID ixheaacd_long_short_win_seq(WORD32 *current, WORD32 *prev, WORD16 *out,
+VOID ixheaacd_long_short_win_seq(WORD32 *current, WORD32 *prev, WORD32 *out,
const WORD16 *short_window,
const WORD16 *short_window_prev,
const WORD16 *long_window_prev, WORD16 q_shift,
@@ -173,7 +173,7 @@ VOID ixheaacd_huffman_decode(WORD32 it_bit_buff, WORD16 *huff_index,
void ixheaacd_eld_dec_windowing(WORD32 *ptr_spect_coeff, const WORD16 *ptr_win,
WORD32 framesize, WORD16 q_shift,
WORD32 *ptr_overlap_buf, const WORD16 stride,
- WORD16 *out_samples);
+ VOID *out_samples, WORD slot_element);
WORD32 ixheaacd_extension_payload(ia_bit_buf_struct *it_bit_buff, WORD32 cnt);
@@ -182,8 +182,8 @@ VOID ixheaacd_process_single_scf(WORD32 scale_factor, WORD32 *x_invquant,
WORD32 total_channels, WORD32 object_type,
WORD32 aac_sf_data_resil_flag);
-void ixheaacd_lap1_512_480(WORD32 *coef, WORD32 *prev, WORD16 *out,
+void ixheaacd_lap1_512_480(WORD32 *coef, WORD32 *prev, VOID *out_tmp,
const WORD16 *window, WORD16 q_shift, WORD16 size,
- WORD16 stride);
+ WORD16 stride , WORD slot_element);
#endif /* #ifndef IXHEAACD_BLOCK_H */
diff --git a/decoder/ixheaacd_channelinfo.h b/decoder/ixheaacd_channelinfo.h
index b582c0e..4cf1216 100644
--- a/decoder/ixheaacd_channelinfo.h
+++ b/decoder/ixheaacd_channelinfo.h
@@ -43,6 +43,7 @@ typedef struct {
WORD16 predictor_data_present;
ltp_info ltp;
ltp_info ltp2;
+ WORD8 qshift_adj;
} ia_ics_info_struct;
typedef struct {
diff --git a/decoder/ixheaacd_decode_main.c b/decoder/ixheaacd_decode_main.c
index 7ee1bcd..cc1a971 100644
--- a/decoder/ixheaacd_decode_main.c
+++ b/decoder/ixheaacd_decode_main.c
@@ -65,12 +65,14 @@
#include "ixheaacd_create.h"
#include "ixheaacd_dec_main.h"
#include "ixheaacd_error_standards.h"
+#include "ixheaacd_struct_def.h"
VOID ixheaacd_samples_sat(WORD8 *outbuffer, WORD32 num_samples_out,
WORD32 pcmsize, FLOAT32 (*out_samples)[4096],
WORD32 *out_bytes, WORD32 num_channel_out) {
WORD32 num;
WORD32 i;
- FLOAT32 sample;
+ WORD32 write_local;
+ FLOAT32 write_local_float;
WORD16 *out_buf = (WORD16 *)outbuffer;
@@ -78,29 +80,30 @@ VOID ixheaacd_samples_sat(WORD8 *outbuffer, WORD32 num_samples_out,
if (pcmsize == 16) {
for (i = 0; i < num; i++) {
- sample = (out_samples[i % num_channel_out][i / num_channel_out]);
+ write_local_float =
+ (out_samples[i % num_channel_out][i / num_channel_out]);
- if (sample > MAX_16) {
- sample = MAX_16;
- } else if (sample < MIN_16) {
- sample = MIN_16;
+ if (write_local_float > 32767.0f) {
+ write_local_float = 32767.0f;
+ } else if (write_local_float < -32768.0f) {
+ write_local_float = -32768.0f;
}
- out_buf[i] = (WORD16)sample;
+ out_buf[i] = (WORD16)write_local_float;
}
*out_bytes = num * sizeof(WORD16);
} else {
WORD8 *out_24bit = (WORD8 *)out_buf;
for (i = 0; i < num; i++) {
- WORD32 write_local;
- sample = (out_samples[i % num_channel_out][i / num_channel_out] * 256);
+ write_local_float =
+ (out_samples[i % num_channel_out][i / num_channel_out] * 256);
- if (sample > MAX_24) {
- sample = MAX_24;
- } else if (sample < MIN_24) {
- sample = MIN_24;
+ if (write_local_float > 8388607.0f) {
+ write_local_float = 8388607.0f;
+ } else if (write_local_float < -8388608.0f) {
+ write_local_float = -8388608.0f;
}
- write_local = (WORD32)sample;
+ write_local = (WORD32)write_local_float;
*out_24bit++ = (WORD32)write_local & 0xff;
*out_24bit++ = ((WORD32)write_local >> 8) & 0xff;
@@ -112,10 +115,9 @@ 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) {
+static WORD32 ixheaacd_audio_preroll_parsing(
+ ia_dec_data_struct *pstr_dec_data, UWORD8 *conf_buf, WORD32 *preroll_units,
+ WORD32 *preroll_frame_offset, ia_aac_dec_state_struct *aac_dec_handle) {
ia_bit_buf_struct *temp_buff =
(ia_bit_buf_struct *)&(pstr_dec_data->dec_bit_buf);
WORD32 independency_flag = 0;
@@ -128,7 +130,6 @@ static WORD32 ixheaacd_audio_preroll_parsing(ia_dec_data_struct *pstr_dec_data,
WORD32 num_pre_roll_frames = 0;
WORD32 frame_idx = 0;
- WORD32 frame_len[MAX_AUDIO_PREROLLS] = {0};
WORD32 temp = 0;
WORD32 config_len = 0;
@@ -171,6 +172,16 @@ static WORD32 ixheaacd_audio_preroll_parsing(ia_dec_data_struct *pstr_dec_data,
for (loop = 0; loop < config_len; loop++)
conf_buf[loop] = ixheaacd_read_bits_buf(temp_buff, 8);
+ if (aac_dec_handle->preroll_config_present == 1) {
+ if (!(memcmp(aac_dec_handle->preroll_config_prev, conf_buf,
+ sizeof(aac_dec_handle->preroll_config_prev)))) {
+ config_len = 0;
+ }
+ }
+ aac_dec_handle->preroll_config_present = 1;
+ memcpy(aac_dec_handle->preroll_config_prev, conf_buf,
+ sizeof(aac_dec_handle->preroll_config_prev));
+
apply_crossfade = ixheaacd_read_bits_buf(temp_buff, 1);
un_used_val = ixheaacd_read_bits_buf(temp_buff, 1); // reserverd
@@ -191,15 +202,20 @@ static WORD32 ixheaacd_audio_preroll_parsing(ia_dec_data_struct *pstr_dec_data,
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);
+ if (config_len != 0) {
+ preroll_frame_offset[frame_idx] =
+ 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;
+ if (config_len == 0)
+ *preroll_units = 0;
+ else
+ *preroll_units = num_pre_roll_frames;
+
return config_len;
}
@@ -218,11 +234,10 @@ 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[MAX_PREROLL_SIZE];
WORD32 config_len;
WORD32 delay;
- WORD preroll_frame_offset[4] = {0};
+ WORD preroll_frame_offset[MAX_PREROLL_FRAME_OFFSET] = {0};
WORD preroll_units = -1;
WORD32 access_units = 0;
@@ -283,9 +298,9 @@ WORD32 ixheaacd_dec_main(VOID *temp_handle, WORD8 *inbuffer, WORD8 *outbuffer,
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]);
+ config_len = ixheaacd_audio_preroll_parsing(
+ pstr_dec_data, &config[0], &preroll_units, &preroll_frame_offset[0],
+ aac_dec_handle);
if (config_len == IA_FATAL_ERROR) return IA_FATAL_ERROR;
}
diff --git a/decoder/ixheaacd_env_extr.h b/decoder/ixheaacd_env_extr.h
index 32b1421..4c79e95 100644
--- a/decoder/ixheaacd_env_extr.h
+++ b/decoder/ixheaacd_env_extr.h
@@ -74,7 +74,7 @@ typedef struct {
WORD32 over_sampling_flag;
WORD32 pitch_in_bins;
WORD32 pvc_mode;
-
+ WORD32 cov_count;
WORD32 sbr_invf_mode_prev[MAX_NUM_NOISE_VALUES];
FLOAT32 flt_env_sf_arr[MAX_NUM_ENVELOPE_VALUES];
FLOAT32 flt_noise_floor[MAX_NUM_NOISE_VALUES];
diff --git a/decoder/ixheaacd_fft.c b/decoder/ixheaacd_fft.c
index 0932097..60482d6 100644
--- a/decoder/ixheaacd_fft.c
+++ b/decoder/ixheaacd_fft.c
@@ -28,9 +28,10 @@
#include "ixheaacd_function_selector.h"
extern const WORD32 ixheaacd_twiddle_table_fft_32x32[514];
+extern const FLOAT32 ixheaacd_twiddle_table_fft_flt[16];
extern const WORD32 ixheaacd_twiddle_table_3pr[1155];
extern const WORD32 ixheaacd_twiddle_table_3pi[1155];
-extern const WORD8 ixheaacd_mps_dig_rev[16];
+extern const WORD8 ixheaacd_mps_dig_rev[8];
#define PLATFORM_INLINE __inline
@@ -61,59 +62,84 @@ static PLATFORM_INLINE WORD32 ixheaacd_mac32_sat(WORD32 a, WORD32 b, WORD32 c) {
return (result);
}
+static PLATFORM_INLINE FLOAT32 mult32X32float(FLOAT32 a, FLOAT32 b) {
+ FLOAT32 result;
-VOID ixheaacd_mps_complex_fft_64_dec(WORD32 *ptr_x, WORD32 *fin_re,
- WORD32 *fin_im, WORD32 nlength) {
- WORD32 i, j, k, n_stages;
- WORD32 h2, x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
- WORD32 del, nodespacing, in_loop_cnt;
- WORD32 y[128];
- WORD32 npoints = nlength;
- WORD32 *ptr_y = y;
- const WORD32 *ptr_w;
- n_stages = 30 - ixheaacd_norm32(npoints);
+ result = a * b;
- n_stages = n_stages >> 1;
+ return result;
+}
- ptr_w = ixheaacd_twiddle_table_fft_32x32;
+static PLATFORM_INLINE FLOAT32 mac32X32float(FLOAT32 a, FLOAT32 b, FLOAT32 c) {
+ FLOAT32 result;
+
+ result = a + b * c;
+
+ return result;
+}
+
+VOID ixheaacd_mps_synth_calc_fft(FLOAT32 *ptr_xr, FLOAT32 *ptr_xi,
+ WORD32 npoints) {
+ WORD32 i, j, k;
+ FLOAT32 y[64], z[64];
+ FLOAT32 *ptr_y = y, *ptr_z = z;
+ const FLOAT32 *ptr_w = ixheaacd_twiddle_table_fft_flt;
for (i = 0; i < npoints; i += 4) {
- WORD32 *inp = ptr_x;
- h2 = ixheaacd_mps_dig_rev[i >> 2];
+ FLOAT32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
+ FLOAT32 *inp = ptr_xr;
+ FLOAT32 tmk;
+
+ WORD32 h2 = ixheaacd_mps_dig_rev[i >> 2];
+
inp += (h2);
x0r = *inp;
x0i = *(inp + 1);
- inp += (npoints >> 1);
+ inp += 16;
x1r = *inp;
x1i = *(inp + 1);
- inp += (npoints >> 1);
+ inp += 16;
x2r = *inp;
x2i = *(inp + 1);
- inp += (npoints >> 1);
+ inp += 16;
x3r = *inp;
x3i = *(inp + 1);
- x0r = ixheaacd_add32_sat(x0r, x2r);
- x0i = ixheaacd_add32_sat(x0i, x2i);
- x2r = ixheaacd_sub32_sat(x0r, ixheaacd_shl32_sat(x2r, 1));
- x2i = ixheaacd_sub32_sat(x0i, ixheaacd_shl32_sat(x2i, 1));
- x1r = ixheaacd_add32_sat(x1r, x3r);
- x1i = ixheaacd_add32_sat(x1i, x3i);
- x3r = ixheaacd_sub32_sat(x1r, ixheaacd_shl32_sat(x3r, 1));
- x3i = ixheaacd_sub32_sat(x1i, ixheaacd_shl32_sat(x3i, 1));
-
- x0r = ixheaacd_add32_sat(x0r, x1r);
- x0i = ixheaacd_add32_sat(x0i, x1i);
- x1r = ixheaacd_sub32_sat(x0r, ixheaacd_shl32_sat(x1r, 1));
- x1i = ixheaacd_sub32_sat(x0i, ixheaacd_shl32_sat(x1i, 1));
- x2r = ixheaacd_add32_sat(x2r, x3i);
- x2i = ixheaacd_sub32_sat(x2i, x3r);
- x3i = ixheaacd_sub32_sat(x2r, ixheaacd_shl32_sat(x3i, 1));
- x3r = ixheaacd_add32_sat(x2i, ixheaacd_shl32_sat(x3r, 1));
+ x0r = x0r + x2r;
+ x0i = x0i + x2i;
+
+ tmk = x0r - x2r;
+ x2r = tmk - x2r;
+ tmk = x0i - x2i;
+ x2i = tmk - x2i;
+
+ x1r = x1r + x3r;
+ x1i = x1i + x3i;
+
+ tmk = x1r - x3r;
+ x3r = tmk - x3r;
+ tmk = x1i - x3i;
+ x3i = tmk - x3i;
+
+ x0r = x0r + x1r;
+ x0i = x0i + x1i;
+
+ tmk = x0r - x1r;
+ x1r = tmk - x1r;
+ tmk = x0i - x1i;
+ x1i = tmk - x1i;
+
+ x2r = x2r + x3i;
+ x2i = x2i - x3r;
+
+ tmk = x2r - x3i;
+ x3i = tmk - x3i;
+ tmk = x2i + x3r;
+ x3r = tmk + x3r;
*ptr_y++ = x0r;
*ptr_y++ = x0i;
@@ -123,416 +149,719 @@ VOID ixheaacd_mps_complex_fft_64_dec(WORD32 *ptr_x, WORD32 *fin_re,
*ptr_y++ = x1i;
*ptr_y++ = x3i;
*ptr_y++ = x3r;
- }
- ptr_y -= 2 * npoints;
- del = 4;
- nodespacing = 64;
- in_loop_cnt = npoints >> 4;
- for (i = n_stages - 1; i > 0; i--) {
- const WORD32 *twiddles = ptr_w;
- WORD32 *data = ptr_y;
- WORD32 w1h, w2h, w3h, w1l, w2l, w3l;
- WORD32 sec_loop_cnt;
-
- for (k = in_loop_cnt; k != 0; k--) {
- x0r = (*data);
- x0i = (*(data + 1));
- data += (del << 1);
-
- x1r = (*data);
- x1i = (*(data + 1));
- data += (del << 1);
-
- x2r = (*data);
- x2i = (*(data + 1));
- data += (del << 1);
-
- x3r = (*data);
- x3i = (*(data + 1));
- data -= 3 * (del << 1);
-
- x0r = ixheaacd_add32_sat(x0r, x2r);
- x0i = ixheaacd_add32_sat(x0i, x2i);
- x2r = ixheaacd_sub32_sat(x0r, ixheaacd_shl32_sat(x2r, 1));
- x2i = ixheaacd_sub32_sat(x0i, ixheaacd_shl32_sat(x2i, 1));
- x1r = ixheaacd_add32_sat(x1r, x3r);
- x1i = ixheaacd_add32_sat(x1i, x3i);
- x3r = ixheaacd_sub32_sat(x1r, ixheaacd_shl32_sat(x3r, 1));
- x3i = ixheaacd_sub32_sat(x1i, ixheaacd_shl32_sat(x3i, 1));
-
- x0r = ixheaacd_add32_sat(x0r, x1r);
- x0i = ixheaacd_add32_sat(x0i, x1i);
- x1r = ixheaacd_sub32_sat(x0r, ixheaacd_shl32_sat(x1r, 1));
- x1i = ixheaacd_sub32_sat(x0i, ixheaacd_shl32_sat(x1i, 1));
- x2r = ixheaacd_add32_sat(x2r, x3i);
- x2i = ixheaacd_sub32_sat(x2i, x3r);
- x3i = ixheaacd_sub32_sat(x2r, ixheaacd_shl32_sat(x3i, 1));
- x3r = ixheaacd_add32_sat(x2i, ixheaacd_shl32_sat(x3r, 1));
-
- *data = x0r;
- *(data + 1) = x0i;
- data += (del << 1);
-
- *data = x2r;
- *(data + 1) = x2i;
- data += (del << 1);
-
- *data = x1r;
- *(data + 1) = x1i;
- data += (del << 1);
-
- *data = x3i;
- *(data + 1) = x3r;
- data += (del << 1);
- }
- data = ptr_y + 2;
-
- sec_loop_cnt = (nodespacing * del);
- sec_loop_cnt = (sec_loop_cnt / 4) + (sec_loop_cnt / 8) -
- (sec_loop_cnt / 16) + (sec_loop_cnt / 32) -
- (sec_loop_cnt / 64) + (sec_loop_cnt / 128) -
- (sec_loop_cnt / 256);
- j = nodespacing;
-
- for (j = nodespacing; j <= sec_loop_cnt; j += nodespacing) {
- w1h = *(twiddles + 2 * j);
- w1l = *(twiddles + 2 * j + 1);
- w2h = *(twiddles + 2 * (j << 1));
- w2l = *(twiddles + 2 * (j << 1) + 1);
- w3h = *(twiddles + 2 * j + 2 * (j << 1));
- w3l = *(twiddles + 2 * j + 2 * (j << 1) + 1);
-
- for (k = in_loop_cnt; k != 0; k--) {
- WORD32 tmp;
- WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
-
- data += (del << 1);
-
- x1r = *data;
- x1i = *(data + 1);
- data += (del << 1);
-
- x2r = *data;
- x2i = *(data + 1);
- data += (del << 1);
-
- x3r = *data;
- x3i = *(data + 1);
- data -= 3 * (del << 1);
-
- tmp = ixheaacd_sub32_sat(ixheaacd_mult32_sat(x1r, w1l),
- ixheaacd_mult32_sat(x1i, w1h));
- x1i = ixheaacd_mac32_sat(ixheaacd_mult32_sat(x1r, w1h), x1i, w1l);
- x1r = tmp;
-
- tmp = ixheaacd_sub32_sat(ixheaacd_mult32_sat(x2r, w2l),
- ixheaacd_mult32_sat(x2i, w2h));
- x2i = ixheaacd_mac32_sat(ixheaacd_mult32_sat(x2r, w2h), x2i, w2l);
- x2r = tmp;
- tmp = ixheaacd_sub32_sat(ixheaacd_mult32_sat(x3r, w3l),
- ixheaacd_mult32_sat(x3i, w3h));
- x3i = ixheaacd_mac32_sat(ixheaacd_mult32_sat(x3r, w3h), x3i, w3l);
- x3r = tmp;
+ inp = ptr_xi;
- x0r = (*data);
- x0i = (*(data + 1));
-
- x0r = ixheaacd_add32_sat(x0r, x2r);
- x0i = ixheaacd_add32_sat(x0i, x2i);
- x2r = ixheaacd_sub32_sat(x0r, ixheaacd_shl32_sat(x2r, 1));
- x2i = ixheaacd_sub32_sat(x0i, ixheaacd_shl32_sat(x2i, 1));
- x1r = ixheaacd_add32_sat(x1r, x3r);
- x1i = ixheaacd_add32_sat(x1i, x3i);
- x3r = ixheaacd_sub32_sat(x1r, ixheaacd_shl32_sat(x3r, 1));
- x3i = ixheaacd_sub32_sat(x1i, ixheaacd_shl32_sat(x3i, 1));
+ inp += (h2);
- x0r = ixheaacd_add32_sat(x0r, x1r);
- x0i = ixheaacd_add32_sat(x0i, x1i);
- x1r = ixheaacd_sub32_sat(x0r, ixheaacd_shl32_sat(x1r, 1));
- x1i = ixheaacd_sub32_sat(x0i, ixheaacd_shl32_sat(x1i, 1));
- x2r = ixheaacd_add32_sat(x2r, x3i);
- x2i = ixheaacd_sub32_sat(x2i, x3r);
- x3i = ixheaacd_sub32_sat(x2r, ixheaacd_shl32_sat(x3i, 1));
- x3r = ixheaacd_add32_sat(x2i, ixheaacd_shl32_sat(x3r, 1));
+ x0r = *inp;
+ x0i = *(inp + 1);
+ inp += 16;
- *data = x0r;
- *(data + 1) = x0i;
- data += (del << 1);
+ x1r = *inp;
+ x1i = *(inp + 1);
+ inp += 16;
- *data = x2r;
- *(data + 1) = x2i;
- data += (del << 1);
+ x2r = *inp;
+ x2i = *(inp + 1);
+ inp += 16;
- *data = x1r;
- *(data + 1) = x1i;
- data += (del << 1);
+ x3r = *inp;
+ x3i = *(inp + 1);
- *data = x3i;
- *(data + 1) = x3r;
- data += (del << 1);
- }
- data -= 2 * npoints;
- data += 2;
+ x0r = x0r + x2r;
+ x0i = x0i + x2i;
+
+ tmk = x0r - x2r;
+ x2r = tmk - x2r;
+ tmk = x0i - x2i;
+ x2i = tmk - x2i;
+
+ x1r = x1r + x3r;
+ x1i = x1i + x3i;
+
+ tmk = x1r - x3r;
+ x3r = tmk - x3r;
+ tmk = x1i - x3i;
+ x3i = tmk - x3i;
+
+ x0r = x0r + x1r;
+ x0i = x0i + x1i;
+
+ tmk = x0r - x1r;
+ x1r = tmk - x1r;
+ tmk = x0i - x1i;
+ x1i = tmk - x1i;
+
+ x2r = x2r + x3i;
+ x2i = x2i - x3r;
+
+ tmk = x2r - x3i;
+ x3i = tmk - x3i;
+ tmk = x2i + x3r;
+ x3r = tmk + x3r;
+
+ *ptr_z++ = x0r;
+ *ptr_z++ = x0i;
+ *ptr_z++ = x2r;
+ *ptr_z++ = x2i;
+ *ptr_z++ = x1r;
+ *ptr_z++ = x1i;
+ *ptr_z++ = x3i;
+ *ptr_z++ = x3r;
+ }
+ ptr_y -= 64;
+ ptr_z -= 64;
+ {
+ FLOAT32 *data_r = ptr_y;
+ FLOAT32 *data_i = ptr_z;
+ for (k = 2; k != 0; k--) {
+ FLOAT32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
+
+ x0r = (*data_r);
+ x0i = (*(data_r + 1));
+ data_r += 8;
+
+ x1r = (*data_r);
+ x1i = (*(data_r + 1));
+ data_r += 8;
+
+ x2r = (*data_r);
+ x2i = (*(data_r + 1));
+ data_r += 8;
+
+ x3r = (*data_r);
+ x3i = (*(data_r + 1));
+ data_r -= 24;
+
+ x0r = x0r + x2r;
+ x0i = x0i + x2i;
+ x2r = x0r - (x2r * 2);
+ x2i = x0i - (x2i * 2);
+ x1r = x1r + x3r;
+ x1i = x1i + x3i;
+ x3r = x1r - (x3r * 2);
+ x3i = x1i - (x3i * 2);
+
+ x0r = x0r + x1r;
+ x0i = x0i + x1i;
+ x1r = x0r - (x1r * 2);
+ x1i = x0i - (x1i * 2);
+ x2r = x2r + x3i;
+ x2i = x2i - x3r;
+ x3i = x2r - (x3i * 2);
+ x3r = x2i + (x3r * 2);
+
+ *data_r = x0r;
+ *(data_r + 1) = x0i;
+ data_r += 8;
+
+ *data_r = x2r;
+ *(data_r + 1) = x2i;
+ data_r += 8;
+
+ *data_r = x1r;
+ *(data_r + 1) = x1i;
+ data_r += 8;
+
+ *data_r = x3i;
+ *(data_r + 1) = x3r;
+ data_r += 8;
+
+ x0r = (*data_i);
+ x0i = (*(data_i + 1));
+ data_i += 8;
+
+ x1r = (*data_i);
+ x1i = (*(data_i + 1));
+ data_i += 8;
+
+ x2r = (*data_i);
+ x2i = (*(data_i + 1));
+ data_i += 8;
+
+ x3r = (*data_i);
+ x3i = (*(data_i + 1));
+ data_i -= 24;
+
+ x0r = x0r + x2r;
+ x0i = x0i + x2i;
+ x2r = x0r - (x2r * 2);
+ x2i = x0i - (x2i * 2);
+ x1r = x1r + x3r;
+ x1i = x1i + x3i;
+ x3r = x1r - (x3r * 2);
+ x3i = x1i - (x3i * 2);
+
+ x0r = x0r + x1r;
+ x0i = x0i + x1i;
+ x1r = x0r - (x1r * 2);
+ x1i = x0i - (x1i * 2);
+ x2r = x2r + x3i;
+ x2i = x2i - x3r;
+ x3i = x2r - (x3i * 2);
+ x3r = x2i + (x3r * 2);
+
+ *data_i = x0r;
+ *(data_i + 1) = x0i;
+ data_i += 8;
+
+ *data_i = x2r;
+ *(data_i + 1) = x2i;
+ data_i += 8;
+
+ *data_i = x1r;
+ *(data_i + 1) = x1i;
+ data_i += 8;
+
+ *data_i = x3i;
+ *(data_i + 1) = x3r;
+ data_i += 8;
}
- for (; j <= (nodespacing * del) >> 1; j += nodespacing) {
- w1h = *(twiddles + 2 * j);
- w2h = *(twiddles + 2 * (j << 1));
- w3h = *(twiddles + 2 * j + 2 * (j << 1) - 512);
- w1l = *(twiddles + 2 * j + 1);
- w2l = *(twiddles + 2 * (j << 1) + 1);
- w3l = *(twiddles + 2 * j + 2 * (j << 1) - 511);
-
- for (k = in_loop_cnt; k != 0; k--) {
- WORD32 tmp;
- WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
-
- data += (del << 1);
-
- x1r = *data;
- x1i = *(data + 1);
- data += (del << 1);
-
- x2r = *data;
- x2i = *(data + 1);
- data += (del << 1);
-
- x3r = *data;
- x3i = *(data + 1);
- data -= 3 * (del << 1);
-
- tmp = ixheaacd_sub32_sat(ixheaacd_mult32_sat(x1r, w1l),
- ixheaacd_mult32_sat(x1i, w1h));
- x1i = ixheaacd_mac32_sat(ixheaacd_mult32_sat(x1r, w1h), x1i, w1l);
- x1r = tmp;
-
- tmp = ixheaacd_sub32_sat(ixheaacd_mult32_sat(x2r, w2l),
- ixheaacd_mult32_sat(x2i, w2h));
- x2i = ixheaacd_mac32_sat(ixheaacd_mult32_sat(x2r, w2h), x2i, w2l);
- x2r = tmp;
-
- tmp = ixheaacd_add32_sat(ixheaacd_mult32_sat(x3r, w3h),
- ixheaacd_mult32_sat(x3i, w3l));
- x3i = ixheaacd_sub32_sat(ixheaacd_mult32_sat(x3i, w3h),
- ixheaacd_mult32_sat(x3r, w3l));
- x3r = tmp;
-
- x0r = (*data);
- x0i = (*(data + 1));
-
- x0r = ixheaacd_add32_sat(x0r, x2r);
- x0i = ixheaacd_add32_sat(x0i, x2i);
- x2r = ixheaacd_sub32_sat(x0r, ixheaacd_shl32_sat(x2r, 1));
- x2i = ixheaacd_sub32_sat(x0i, ixheaacd_shl32_sat(x2i, 1));
- x1r = ixheaacd_add32_sat(x1r, x3r);
- x1i = ixheaacd_add32_sat(x1i, x3i);
- x3r = ixheaacd_sub32_sat(x1r, ixheaacd_shl32_sat(x3r, 1));
- x3i = ixheaacd_sub32_sat(x1i, ixheaacd_shl32_sat(x3i, 1));
-
- x0r = ixheaacd_add32_sat(x0r, x1r);
- x0i = ixheaacd_add32_sat(x0i, x1i);
- x1r = ixheaacd_sub32_sat(x0r, ixheaacd_shl32_sat(x1r, 1));
- x1i = ixheaacd_sub32_sat(x0i, ixheaacd_shl32_sat(x1i, 1));
- x2r = ixheaacd_add32_sat(x2r, x3i);
- x2i = ixheaacd_sub32_sat(x2i, x3r);
- x3i = ixheaacd_sub32_sat(x2r, ixheaacd_shl32_sat(x3i, 1));
- x3r = ixheaacd_add32_sat(x2i, ixheaacd_shl32_sat(x3r, 1));
-
- *data = x0r;
- *(data + 1) = x0i;
- data += (del << 1);
-
- *data = x2r;
- *(data + 1) = x2i;
- data += (del << 1);
-
- *data = x1r;
- *(data + 1) = x1i;
- data += (del << 1);
-
- *data = x3i;
- *(data + 1) = x3r;
- data += (del << 1);
- }
- data -= 2 * npoints;
- data += 2;
+ data_r = ptr_y + 2;
+ data_i = ptr_z + 2;
+
+ for (k = 2; k != 0; k--) {
+ FLOAT32 tmp;
+ FLOAT32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
+
+ data_r += 8;
+
+ x1r = *data_r;
+ x1i = *(data_r + 1);
+ data_r += 8;
+
+ x2r = *data_r;
+ x2i = *(data_r + 1);
+ data_r += 8;
+
+ x3r = *data_r;
+ x3i = *(data_r + 1);
+ data_r -= 24;
+
+ tmp = (FLOAT32)(mult32X32float((FLOAT32)x1r, 0.923880f) -
+ mult32X32float((FLOAT32)x1i, -0.382683f));
+ x1i = (FLOAT32)mac32X32float(mult32X32float((FLOAT32)x1r, -0.382683f),
+ (FLOAT32)x1i, 0.923880f);
+ x1r = tmp;
+
+ tmp = (FLOAT32)(mult32X32float((FLOAT32)x2r, 0.707107f) -
+ mult32X32float((FLOAT32)x2i, -0.707107f));
+ x2i = (FLOAT32)mac32X32float(mult32X32float((FLOAT32)x2r, -0.707107f),
+ (FLOAT32)x2i, 0.707107f);
+ x2r = tmp;
+
+ tmp = (FLOAT32)(mult32X32float((FLOAT32)x3r, 0.382683f) -
+ mult32X32float((FLOAT32)x3i, -0.923880f));
+ x3i = (FLOAT32)mac32X32float(mult32X32float((FLOAT32)x3r, -0.923880f),
+ (FLOAT32)x3i, 0.382683f);
+ x3r = tmp;
+
+ x0r = (*data_r);
+ x0i = (*(data_r + 1));
+
+ x0r = x0r + (x2r);
+ x0i = x0i + (x2i);
+ x2r = x0r - (x2r * 2);
+ x2i = x0i - (x2i * 2);
+ x1r = x1r + x3r;
+ x1i = x1i + x3i;
+ x3r = x1r - (x3r * 2);
+ x3i = x1i - (x3i * 2);
+
+ x0r = x0r + (x1r);
+ x0i = x0i + (x1i);
+ x1r = x0r - (x1r * 2);
+ x1i = x0i - (x1i * 2);
+ x2r = x2r + (x3i);
+ x2i = x2i - (x3r);
+ x3i = x2r - (x3i * 2);
+ x3r = x2i + (x3r * 2);
+
+ *data_r = x0r;
+ *(data_r + 1) = x0i;
+ data_r += 8;
+
+ *data_r = x2r;
+ *(data_r + 1) = x2i;
+ data_r += 8;
+
+ *data_r = x1r;
+ *(data_r + 1) = x1i;
+ data_r += 8;
+
+ *data_r = x3i;
+ *(data_r + 1) = x3r;
+ data_r += 8;
+ data_i += 8;
+
+ x1r = *data_i;
+ x1i = *(data_i + 1);
+ data_i += 8;
+
+ x2r = *data_i;
+ x2i = *(data_i + 1);
+ data_i += 8;
+
+ x3r = *data_i;
+ x3i = *(data_i + 1);
+ data_i -= 24;
+
+ tmp = (FLOAT32)(mult32X32float((FLOAT32)x1r, 0.923880f) -
+ mult32X32float((FLOAT32)x1i, -0.382683f));
+ x1i = (FLOAT32)mac32X32float(mult32X32float((FLOAT32)x1r, -0.382683f),
+ (FLOAT32)x1i, 0.923880f);
+ x1r = tmp;
+
+ tmp = (FLOAT32)(mult32X32float((FLOAT32)x2r, 0.707107f) -
+ mult32X32float((FLOAT32)x2i, -0.707107f));
+ x2i = (FLOAT32)mac32X32float(mult32X32float((FLOAT32)x2r, -0.707107f),
+ (FLOAT32)x2i, 0.707107f);
+ x2r = tmp;
+
+ tmp = (FLOAT32)(mult32X32float((FLOAT32)x3r, 0.382683f) -
+ mult32X32float((FLOAT32)x3i, -0.923880f));
+ x3i = (FLOAT32)mac32X32float(mult32X32float((FLOAT32)x3r, -0.923880f),
+ (FLOAT32)x3i, 0.382683f);
+ x3r = tmp;
+
+ x0r = (*data_i);
+ x0i = (*(data_i + 1));
+
+ x0r = x0r + (x2r);
+ x0i = x0i + (x2i);
+ x2r = x0r - (x2r * 2);
+ x2i = x0i - (x2i * 2);
+ x1r = x1r + x3r;
+ x1i = x1i + x3i;
+ x3r = x1r - (x3r * 2);
+ x3i = x1i - (x3i * 2);
+
+ x0r = x0r + (x1r);
+ x0i = x0i + (x1i);
+ x1r = x0r - (x1r * 2);
+ x1i = x0i - (x1i * 2);
+ x2r = x2r + (x3i);
+ x2i = x2i - (x3r);
+ x3i = x2r - (x3i * 2);
+ x3r = x2i + (x3r * 2);
+
+ *data_i = x0r;
+ *(data_i + 1) = x0i;
+ data_i += 8;
+
+ *data_i = x2r;
+ *(data_i + 1) = x2i;
+ data_i += 8;
+
+ *data_i = x1r;
+ *(data_i + 1) = x1i;
+ data_i += 8;
+
+ *data_i = x3i;
+ *(data_i + 1) = x3r;
+ data_i += 8;
}
- for (; j <= sec_loop_cnt * 2; j += nodespacing) {
- w1h = *(twiddles + 2 * j);
- w2h = *(twiddles + 2 * (j << 1) - 512);
- w3h = *(twiddles + 2 * j + 2 * (j << 1) - 512);
- w1l = *(twiddles + 2 * j + 1);
- w2l = *(twiddles + 2 * (j << 1) - 511);
- w3l = *(twiddles + 2 * j + 2 * (j << 1) - 511);
-
- for (k = in_loop_cnt; k != 0; k--) {
- WORD32 tmp;
- WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
-
- data += (del << 1);
-
- x1r = *data;
- x1i = *(data + 1);
- data += (del << 1);
-
- x2r = *data;
- x2i = *(data + 1);
- data += (del << 1);
-
- x3r = *data;
- x3i = *(data + 1);
- data -= 3 * (del << 1);
-
- tmp = ixheaacd_sub32_sat(ixheaacd_mult32_sat(x1r, w1l),
- ixheaacd_mult32_sat(x1i, w1h));
- x1i = ixheaacd_mac32_sat(ixheaacd_mult32_sat(x1r, w1h), x1i, w1l);
- x1r = tmp;
-
- tmp = ixheaacd_add32_sat(ixheaacd_mult32_sat(x2r, w2h),
- ixheaacd_mult32_sat(x2i, w2l));
- x2i = ixheaacd_sub32_sat(ixheaacd_mult32_sat(x2i, w2h),
- ixheaacd_mult32_sat(x2r, w2l));
- x2r = tmp;
-
- tmp = ixheaacd_add32_sat(ixheaacd_mult32_sat(x3r, w3h),
- ixheaacd_mult32_sat(x3i, w3l));
- x3i = ixheaacd_sub32_sat(ixheaacd_mult32_sat(x3i, w3h),
- ixheaacd_mult32_sat(x3r, w3l));
- x3r = tmp;
-
- x0r = (*data);
- x0i = (*(data + 1));
-
- x0r = ixheaacd_add32_sat(x0r, x2r);
- x0i = ixheaacd_add32_sat(x0i, x2i);
- x2r = ixheaacd_sub32_sat(x0r, ixheaacd_shl32_sat(x2r, 1));
- x2i = ixheaacd_sub32_sat(x0i, ixheaacd_shl32_sat(x2i, 1));
- x1r = ixheaacd_add32_sat(x1r, x3r);
- x1i = ixheaacd_add32_sat(x1i, x3i);
- x3r = ixheaacd_sub32_sat(x1r, ixheaacd_shl32_sat(x3r, 1));
- x3i = ixheaacd_sub32_sat(x1i, ixheaacd_shl32_sat(x3i, 1));
-
- x0r = ixheaacd_add32_sat(x0r, x1r);
- x0i = ixheaacd_add32_sat(x0i, x1i);
- x1r = ixheaacd_sub32_sat(x0r, ixheaacd_shl32_sat(x1r, 1));
- x1i = ixheaacd_sub32_sat(x0i, ixheaacd_shl32_sat(x1i, 1));
- x2r = ixheaacd_add32_sat(x2r, x3i);
- x2i = ixheaacd_sub32_sat(x2i, x3r);
- x3i = ixheaacd_sub32_sat(x2r, ixheaacd_shl32_sat(x3i, 1));
- x3r = ixheaacd_add32_sat(x2i, ixheaacd_shl32_sat(x3r, 1));
-
- *data = x0r;
- *(data + 1) = x0i;
- data += (del << 1);
-
- *data = x2r;
- *(data + 1) = x2i;
- data += (del << 1);
-
- *data = x1r;
- *(data + 1) = x1i;
- data += (del << 1);
-
- *data = x3i;
- *(data + 1) = x3r;
- data += (del << 1);
- }
- data -= 2 * npoints;
- data += 2;
+ data_r -= 62;
+ data_i -= 62;
+ for (k = 2; k != 0; k--) {
+ FLOAT32 tmp;
+ FLOAT32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
+
+ data_r += 8;
+
+ x1r = *data_r;
+ x1i = *(data_r + 1);
+ data_r += 8;
+
+ x2r = *data_r;
+ x2i = *(data_r + 1);
+ data_r += 8;
+
+ x3r = *data_r;
+ x3i = *(data_r + 1);
+ data_r -= 24;
+
+ tmp = (FLOAT32)(mult32X32float((FLOAT32)x1r, 0.707107f) -
+ mult32X32float((FLOAT32)x1i, -0.707107f));
+ x1i = (FLOAT32)mac32X32float(mult32X32float((FLOAT32)x1r, -0.707107f),
+ (FLOAT32)x1i, 0.707107f);
+ x1r = tmp;
+
+ tmp = x2i;
+ x2i = -x2r;
+ x2r = tmp;
+
+ tmp = (FLOAT32)(mult32X32float((FLOAT32)x3r, -0.707107f) +
+ mult32X32float((FLOAT32)x3i, 0.707107f));
+ x3i = (FLOAT32)(-mult32X32float((FLOAT32)x3r, 0.707107f) +
+ mult32X32float((FLOAT32)x3i, -0.707107f));
+ x3r = tmp;
+
+ x0r = (*data_r);
+ x0i = (*(data_r + 1));
+
+ x0r = x0r + (x2r);
+ x0i = x0i + (x2i);
+ x2r = x0r - (x2r * 2);
+ x2i = x0i - (x2i * 2);
+ x1r = x1r + x3r;
+ x1i = x1i + x3i;
+ x3r = x1r - (x3r * 2);
+ x3i = x1i - (x3i * 2);
+
+ x0r = x0r + (x1r);
+ x0i = x0i + (x1i);
+ x1r = x0r - (x1r * 2);
+ x1i = x0i - (x1i * 2);
+ x2r = x2r + (x3i);
+ x2i = x2i - (x3r);
+ x3i = x2r - (x3i * 2);
+ x3r = x2i + (x3r * 2);
+
+ *data_r = x0r;
+ *(data_r + 1) = x0i;
+ data_r += 8;
+
+ *data_r = x2r;
+ *(data_r + 1) = x2i;
+ data_r += 8;
+
+ *data_r = x1r;
+ *(data_r + 1) = x1i;
+ data_r += 8;
+
+ *data_r = x3i;
+ *(data_r + 1) = x3r;
+ data_r += 8;
+ data_i += 8;
+
+ x1r = *data_i;
+ x1i = *(data_i + 1);
+ data_i += 8;
+
+ x2r = *data_i;
+ x2i = *(data_i + 1);
+ data_i += 8;
+
+ x3r = *data_i;
+ x3i = *(data_i + 1);
+ data_i -= 24;
+
+ tmp = (FLOAT32)(mult32X32float((FLOAT32)x1r, 0.707107f) -
+ mult32X32float((FLOAT32)x1i, -0.707107f));
+ x1i = (FLOAT32)mac32X32float(mult32X32float((FLOAT32)x1r, -0.707107f),
+ (FLOAT32)x1i, 0.707107f);
+ x1r = tmp;
+
+ tmp = x2i;
+ x2i = -x2r;
+ x2r = tmp;
+
+ tmp = (FLOAT32)(mult32X32float((FLOAT32)x3r, -0.707107f) +
+ mult32X32float((FLOAT32)x3i, 0.707107f));
+ x3i = (FLOAT32)(-mult32X32float((FLOAT32)x3r, 0.707107f) +
+ mult32X32float((FLOAT32)x3i, -0.707107f));
+ x3r = tmp;
+
+ x0r = (*data_i);
+ x0i = (*(data_i + 1));
+
+ x0r = x0r + (x2r);
+ x0i = x0i + (x2i);
+ x2r = x0r - (x2r * 2);
+ x2i = x0i - (x2i * 2);
+ x1r = x1r + x3r;
+ x1i = x1i + x3i;
+ x3r = x1r - (x3r * 2);
+ x3i = x1i - (x3i * 2);
+
+ x0r = x0r + (x1r);
+ x0i = x0i + (x1i);
+ x1r = x0r - (x1r * 2);
+ x1i = x0i - (x1i * 2);
+ x2r = x2r + (x3i);
+ x2i = x2i - (x3r);
+ x3i = x2r - (x3i * 2);
+ x3r = x2i + (x3r * 2);
+
+ *data_i = x0r;
+ *(data_i + 1) = x0i;
+ data_i += 8;
+
+ *data_i = x2r;
+ *(data_i + 1) = x2i;
+ data_i += 8;
+
+ *data_i = x1r;
+ *(data_i + 1) = x1i;
+ data_i += 8;
+
+ *data_i = x3i;
+ *(data_i + 1) = x3r;
+ data_i += 8;
}
- for (; j < nodespacing * del; j += nodespacing) {
- w1h = *(twiddles + 2 * j);
- w2h = *(twiddles + 2 * (j << 1) - 512);
- w3h = *(twiddles + 2 * j + 2 * (j << 1) - 1024);
- w1l = *(twiddles + 2 * j + 1);
- w2l = *(twiddles + 2 * (j << 1) - 511);
- w3l = *(twiddles + 2 * j + 2 * (j << 1) - 1023);
-
- for (k = in_loop_cnt; k != 0; k--) {
- WORD32 tmp;
- WORD32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
-
- data += (del << 1);
-
- x1r = *data;
- x1i = *(data + 1);
- data += (del << 1);
-
- x2r = *data;
- x2i = *(data + 1);
- data += (del << 1);
-
- x3r = *data;
- x3i = *(data + 1);
- data -= 3 * (del << 1);
-
- tmp = ixheaacd_sub32_sat(ixheaacd_mult32_sat(x1r, w1l),
- ixheaacd_mult32_sat(x1i, w1h));
- x1i = ixheaacd_mac32_sat(ixheaacd_mult32_sat(x1r, w1h), x1i, w1l);
- x1r = tmp;
-
- tmp = ixheaacd_add32_sat(ixheaacd_mult32_sat(x2r, w2h),
- ixheaacd_mult32_sat(x2i, w2l));
- x2i = ixheaacd_sub32_sat(ixheaacd_mult32_sat(x2i, w2h),
- ixheaacd_mult32_sat(x2r, w2l));
- x2r = tmp;
-
- tmp = ixheaacd_sub32_sat(ixheaacd_mult32_sat(x3i, w3h),
- ixheaacd_mult32_sat(x3r, w3l));
- x3i = ixheaacd_mac32_sat(ixheaacd_mult32_sat(x3r, w3h), x3i, w3l);
- x3r = tmp;
-
- x0r = (*data);
- x0i = (*(data + 1));
-
- x0r = ixheaacd_add32_sat(x0r, x2r);
- x0i = ixheaacd_add32_sat(x0i, x2i);
- x2r = ixheaacd_sub32_sat(x0r, ixheaacd_shl32_sat(x2r, 1));
- x2i = ixheaacd_sub32_sat(x0i, ixheaacd_shl32_sat(x2i, 1));
- x1r = ixheaacd_add32_sat(x1r, x3r);
- x1i = ixheaacd_sub32_sat(x1i, x3i);
- x3r = ixheaacd_sub32_sat(x1r, ixheaacd_shl32_sat(x3r, 1));
- x3i = ixheaacd_add32_sat(x1i, ixheaacd_shl32_sat(x3i, 1));
-
- x0r = ixheaacd_add32_sat(x0r, x1r);
- x0i = ixheaacd_add32_sat(x0i, x1i);
- x1r = ixheaacd_sub32_sat(x0r, ixheaacd_shl32_sat(x1r, 1));
- x1i = ixheaacd_sub32_sat(x0i, ixheaacd_shl32_sat(x1i, 1));
- x2r = ixheaacd_add32_sat(x2r, x3i);
- x2i = ixheaacd_sub32_sat(x2i, x3r);
- x3i = ixheaacd_sub32_sat(x2r, ixheaacd_shl32_sat(x3i, 1));
- x3r = ixheaacd_add32_sat(x2i, ixheaacd_shl32_sat(x3r, 1));
-
- *data = x0r;
- *(data + 1) = x0i;
- data += (del << 1);
-
- *data = x2r;
- *(data + 1) = x2i;
- data += (del << 1);
-
- *data = x1r;
- *(data + 1) = x1i;
- data += (del << 1);
-
- *data = x3i;
- *(data + 1) = x3r;
- data += (del << 1);
- }
- data -= 2 * npoints;
- data += 2;
+ data_r -= 62;
+ data_i -= 62;
+ for (k = 2; k != 0; k--) {
+ FLOAT32 tmp;
+ FLOAT32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
+
+ data_r += 8;
+
+ x1r = *data_r;
+ x1i = *(data_r + 1);
+ data_r += 8;
+
+ x2r = *data_r;
+ x2i = *(data_r + 1);
+ data_r += 8;
+
+ x3r = *data_r;
+ x3i = *(data_r + 1);
+ data_r -= 24;
+
+ tmp = (FLOAT32)(mult32X32float((FLOAT32)x1r, 0.382683f) -
+ mult32X32float((FLOAT32)x1i, -0.923880f));
+ x1i = (FLOAT32)mac32X32float(mult32X32float((FLOAT32)x1r, -0.923880f),
+ (FLOAT32)x1i, 0.382683f);
+ x1r = tmp;
+
+ tmp = (FLOAT32)(mult32X32float((FLOAT32)x2r, -0.707107f) +
+ mult32X32float((FLOAT32)x2i, 0.707107f));
+ x2i = (FLOAT32)(-mult32X32float((FLOAT32)x2r, 0.707107f) +
+ mult32X32float((FLOAT32)x2i, -0.707107f));
+ x2r = tmp;
+
+ tmp = (FLOAT32)(-mult32X32float((FLOAT32)x3r, 0.923880f) +
+ mult32X32float((FLOAT32)x3i, -0.382683f));
+ x3i = (FLOAT32)mac32X32float(mult32X32float((FLOAT32)x3r, -0.382683f),
+ (FLOAT32)x3i, 0.923880f);
+ x3r = tmp;
+
+ x0r = (*data_r);
+ x0i = (*(data_r + 1));
+
+ x0r = x0r + (x2r);
+ x0i = x0i + (x2i);
+ x2r = x0r - (x2r * 2);
+ x2i = x0i - (x2i * 2);
+ x1r = x1r + x3r;
+ x1i = x1i - x3i;
+ x3r = x1r - (x3r * 2);
+ x3i = x1i + (x3i * 2);
+
+ x0r = x0r + (x1r);
+ x0i = x0i + (x1i);
+ x1r = x0r - (x1r * 2);
+ x1i = x0i - (x1i * 2);
+ x2r = x2r + (x3i);
+ x2i = x2i - (x3r);
+ x3i = x2r - (x3i * 2);
+ x3r = x2i + (x3r * 2);
+
+ *data_r = x0r;
+ *(data_r + 1) = x0i;
+ data_r += 8;
+
+ *data_r = x2r;
+ *(data_r + 1) = x2i;
+ data_r += 8;
+
+ *data_r = x1r;
+ *(data_r + 1) = x1i;
+ data_r += 8;
+
+ *data_r = x3i;
+ *(data_r + 1) = x3r;
+ data_r += 8;
+ data_i += 8;
+
+ x1r = *data_i;
+ x1i = *(data_i + 1);
+ data_i += 8;
+
+ x2r = *data_i;
+ x2i = *(data_i + 1);
+ data_i += 8;
+
+ x3r = *data_i;
+ x3i = *(data_i + 1);
+ data_i -= 24;
+
+ tmp = (FLOAT32)(mult32X32float((FLOAT32)x1r, 0.382683f) -
+ mult32X32float((FLOAT32)x1i, -0.923880f));
+ x1i = (FLOAT32)mac32X32float(mult32X32float((FLOAT32)x1r, -0.923880f),
+ (FLOAT32)x1i, 0.382683f);
+ x1r = tmp;
+
+ tmp = (FLOAT32)(mult32X32float((FLOAT32)x2r, -0.707107f) +
+ mult32X32float((FLOAT32)x2i, 0.707107f));
+ x2i = (FLOAT32)(-mult32X32float((FLOAT32)x2r, 0.707107f) +
+ mult32X32float((FLOAT32)x2i, -0.707107f));
+ x2r = tmp;
+
+ tmp = (FLOAT32)(-mult32X32float((FLOAT32)x3r, 0.923880f) +
+ mult32X32float((FLOAT32)x3i, -0.382683f));
+ x3i = (FLOAT32)mac32X32float(mult32X32float((FLOAT32)x3r, -0.382683f),
+ (FLOAT32)x3i, 0.923880f);
+ x3r = tmp;
+
+ x0r = (*data_i);
+ x0i = (*(data_i + 1));
+
+ x0r = x0r + (x2r);
+ x0i = x0i + (x2i);
+ x2r = x0r - (x2r * 2);
+ x2i = x0i - (x2i * 2);
+ x1r = x1r + x3r;
+ x1i = x1i - x3i;
+ x3r = x1r - (x3r * 2);
+ x3i = x1i + (x3i * 2);
+
+ x0r = x0r + (x1r);
+ x0i = x0i + (x1i);
+ x1r = x0r - (x1r * 2);
+ x1i = x0i - (x1i * 2);
+ x2r = x2r + (x3i);
+ x2i = x2i - (x3r);
+ x3i = x2r - (x3i * 2);
+ x3r = x2i + (x3r * 2);
+
+ *data_i = x0r;
+ *(data_i + 1) = x0i;
+ data_i += 8;
+
+ *data_i = x2r;
+ *(data_i + 1) = x2i;
+ data_i += 8;
+
+ *data_i = x1r;
+ *(data_i + 1) = x1i;
+ data_i += 8;
+
+ *data_i = x3i;
+ *(data_i + 1) = x3r;
+ data_i += 8;
}
- nodespacing >>= 2;
- del <<= 2;
- in_loop_cnt >>= 2;
+ data_r -= 62;
+ data_i -= 62;
}
-
- for (i = 0; i < 2 * nlength; i += 2) {
- fin_re[i] = y[i];
- fin_im[i] = y[i + 1];
+ {
+ const FLOAT32 *twiddles = ptr_w;
+ FLOAT32 x0r, x0i, x1r, x1i;
+ for (j = 8; j != 0; j--) {
+ FLOAT32 W1 = *twiddles;
+ twiddles++;
+ FLOAT32 W4 = *twiddles;
+ twiddles++;
+ FLOAT32 tmp;
+
+ x0r = *ptr_y;
+ x0i = *(ptr_y + 1);
+ ptr_y += 32;
+ ptr_xr += 32;
+
+ x1r = *ptr_y;
+ x1i = *(ptr_y + 1);
+
+ tmp = (FLOAT32)(mult32X32float((FLOAT32)x1r, W1) -
+ mult32X32float((FLOAT32)x1i, W4));
+ x1i = (FLOAT32)mac32X32float(mult32X32float((FLOAT32)x1r, W4),
+ (FLOAT32)x1i, W1);
+ x1r = tmp;
+
+ *ptr_xr = (x0r) - (x1r);
+ *(ptr_xr + 1) = (x0i) - (x1i);
+ ptr_y -= 32;
+ ptr_xr -= 32;
+
+ *ptr_xr = (x0r) + (x1r);
+ *(ptr_xr + 1) = (x0i) + (x1i);
+ ptr_y += 2;
+ ptr_xr += 2;
+
+ x0r = *ptr_z;
+ x0i = *(ptr_z + 1);
+ ptr_z += 32;
+ ptr_xi += 32;
+
+ x1r = *ptr_z;
+ x1i = *(ptr_z + 1);
+
+ tmp = (FLOAT32)(mult32X32float((FLOAT32)x1r, W1) -
+ mult32X32float((FLOAT32)x1i, W4));
+ x1i = (FLOAT32)mac32X32float(mult32X32float((FLOAT32)x1r, W4),
+ (FLOAT32)x1i, W1);
+ x1r = tmp;
+
+ *ptr_xi = (x0r) - (x1r);
+ *(ptr_xi + 1) = (x0i) - (x1i);
+ ptr_z -= 32;
+ ptr_xi -= 32;
+
+ *ptr_xi = (x0r) + (x1r);
+ *(ptr_xi + 1) = (x0i) + (x1i);
+ ptr_z += 2;
+ ptr_xi += 2;
+ }
+ twiddles = ptr_w;
+ for (j = 8; j != 0; j--) {
+ FLOAT32 W1 = *twiddles;
+ twiddles++;
+ FLOAT32 W4 = *twiddles;
+ twiddles++;
+ FLOAT32 tmp;
+
+ x0r = *ptr_y;
+ x0i = *(ptr_y + 1);
+ ptr_y += 32;
+ ptr_xr += 32;
+
+ x1r = *ptr_y;
+ x1i = *(ptr_y + 1);
+
+ tmp = (FLOAT32)(mult32X32float((FLOAT32)x1r, W4) +
+ mult32X32float((FLOAT32)x1i, W1));
+ x1i = (FLOAT32)(-mult32X32float((FLOAT32)x1r, W1) +
+ mult32X32float((FLOAT32)x1i, W4));
+ x1r = tmp;
+
+ *ptr_xr = (x0r) - (x1r);
+ *(ptr_xr + 1) = (x0i) - (x1i);
+ ptr_y -= 32;
+ ptr_xr -= 32;
+
+ *ptr_xr = (x0r) + (x1r);
+ *(ptr_xr + 1) = (x0i) + (x1i);
+ ptr_y += 2;
+ ptr_xr += 2;
+
+ x0r = *ptr_z;
+ x0i = *(ptr_z + 1);
+ ptr_z += 32;
+ ptr_xi += 32;
+
+ x1r = *ptr_z;
+ x1i = *(ptr_z + 1);
+
+ tmp = (FLOAT32)(mult32X32float((FLOAT32)x1r, W4) +
+ mult32X32float((FLOAT32)x1i, W1));
+ x1i = (FLOAT32)(-mult32X32float((FLOAT32)x1r, W1) +
+ mult32X32float((FLOAT32)x1i, W4));
+ x1r = tmp;
+
+ *ptr_xi = (x0r) - (x1r);
+ *(ptr_xi + 1) = (x0i) - (x1i);
+ ptr_z -= 32;
+ ptr_xi -= 32;
+
+ *ptr_xi = (x0r) + (x1r);
+ *(ptr_xi + 1) = (x0i) + (x1i);
+ ptr_z += 2;
+ ptr_xi += 2;
+ }
}
-
- return;
}
VOID ixheaacd_complex_fft_p2_dec(WORD32 *xr, WORD32 *xi, WORD32 nlength,
@@ -1715,13 +2044,6 @@ VOID ixheaacd_complex_fft_p3(WORD32 *xr, WORD32 *xi, WORD32 nlength,
if (fft_mode < 0) {
for (i = 0; i < nlength; i += 3) {
- tmp = ixheaacd_sub32_sat(ixheaacd_mult32_sat(ptr_x[2 * i], (*w1r)),
- ixheaacd_mult32_sat(ptr_x[2 * i + 1], (*w1i)));
- ptr_x[2 * i + 1] =
- ixheaacd_add32_sat(ixheaacd_mult32_sat(ptr_x[2 * i], (*w1i)),
- ixheaacd_mult32_sat(ptr_x[2 * i + 1], (*w1r)));
- ptr_x[2 * i] = tmp;
-
w1r++;
w1i++;
@@ -1749,13 +2071,6 @@ VOID ixheaacd_complex_fft_p3(WORD32 *xr, WORD32 *xi, WORD32 nlength,
else {
for (i = 0; i < nlength; i += 3) {
- tmp = ixheaacd_add32_sat(ixheaacd_mult32_sat(ptr_x[2 * i], (*w1r)),
- ixheaacd_mult32_sat(ptr_x[2 * i + 1], (*w1i)));
- ptr_x[2 * i + 1] =
- ixheaacd_sub32_sat(ixheaacd_mult32_sat(ptr_x[2 * i + 1], (*w1r)),
- ixheaacd_mult32_sat(ptr_x[2 * i], (*w1i)));
- ptr_x[2 * i] = tmp;
-
w1r++;
w1i++;
@@ -1789,20 +2104,16 @@ VOID ixheaacd_complex_fft_p3(WORD32 *xr, WORD32 *xi, WORD32 nlength,
ptr_y = ptr_y + 6;
}
+ ptr_y = y;
for (i = 0; i < mpass; i++) {
- xr[i] = y[6 * i];
- xi[i] = y[6 * i + 1];
- }
-
- for (i = 0; i < mpass; i++) {
- xr[mpass + i] = y[6 * i + 2];
- xi[mpass + i] = y[6 * i + 3];
+ xr[i] = *ptr_y++;
+ xi[i] = *ptr_y++;
+ xr[mpass + i] = *ptr_y++;
+ xi[mpass + i] = *ptr_y++;
+ xr[2 * mpass + i] = *ptr_y++;
+ xi[2 * mpass + i] = *ptr_y++;
}
- for (i = 0; i < mpass; i++) {
- xr[2 * mpass + i] = y[6 * i + 4];
- xi[2 * mpass + i] = y[6 * i + 5];
- }
return;
}
diff --git a/decoder/ixheaacd_function_selector.h b/decoder/ixheaacd_function_selector.h
index daa5aac..b2882f8 100644
--- a/decoder/ixheaacd_function_selector.h
+++ b/decoder/ixheaacd_function_selector.h
@@ -61,7 +61,7 @@ extern VOID (*ixheaacd_covariance_matrix_calc)(WORD32 *,
WORD32);
extern VOID (*ixheaacd_covariance_matrix_calc_2)(
ixheaacd_lpp_trans_cov_matrix *, WORD32 *, WORD32, WORD16);
-extern VOID (*ixheaacd_over_lap_add1)(WORD32 *, WORD32 *, WORD16 *,
+extern VOID (*ixheaacd_over_lap_add1)(WORD32 *, WORD32 *, WORD32 *,
const WORD16 *, WORD16, WORD16, WORD16);
extern VOID (*ixheaacd_over_lap_add2)(WORD32 *, WORD32 *, WORD32 *,
const WORD16 *, WORD16, WORD16, WORD16);
@@ -119,19 +119,19 @@ extern WORD32 (*ixheaacd_calc_max_spectral_line)(WORD32 *, WORD32);
extern VOID (*ixheaacd_post_twiddle)(WORD32[], WORD32[],
ia_aac_dec_imdct_tables_struct *, WORD);
-extern VOID (*ixheaacd_post_twid_overlap_add)(WORD16[], WORD32[],
+extern VOID (*ixheaacd_post_twid_overlap_add)(WORD32[], WORD32[],
ia_aac_dec_imdct_tables_struct *,
WORD, WORD32 *, WORD16,
const WORD16 *, WORD16);
-extern VOID (*ixheaacd_neg_shift_spec)(WORD32 *, WORD16 *, WORD16, WORD16);
+extern VOID (*ixheaacd_neg_shift_spec)(WORD32 *, WORD32 *, WORD16, WORD16);
extern VOID (*ixheaacd_spec_to_overlapbuf)(WORD32 *, WORD32 *, WORD32, WORD32);
-extern VOID (*ixheaacd_overlap_buf_out)(WORD16 *, WORD32 *, WORD32,
+extern VOID (*ixheaacd_overlap_buf_out)(WORD32 *, WORD32 *, WORD32,
const WORD16);
-extern VOID (*ixheaacd_overlap_out_copy)(WORD16 *, WORD32 *, WORD32 *,
+extern VOID (*ixheaacd_overlap_out_copy)(WORD32 *, WORD32 *, WORD32 *,
const WORD16);
extern VOID (*ixheaacd_pretwiddle_compute)(WORD32 *, WORD32 *, WORD32 *,
@@ -144,19 +144,6 @@ extern VOID (*ixheaacd_imdct_using_fft)(ia_aac_dec_imdct_tables_struct *,
extern VOID (*ixheaacd_complex_fft_p2)(WORD32 *xr, WORD32 *xi, WORD32 nlength,
WORD32 fft_mode, WORD32 *preshift);
-extern VOID (*ixheaacd_mps_complex_fft_64)(WORD32 *ptr_x, WORD32 *fin_re,
- WORD32 *fin_im, WORD32 nlength);
-
-extern VOID (*ixheaacd_mps_synt_pre_twiddle)(WORD32 *ptr_in,
- const WORD32 *table_re,
- const WORD32 *table_im,
- WORD32 resolution);
-
-extern VOID (*ixheaacd_mps_synt_post_twiddle)(WORD32 *ptr_in,
- const WORD32 *table_re,
- const WORD32 *table_im,
- WORD32 resolution);
-
extern VOID (*ixheaacd_calc_pre_twid)(WORD32 *ptr_x, WORD32 *r_ptr,
WORD32 *i_ptr, WORD32 nlength,
const WORD32 *cos_ptr,
@@ -167,12 +154,9 @@ extern VOID (*ixheaacd_calc_post_twid)(WORD32 *ptr_x, WORD32 *r_ptr,
const WORD32 *cos_ptr,
const WORD32 *sin_ptr);
-extern VOID (*ixheaacd_mps_synt_post_fft_twiddle)(
- WORD32 resolution, WORD32 *fin_re, WORD32 *fin_im, const WORD32 *table_re,
- const WORD32 *table_im, WORD32 *state);
-extern VOID (*ixheaacd_mps_synt_out_calc)(WORD32 resolution, WORD32 *out,
- WORD32 *state,
- const WORD32 *filter_coeff);
+extern VOID (*ixheaacd_mps_synt_out_calc)(WORD32 resolution, FLOAT32 *out,
+ FLOAT32 *state,
+ const FLOAT32 *filter_coeff);
extern VOID (*ixheaacd_fft_15_ld)(WORD32 *inp, WORD32 *op, WORD32 *fft3out,
UWORD8 *re_arr_tab_sml_240_ptr);
diff --git a/decoder/ixheaacd_headerdecode.c b/decoder/ixheaacd_headerdecode.c
index 356cf08..2c38ec6 100644
--- a/decoder/ixheaacd_headerdecode.c
+++ b/decoder/ixheaacd_headerdecode.c
@@ -490,6 +490,7 @@ WORD32 ixheaacd_ga_hdr_dec(ia_aac_dec_state_struct *aac_state_struct,
WORD32 cnt_bits = it_bit_buff->cnt_bits;
WORD32 dummy = 0;
UWORD32 aot_init;
+ UWORD32 tmp_aot;
ia_audio_specific_config_struct *pstr_audio_specific_config;
@@ -506,14 +507,20 @@ WORD32 ixheaacd_ga_hdr_dec(ia_aac_dec_state_struct *aac_state_struct,
aot_init = aac_state_struct->audio_object_type;
- aac_state_struct->audio_object_type = ixheaacd_read_bits_buf(it_bit_buff, 5);
+ tmp_aot = ixheaacd_read_bits_buf(it_bit_buff, 5);
- if (aac_state_struct->audio_object_type == 31) {
+ if (tmp_aot == 31) {
tmp = ixheaacd_read_bits_buf(it_bit_buff, 6);
- aac_state_struct->audio_object_type = 32 + tmp;
+ tmp_aot = 32 + tmp;
}
+
+ if (aac_state_struct->header_dec_done || aac_state_struct->ui_init_done) {
+ if (tmp_aot != aot_init && tmp_aot != AOT_SBR && tmp_aot != AOT_PS)
+ return IA_FATAL_ERROR;
+ }
+
pstr_audio_specific_config->audio_object_type =
- aac_state_struct->audio_object_type;
+ aac_state_struct->audio_object_type = tmp_aot;
tmp = ixheaacd_get_samp_rate(it_bit_buff, pstr_samp_rate_info,
pstr_audio_specific_config);
diff --git a/decoder/ixheaacd_interface.h b/decoder/ixheaacd_interface.h
index 4a9c263..3dde0c3 100644
--- a/decoder/ixheaacd_interface.h
+++ b/decoder/ixheaacd_interface.h
@@ -55,8 +55,7 @@ VOID ixheaacd_complex_fft_p2_dec(WORD32 *xr, WORD32 *xi, WORD32 nlength,
VOID ixheaacd_complex_fft_p2_armv7(WORD32 *xr, WORD32 *xi, WORD32 nlength,
WORD32 fft_mode, WORD32 *preshift);
-VOID ixheaacd_mps_complex_fft_64_dec(WORD32 *ptr_x, WORD32 *fin_re,
- WORD32 *fin_im, WORD32 nlength);
+VOID ixheaacd_mps_synth_calc_fft(FLOAT32 *ptr_x, FLOAT32 *ptr_y, WORD32 nPass);
VOID ixheaacd_mps_complex_fft_64_armv7(WORD32 *ptr_x, WORD32 *fin_re,
WORD32 *fin_im, WORD32 nlength);
@@ -71,18 +70,10 @@ VOID ixheaacd_complex_ifft_p2_asm(const WORD32 *table, WORD32 nlength,
VOID ixheaacd_complex_fft_p2_asm(const WORD32 *table, WORD32 nlength,
WORD32 *ptr_x, WORD32 *ptr_y);
-VOID ixheaacd_mps_synt_pre_twiddle_dec(WORD32 *ptr_in, const WORD32 *table_re,
- const WORD32 *table_im,
- WORD32 resolution);
-
VOID ixheaacd_mps_synt_pre_twiddle_armv7(WORD32 *ptr_in, const WORD32 *table_re,
const WORD32 *table_im,
WORD32 resolution);
-VOID ixheaacd_mps_synt_post_twiddle_dec(WORD32 *ptr_in, const WORD32 *table_re,
- const WORD32 *table_im,
- WORD32 resolution);
-
VOID ixheaacd_mps_synt_post_twiddle_armv7(WORD32 *ptr_in,
const WORD32 *table_re,
const WORD32 *table_im,
@@ -104,20 +95,9 @@ VOID ixheaacd_calc_post_twid_armv7(WORD32 *ptr_x, WORD32 *r_ptr, WORD32 *i_ptr,
WORD32 nlength, const WORD32 *cos_ptr,
const WORD32 *sin_ptr);
-VOID ixheaacd_mps_synt_post_fft_twiddle_dec(WORD32 resolution, WORD32 *fin_re,
- WORD32 *fin_im,
- const WORD32 *table_re,
- const WORD32 *table_im,
- WORD32 *state);
-
-VOID ixheaacd_mps_synt_post_fft_twiddle_armv7(WORD32 resolution, WORD32 *fin_re,
- WORD32 *fin_im,
- const WORD32 *table_re,
- const WORD32 *table_im,
- WORD32 *state);
-
-VOID ixheaacd_mps_synt_out_calc_dec(WORD32 resolution, WORD32 *out,
- WORD32 *state, const WORD32 *filter_coeff);
+VOID ixheaacd_mps_synt_out_calc_dec(WORD32 resolution, FLOAT32 *out,
+ FLOAT32 *state,
+ const FLOAT32 *filter_coeff);
VOID ixheaacd_mps_synt_out_calc_armv7(WORD32 resolution, WORD32 *out,
WORD32 *state,
diff --git a/decoder/ixheaacd_lpfuncs.c b/decoder/ixheaacd_lpfuncs.c
index 44433a0..c2828bf 100644
--- a/decoder/ixheaacd_lpfuncs.c
+++ b/decoder/ixheaacd_lpfuncs.c
@@ -120,14 +120,14 @@ static PLATFORM_INLINE WORD32 ixheaacd_mult32x16in32_drc(WORD32 a, WORD16 b) {
return (result);
}
-VOID ixheaacd_process_win_seq(WORD32 *coef, WORD32 *prev, WORD16 *out,
+VOID ixheaacd_process_win_seq(WORD32 *coef, WORD32 *prev, WORD32 *out,
const WORD16 *window_long,
const WORD16 *window_short, WORD16 q_shift,
WORD16 ch_fac, WORD16 flag) {
WORD32 i, accu;
WORD32 *coef_1;
const WORD16 *temp_win_sh, *temp_win_long;
- WORD16 *out1, *out2;
+ WORD32 *out1, *out2;
WORD32 *temp_prev;
if (flag == 1) {
@@ -137,13 +137,13 @@ VOID ixheaacd_process_win_seq(WORD32 *coef, WORD32 *prev, WORD16 *out,
(q_shift + 1));
accu = ixheaacd_add32_sat(temp1, ((WORD32)prev[i] << 16));
- out[ch_fac * i] = ixheaacd_round16(accu << 1);
+ out[ch_fac * i] = accu;
accu = ixheaacd_shl32_dir_sat_limit(
ixheaacd_mult32x16in32(-(coef[SIZE15 - 1 - i]),
window_long[2 * (SIZE07 - i) - 1]),
q_shift);
- out[ch_fac * (i + SIZE09)] = ixheaacd_round16(accu << 2);
+ out[ch_fac * (i + SIZE09)] = (accu << 1);
}
temp_win_sh = &(window_short[0]);
@@ -158,14 +158,14 @@ VOID ixheaacd_process_win_seq(WORD32 *coef, WORD32 *prev, WORD16 *out,
accu = ixheaacd_mult32x16in32_drc(
prev[SIZE08 - 1 - i], ixheaacd_negate16(window_long[2 * i + 1]));
- out[ch_fac * i] = ixheaacd_round16(accu << 2);
+ out[ch_fac * i] = accu;
accu = ixheaacd_sub32_sat(
ixheaacd_shl32_dir_sat_limit(-(coef[SIZE15 - 1 - i]), (q_shift - 1)),
ixheaacd_mult32x16in32_drc(prev[i + SIZE01],
window_long[2 * SIZE07 - 2 - 2 * i]));
- out[ch_fac * (SIZE09 + i)] = ixheaacd_round16(accu << 2);
+ out[ch_fac * (SIZE09 + i)] = accu;
}
temp_win_sh = &(window_long[SIZE14]);
@@ -187,7 +187,7 @@ VOID ixheaacd_process_win_seq(WORD32 *coef, WORD32 *prev, WORD16 *out,
ixheaacd_shl32_dir_sat_limit(ixheaacd_mult32x16in32(temp_coef, win1),
q_shift),
ixheaacd_mult32x16in32_drc(prev1, win3));
- *out1 = ixheaacd_round16(accu << 2);
+ *out1 = accu << flag;
out1 += ch_fac;
accu = ixheaacd_sub32_sat(
@@ -195,13 +195,13 @@ VOID ixheaacd_process_win_seq(WORD32 *coef, WORD32 *prev, WORD16 *out,
ixheaacd_mult32x16in32(ixheaacd_negate32_sat(temp_coef), win2),
q_shift),
ixheaacd_mult32x16in32_drc(prev1, win4));
- *out2 = ixheaacd_round16(accu << 2);
+ *out2 = accu << flag;
out2 -= ch_fac;
}
}
static PLATFORM_INLINE VOID ixheaacd_long_short_win_process(
- WORD32 *current, WORD32 *prev, WORD16 *out, const WORD16 *short_window,
+ WORD32 *current, WORD32 *prev, WORD32 *out, const WORD16 *short_window,
const WORD16 *long_window_prev, WORD16 q_shift, WORD16 ch_fac,
WORD32 flag) {
WORD i;
@@ -220,7 +220,7 @@ static PLATFORM_INLINE VOID ixheaacd_long_short_win_process(
ixheaacd_mult32x16in32(tmp2_cur, short1)),
q_shift),
ixheaacd_mult32x16in32_drc(prev[i], long_window_prev[0 - 2 - 2 * i]));
- out[ch_fac * (0 + i)] = ixheaacd_round16(accu << 2);
+ out[ch_fac * (0 + i)] = accu;
if (flag) {
accu = ixheaacd_sub32_sat(
@@ -230,12 +230,12 @@ static PLATFORM_INLINE VOID ixheaacd_long_short_win_process(
q_shift),
ixheaacd_mult32x16in32_drc(prev[SIZE02 - 1 - i],
long_window_prev[-2 * SIZE02 + 2 * i]));
- out[ch_fac * (SIZE02 - 1 - i)] = ixheaacd_round16(accu << 2);
+ out[ch_fac * (SIZE02 - 1 - i)] = accu;
}
}
}
-VOID ixheaacd_long_short_win_seq(WORD32 *current, WORD32 *prev, WORD16 *out,
+VOID ixheaacd_long_short_win_seq(WORD32 *current, WORD32 *prev, WORD32 *out,
const WORD16 *short_window,
const WORD16 *short_window_prev,
const WORD16 *long_window_prev, WORD16 q_shift,
@@ -245,7 +245,7 @@ VOID ixheaacd_long_short_win_seq(WORD32 *current, WORD32 *prev, WORD16 *out,
for (i = 0; i < SIZE07; i++) {
accu = ixheaacd_mult32x16in32_drc(
prev[SIZE08 - 1 - i], ixheaacd_negate16(long_window_prev[2 * i + 1]));
- out[ch_fac * i] = ixheaacd_round16(accu << 2);
+ out[ch_fac * i] = accu;
}
for (i = 0; i < SIZE01; i++) {
@@ -256,7 +256,7 @@ VOID ixheaacd_long_short_win_seq(WORD32 *current, WORD32 *prev, WORD16 *out,
q_shift),
ixheaacd_mult32x16in32_drc(prev[SIZE01 - 1 - i],
long_window_prev[2 * SIZE07 + 1 + 2 * i]));
- out[ch_fac * (SIZE07 + i)] = ixheaacd_round16(accu << 2);
+ out[ch_fac * (SIZE07 + i)] = accu;
}
for (i = 0; i < SIZE01; i++) {
@@ -267,7 +267,7 @@ VOID ixheaacd_long_short_win_seq(WORD32 *current, WORD32 *prev, WORD16 *out,
q_shift),
ixheaacd_mult32x16in32_drc(prev[i],
long_window_prev[SIZE16 - 2 - (2 * i)]));
- out[ch_fac * (SIZE08 + i)] = ixheaacd_round16(accu << 2);
+ out[ch_fac * (SIZE08 + i)] = accu;
}
flag = 1;
@@ -307,12 +307,11 @@ VOID ixheaacd_nolap1_32(WORD32 *coef,
}
}
-VOID ixheaacd_neg_shift_spec_dec(WORD32 *coef, WORD16 *out, WORD16 q_shift,
+VOID ixheaacd_neg_shift_spec_dec(WORD32 *coef, WORD32 *out, WORD16 q_shift,
WORD16 ch_fac) {
WORD32 i;
-
for (i = 0; i < SIZE07; i++) {
- out[ch_fac * i] = ixheaacd_round16(ixheaacd_shl32_dir_sat_limit(
+ out[ch_fac * i] = (ixheaacd_shl32_dir_sat_limit(
ixheaacd_negate32_sat(coef[SIZE07 - 1 - i]), q_shift));
}
}
@@ -326,33 +325,34 @@ VOID ixheaacd_spec_to_overlapbuf_dec(WORD32 *ptr_overlap_buf,
}
}
-VOID ixheaacd_overlap_buf_out_dec(WORD16 *out_samples, WORD32 *ptr_overlap_buf,
+VOID ixheaacd_overlap_buf_out_dec(WORD32 *out_samples, WORD32 *ptr_overlap_buf,
WORD32 size, const WORD16 ch_fac) {
WORD32 i;
for (i = 0; i < size; i++) {
- out_samples[ch_fac * i] = ixheaacd_shl16_sat((WORD16)ptr_overlap_buf[i], 1);
+ out_samples[ch_fac * i] =
+ (ixheaacd_shl32_sat((WORD16)ptr_overlap_buf[i], 15));
}
}
-VOID ixheaacd_overlap_out_copy_dec(WORD16 *out_samples, WORD32 *ptr_overlap_buf,
+VOID ixheaacd_overlap_out_copy_dec(WORD32 *out_samples, WORD32 *ptr_overlap_buf,
WORD32 *ptr_overlap_buf1,
const WORD16 ch_fac) {
WORD32 i;
for (i = 0; i < SIZE01; i++) {
- out_samples[ch_fac * i] = ixheaacd_shl16_sat((WORD16)ptr_overlap_buf[i], 1);
+ out_samples[ch_fac * i] =
+ ixheaacd_shl32_sat((WORD16)ptr_overlap_buf[i], 15);
ptr_overlap_buf[i] = ptr_overlap_buf1[i];
}
}
VOID ixheaacd_imdct_process(ia_aac_dec_overlap_info *ptr_aac_dec_overlap_info,
WORD32 *ptr_spec_coeff,
- ia_ics_info_struct *ptr_ics_info,
- WORD16 out_samples[], const WORD16 ch_fac,
- WORD32 *scratch,
+ ia_ics_info_struct *ptr_ics_info, VOID *out_samples,
+ const WORD16 ch_fac, WORD32 *scratch,
ia_aac_dec_tables_struct *ptr_aac_tables,
- WORD32 object_type) {
+ WORD32 object_type, WORD slot_element) {
WORD32 *ptr_overlap_buf;
const WORD16 *ptr_long_window;
const WORD16 *ptr_short_window;
@@ -371,6 +371,8 @@ VOID ixheaacd_imdct_process(ia_aac_dec_overlap_info *ptr_aac_dec_overlap_info,
if ((512 == ptr_ics_info->frame_length) ||
(480 == ptr_ics_info->frame_length)) {
+ ptr_ics_info->qshift_adj = -2;
+
if (512 == ptr_ics_info->frame_length) {
WORD32 *ld_cos_sin_ptr =
(WORD32 *)ptr_aac_tables->pstr_imdct_tables->cosine_array_1024;
@@ -415,10 +417,13 @@ VOID ixheaacd_imdct_process(ia_aac_dec_overlap_info *ptr_aac_dec_overlap_info,
if (1024 == ptr_ics_info->frame_length) {
ia_ics_info_struct *tmp_ptr_ics_info = ptr_ics_info;
+
(*ixheaacd_post_twid_overlap_add)(
- out_samples, ptr_spec_coeff,
+ (WORD32 *)out_samples, ptr_spec_coeff,
ptr_aac_tables->pstr_imdct_tables, 1024, ptr_overlap_buf,
q_shift, ptr_long_window, ch_fac);
+
+ ptr_ics_info->qshift_adj = 2;
ptr_ics_info = tmp_ptr_ics_info;
}
if ((512 == ptr_ics_info->frame_length) ||
@@ -426,21 +431,24 @@ VOID ixheaacd_imdct_process(ia_aac_dec_overlap_info *ptr_aac_dec_overlap_info,
if (object_type != AOT_ER_AAC_ELD) {
if (512 == ptr_ics_info->frame_length) {
ixheaacd_lap1_512_480(ptr_spec_coeff, ptr_overlap_buf,
- out_samples, ptr_long_window, q_shift,
- SIZE04, ch_fac);
+ (WORD16 *)out_samples, ptr_long_window,
+ q_shift, SIZE04, ch_fac, slot_element);
ixheaacd_spec_to_overlapbuf(ptr_overlap_buf, ptr_spec_coeff,
q_shift, SIZE04);
} else if (480 == ptr_ics_info->frame_length) {
ixheaacd_lap1_512_480(ptr_spec_coeff, ptr_overlap_buf,
- out_samples, ptr_long_window, q_shift,
- 240, ch_fac);
+ (WORD16 *)out_samples, ptr_long_window,
+ q_shift, 240, ch_fac, slot_element);
ixheaacd_spec_to_overlapbuf(ptr_overlap_buf, ptr_spec_coeff,
q_shift, 240);
}
} else {
- ixheaacd_eld_dec_windowing(
- ptr_spec_coeff, ptr_long_window, ptr_ics_info->frame_length,
- q_shift, ptr_overlap_buf, ch_fac, out_samples);
+ ixheaacd_eld_dec_windowing(ptr_spec_coeff, ptr_long_window,
+ ptr_ics_info->frame_length, q_shift,
+ ptr_overlap_buf, ch_fac,
+ (WORD16 *)out_samples, slot_element);
+
+ ptr_ics_info->qshift_adj = -2;
}
}
break;
@@ -452,9 +460,10 @@ VOID ixheaacd_imdct_process(ia_aac_dec_overlap_info *ptr_aac_dec_overlap_info,
ptr_aac_tables->pstr_imdct_tables, 1024);
}
- ixheaacd_process_win_seq(scratch, ptr_overlap_buf, out_samples,
- ptr_long_window, ptr_short_window, q_shift,
- ch_fac, 1);
+ ixheaacd_process_win_seq(scratch, ptr_overlap_buf,
+ (WORD32 *)out_samples, ptr_long_window,
+ ptr_short_window, q_shift, ch_fac, 1);
+ ptr_ics_info->qshift_adj = 1;
if (512 == ptr_ics_info->frame_length) {
ixheaacd_spec_to_overlapbuf(ptr_overlap_buf, ptr_spec_coeff,
@@ -480,17 +489,20 @@ VOID ixheaacd_imdct_process(ia_aac_dec_overlap_info *ptr_aac_dec_overlap_info,
case ONLY_LONG_SEQUENCE:
case LONG_STOP_SEQUENCE:
- (*ixheaacd_over_lap_add1)(scratch, ptr_overlap_buf, out_samples,
- ptr_long_window, q_shift, SIZE08, ch_fac);
+ (*ixheaacd_over_lap_add1)(scratch, ptr_overlap_buf,
+ (WORD32 *)out_samples, ptr_long_window,
+ q_shift, SIZE08, ch_fac);
+ ptr_ics_info->qshift_adj = 2;
break;
case LONG_START_SEQUENCE:
case EIGHT_SHORT_SEQUENCE:
- ixheaacd_process_win_seq(scratch, ptr_overlap_buf, out_samples,
- ptr_long_window, ptr_short_window, q_shift,
- ch_fac, 1);
+ ixheaacd_process_win_seq(scratch, ptr_overlap_buf,
+ (WORD32 *)out_samples, ptr_long_window,
+ ptr_short_window, q_shift, ch_fac, 1);
+ ptr_ics_info->qshift_adj = 1;
break;
}
@@ -512,28 +524,32 @@ VOID ixheaacd_imdct_process(ia_aac_dec_overlap_info *ptr_aac_dec_overlap_info,
case EIGHT_SHORT_SEQUENCE:
case LONG_START_SEQUENCE:
- (*ixheaacd_overlap_buf_out)(out_samples, ptr_overlap_buf, SIZE07,
- ch_fac);
+ (*ixheaacd_overlap_buf_out)((WORD32 *)out_samples, ptr_overlap_buf,
+ SIZE07, ch_fac);
(*ixheaacd_over_lap_add1)(
&scratch[SIZE14], &ptr_overlap_buf[SIZE07],
- &out_samples[ch_fac * (SIZE07)], ptr_short_window, q_shift,
- SIZE01, ch_fac);
+ ((WORD32 *)out_samples + ch_fac * (SIZE07)), ptr_short_window,
+ q_shift, SIZE01, ch_fac);
{
- WORD16 q_shift1 = q_shift + 1;
- (*ixheaacd_neg_shift_spec)(&scratch[SIZE08],
- &out_samples[ch_fac * SIZE09],
- q_shift1, ch_fac);
+ WORD16 q_shift1 = q_shift - 1;
+
+ (*ixheaacd_neg_shift_spec)(
+ &scratch[SIZE08], ((WORD32 *)out_samples + ch_fac * SIZE09),
+ q_shift1, ch_fac);
}
+ ptr_ics_info->qshift_adj = 2;
break;
case ONLY_LONG_SEQUENCE:
case LONG_STOP_SEQUENCE:
- ixheaacd_process_win_seq(scratch, ptr_overlap_buf, out_samples,
- ptr_long_window, ptr_short_window, q_shift,
- ch_fac, 0);
+ ixheaacd_process_win_seq(scratch, ptr_overlap_buf,
+ (WORD32 *)out_samples, ptr_long_window,
+ ptr_short_window, q_shift, ch_fac, 0);
+
+ ptr_ics_info->qshift_adj = 2;
break;
}
@@ -579,11 +595,11 @@ VOID ixheaacd_imdct_process(ia_aac_dec_overlap_info *ptr_aac_dec_overlap_info,
case EIGHT_SHORT_SEQUENCE:
case LONG_START_SEQUENCE:
- (*ixheaacd_overlap_buf_out)(out_samples, ptr_overlap_buf, SIZE07,
- ch_fac);
+ (*ixheaacd_overlap_buf_out)((WORD32 *)out_samples, ptr_overlap_buf,
+ SIZE07, ch_fac);
(*ixheaacd_over_lap_add1)(&scratch[0], &ptr_overlap_buf[SIZE07],
- &out_samples[ch_fac * SIZE07],
+ ((WORD32 *)out_samples + ch_fac * SIZE07),
ptr_short_window, q_shift, SIZE01, ch_fac);
for (i = 0; i < 3; i++) {
@@ -591,27 +607,32 @@ VOID ixheaacd_imdct_process(ia_aac_dec_overlap_info *ptr_aac_dec_overlap_info,
(*ixheaacd_spec_to_overlapbuf)(overlap_buf_loc, &scratch[inc],
q_shift, SIZE01);
- (*ixheaacd_over_lap_add1)(&scratch[SIZE02 + inc], overlap_buf_loc,
- &out_samples[ch_fac * (SIZE09 + inc)],
- short_window, q_shift, SIZE01, ch_fac);
+ (*ixheaacd_over_lap_add1)(
+ &scratch[SIZE02 + inc], overlap_buf_loc,
+ ((WORD32 *)out_samples + ch_fac * (SIZE09 + inc)), short_window,
+ q_shift, SIZE01, ch_fac);
}
(*ixheaacd_over_lap_add2)(&scratch[SIZE08], &scratch[SIZE06],
ptr_overlap_buf, short_window, q_shift,
SIZE01, 1);
- (*ixheaacd_overlap_out_copy)(&out_samples[ch_fac * SIZE15],
+ (*ixheaacd_overlap_out_copy)(((WORD32 *)out_samples + ch_fac * SIZE15),
ptr_overlap_buf, &ptr_overlap_buf[SIZE01],
ch_fac);
+ ptr_ics_info->qshift_adj = 2;
+
break;
case ONLY_LONG_SEQUENCE:
case LONG_STOP_SEQUENCE:
- ixheaacd_long_short_win_seq(scratch, ptr_overlap_buf, out_samples,
- short_window, ptr_short_window,
- ptr_long_window, q_shift, ch_fac);
+ ixheaacd_long_short_win_seq(
+ scratch, ptr_overlap_buf, (WORD32 *)out_samples, short_window,
+ ptr_short_window, ptr_long_window, q_shift, ch_fac);
+
+ ptr_ics_info->qshift_adj = 2;
break;
}
@@ -633,7 +654,7 @@ VOID ixheaacd_imdct_process(ia_aac_dec_overlap_info *ptr_aac_dec_overlap_info,
void ixheaacd_eld_dec_windowing(WORD32 *ptr_spect_coeff, const WORD16 *p_win,
WORD32 framesize, WORD16 q_shift,
WORD32 *p_overlap_buffer, const WORD16 stride,
- WORD16 *out_samples)
+ VOID *out_samples_t, WORD slot_element)
{
int i = 0;
@@ -644,6 +665,8 @@ void ixheaacd_eld_dec_windowing(WORD32 *ptr_spect_coeff, const WORD16 *p_win,
WORD32 *p_overlap_buffer32 = (WORD32 *)p_overlap_buffer;
WORD32 delay = framesize >> 2;
+ WORD16 *out_samples = (WORD16 *)out_samples_t - slot_element;
+
ptr_z = ptr_spect_coeff + delay;
p_win += delay;
ptr_out = p_overlap_buffer32;
diff --git a/decoder/ixheaacd_lt_predict.c b/decoder/ixheaacd_lt_predict.c
index 83fc9cc..9f5b852 100644
--- a/decoder/ixheaacd_lt_predict.c
+++ b/decoder/ixheaacd_lt_predict.c
@@ -396,15 +396,18 @@ VOID ixheaacd_filter_bank_ltp(ia_aac_dec_tables_struct *aac_tables_ptr,
}
}
-VOID ixheaacd_lt_update_state(WORD16 *lt_pred_stat, WORD16 *time,
+VOID ixheaacd_lt_update_state(WORD16 *lt_pred_stat, void *time_t,
WORD32 *overlap, WORD32 frame_len,
WORD32 object_type, WORD32 stride,
- WORD16 window_sequence, WORD16 *p_window_next) {
+ WORD16 window_sequence, WORD16 *p_window_next,
+ WORD slot_element) {
WORD32 i;
+
if (object_type == AOT_ER_AAC_LD) {
WORD16 *ptr_ltp_state0 = &lt_pred_stat[0];
WORD16 *ptr_ltp_state_fl = &lt_pred_stat[frame_len + 0];
WORD16 *ptr_ltp_state_2fl = &lt_pred_stat[(frame_len * 2) + 0];
+ WORD16 *time = (WORD16 *)time_t - slot_element;
WORD16 *ptr_time_in = &time[0 * stride];
for (i = 0; i < frame_len; i++) {
@@ -417,11 +420,15 @@ VOID ixheaacd_lt_update_state(WORD16 *lt_pred_stat, WORD16 *time,
} else {
WORD16 *ptr_ltp_state0 = &lt_pred_stat[0];
WORD16 *ptr_ltp_state_fl = &lt_pred_stat[frame_len + 0];
- WORD16 *ptr_time_in = &time[0 * stride];
+ WORD32 *time = (WORD32 *)time_t;
+ WORD32 *ptr_time_in = &time[0 * stride];
+
+ time = (WORD32 *)time_t;
for (i = 0; i < frame_len; i++) {
*ptr_ltp_state0++ = *ptr_ltp_state_fl;
- *ptr_ltp_state_fl++ = *ptr_time_in;
+ *ptr_ltp_state_fl++ =
+ ixheaacd_round16(ixheaacd_shl32_sat(*ptr_time_in, 2));
ptr_time_in += stride;
}
}
diff --git a/decoder/ixheaacd_lt_predict.h b/decoder/ixheaacd_lt_predict.h
index 8e4fbfc..69a2a39 100644
--- a/decoder/ixheaacd_lt_predict.h
+++ b/decoder/ixheaacd_lt_predict.h
@@ -46,10 +46,10 @@ typedef struct {
VOID ixheaacd_init_ltp_object(ltp_info *ltp);
-VOID ixheaacd_lt_update_state(WORD16 *lt_pred_stat, WORD16 *time,
- WORD32 *overlap, WORD32 frame_len,
- WORD32 object_type, WORD32 stride,
- WORD16 window_sequence, WORD16 *p_window_next);
+VOID ixheaacd_lt_update_state(WORD16 *lt_pred_stat, void *time, WORD32 *overlap,
+ WORD32 frame_len, WORD32 object_type,
+ WORD32 stride, WORD16 window_sequence,
+ WORD16 *p_window_next, WORD slot_element);
VOID ixheaacd_filter_bank_ltp(ia_aac_dec_tables_struct *aac_tables_ptr,
WORD16 window_sequence, WORD16 win_shape,
diff --git a/decoder/ixheaacd_mps_dec.c b/decoder/ixheaacd_mps_dec.c
index 98f6646..a5f9c11 100644
--- a/decoder/ixheaacd_mps_dec.c
+++ b/decoder/ixheaacd_mps_dec.c
@@ -69,8 +69,15 @@
#include "ixheaacd_mps_hybfilter.h"
#include "ixheaacd_mps_nlc_dec.h"
#include "ixheaacd_mps_huff_tab.h"
+
+#include "math.h"
+
+#include <assert.h>
+#include <string.h>
#include "ixheaacd_error_standards.h"
+#define max(a, b) (((a) > (b)) ? (a) : (b))
+
extern const ia_huff_pt0_nodes_struct ixheaacd_huff_part0_nodes;
extern const ia_huff_ipd_nodes_struct ixheaacd_huff_ipd_nodes;
extern const ia_huff_lav_nodes_struct ixheaacd_huff_lav_idx_nodes;
@@ -126,7 +133,7 @@ WORD32 ixheaacd_mps_create(ia_mps_dec_state_struct* self, WORD32 bs_frame_len,
if ((self->residual_coding) && (self->res_bands > 0))
ixheaacd_mps_qmf_hybrid_analysis_init(&self->hyb_filt_state[1]);
- err_code = ixheaacd_mps_decor_init(&(self->mps_decor), self->hyb_band_count,
+ err_code = ixheaacd_mps_decor_init(&(self->mps_decor), self->hyb_band_count_max,
self->config->bs_decorr_config);
if (err_code != IA_NO_ERROR) return err_code;
@@ -163,12 +170,12 @@ static const FLOAT32 ixheaacd_tsd_mul_im[] = {
VOID ixheaacd_mps_qmf_hyb_analysis(ia_mps_dec_state_struct* self) {
ixheaacd_mps_qmf_hybrid_analysis(&self->hyb_filt_state[0], self->qmf_in[0],
- self->qmf_band_count, self->time_slots,
+ self->band_count[0], self->time_slots,
self->hyb_in[0]);
if ((self->residual_coding) && (self->res_bands > 0)) {
ixheaacd_mps_qmf_hybrid_analysis(&self->hyb_filt_state[self->in_ch_count],
- self->qmf_in[1], self->qmf_band_count,
+ self->qmf_in[1], self->band_count[1],
self->time_slots, self->hyb_res);
}
}
@@ -178,7 +185,7 @@ VOID ixheaacd_mps_qmf_hyb_synthesis(ia_mps_dec_state_struct* self) {
for (ch = 0; ch < self->out_ch_count; ch++) {
ixheaacd_mps_qmf_hybrid_synthesis(self->hyb_dir_out[ch],
- self->qmf_band_count, self->time_slots,
+ self->band_count[0], self->time_slots,
self->qmf_out_dir[ch]);
}
}
@@ -209,7 +216,7 @@ VOID ixheaacd_mps_decor(ia_mps_dec_state_struct* self) {
}
ixheaacd_mps_decor_apply(&self->mps_decor, self->v[k], self->w_diff[k],
- self->time_slots);
+ self->time_slots, NO_RES_BANDS);
if (self->bs_tsd_enable) {
for (sb_sample = 0; sb_sample < self->time_slots; sb_sample++) {
@@ -235,7 +242,7 @@ VOID ixheaacd_mps_mix_res_decor(ia_mps_dec_state_struct* self) {
WORD32 ts, qs, row, indx;
for (ts = 0; ts < self->time_slots; ts++) {
- for (qs = 0; qs < self->hyb_band_count; qs++) {
+ for (qs = 0; qs < self->hyb_band_count_max; qs++) {
indx = self->hyb_band_to_processing_band_table[qs];
for (row = 0; row < self->dir_sig_count; row++) {
@@ -246,8 +253,8 @@ VOID ixheaacd_mps_mix_res_decor(ia_mps_dec_state_struct* self) {
for (row = self->dir_sig_count;
row < (self->dir_sig_count + self->decor_sig_count); row++) {
if (indx < self->res_bands) {
- self->w_dir[row][ts][qs].re = self->hyb_res[ts][qs].re;
- self->w_dir[row][ts][qs].im = self->hyb_res[ts][qs].im;
+ self->w_dir[row][ts][qs].re = self->hyb_res[qs][ts].re;
+ self->w_dir[row][ts][qs].im = self->hyb_res[qs][ts].im;
} else {
self->w_dir[row][ts][qs].re = 0.0f;
self->w_dir[row][ts][qs].im = 0.0f;
@@ -270,10 +277,54 @@ VOID ixheaacd_mps_mix_res_decor(ia_mps_dec_state_struct* self) {
}
}
+VOID ixheaacd_mps_mix_res_decor_residual_band(ia_mps_dec_state_struct* self) {
+ WORD32 ts, qs, indx;
+ for (qs = 0; qs < self->hyb_band_count_max; qs++) {
+ indx = self->hyb_band_to_processing_band_table[qs];
+ if (indx >= self->res_bands) {
+ if (qs < self->hyb_band_count[1]) {
+ for (ts = 0; ts < self->time_slots; ts++) {
+ self->w_dir[1][ts][qs].re = 0.0f;
+ self->w_dir[1][ts][qs].im = 0.0f;
+ }
+ }
+ } else {
+ for (ts = 0; ts < self->time_slots; ts++) {
+ self->w_diff[1][ts][qs].re = 0.0f;
+ self->w_diff[1][ts][qs].im = 0.0f;
+ }
+ }
+ }
+}
+
VOID ixheaacd_mps_create_w(ia_mps_dec_state_struct* self) {
ixheaacd_mps_decor(self);
ixheaacd_mps_mix_res_decor(self);
}
+
+VOID ixheaacd_mps_qmf_hyb_analysis_no_pre_mix(ia_mps_dec_state_struct* self) {
+ ixheaacd_mps_qmf_hybrid_analysis_no_pre_mix(
+ &self->hyb_filt_state[0], self->qmf_in[0], self->band_count[0],
+ self->time_slots, self->w_dir[0]);
+
+ if (self->res_bands) {
+ ixheaacd_mps_qmf_hybrid_analysis_no_pre_mix(
+ &self->hyb_filt_state[1], self->qmf_in[1], self->band_count[1],
+ self->time_slots, self->w_dir[1]);
+
+ if (self->res_bands != 28) {
+ ixheaacd_mps_decor_apply(&self->mps_decor, self->w_dir[0],
+ self->w_diff[1], self->time_slots,
+ self->res_bands);
+
+ ixheaacd_mps_mix_res_decor_residual_band(self);
+ }
+ } else {
+ ixheaacd_mps_decor_apply(&self->mps_decor, self->w_dir[0], self->w_diff[1],
+ self->time_slots, NO_RES_BANDS);
+ }
+}
+
WORD32 ixheaacd_mps_apply(ia_mps_dec_state_struct* self,
FLOAT32** input_buffer[4],
FLOAT32 (*output_buffer)[4096]) {
@@ -281,43 +332,56 @@ WORD32 ixheaacd_mps_apply(ia_mps_dec_state_struct* self,
WORD32 time_slots = self->time_slots;
WORD32 in_ch_count = self->in_ch_count + self->res_ch_count;
WORD32 err = 0;
-
+ self->hyb_band_count[0] = self->band_count[0] - QMF_BANDS_TO_HYBRID + 10;
+ self->hyb_band_count[1] = self->band_count[1] - QMF_BANDS_TO_HYBRID + 10;
+ self->hyb_band_count_max =
+ max(self->hyb_band_count[0], self->hyb_band_count[1]);
+ self->mps_decor.decor_nrg_smooth.num_bins = self->hyb_band_count_max;
+ self->mps_decor.num_bins = self->hyb_band_count_max;
self->output_buffer = output_buffer;
- assert(self->present_time_slot + time_slots <= self->time_slots);
+ err = ixheaacd_mps_frame_decode(self);
+
+ if (err != 0) return err;
+
+ ixheaacd_pre_and_mix_matrix_calculation(self);
- for (ts = 0; ts < time_slots; ts++) {
- for (ch = 0; ch < in_ch_count; ch++) {
- for (qs = 0; qs < self->qmf_band_count; qs++) {
- self->qmf_in[ch][self->present_time_slot + ts][qs].re =
+ ixheaacd_mps_pre_matrix_mix_matrix_smoothing(self);
+
+ for (ch = 0; ch < in_ch_count; ch++) {
+ for (ts = 0; ts < time_slots; ts++) {
+ for (qs = 0; qs < self->band_count[ch]; qs++) {
+ self->qmf_in[ch][qs][ts].re =
self->input_gain * input_buffer[2 * ch][ts][qs];
- self->qmf_in[ch][self->present_time_slot + ts][qs].im =
+ self->qmf_in[ch][qs][ts].im =
self->input_gain * input_buffer[2 * ch + 1][ts][qs];
}
}
}
- self->present_time_slot += time_slots;
-
- if (self->present_time_slot < self->time_slots) return 0;
+ if (!(self->pre_mix_req | self->bs_tsd_enable)) {
+ ixheaacd_mps_qmf_hyb_analysis_no_pre_mix(self);
+ } else {
+ ixheaacd_mps_qmf_hyb_analysis(self);
- self->present_time_slot = 0;
+ err = ixheaacd_mps_apply_pre_matrix(self);
- err = ixheaacd_mps_frame_decode(self);
+ if (err < 0) return err;
- if (err != 0) return err;
- ixheaacd_mps_qmf_hyb_analysis(self);
-
- ixheaacd_pre_and_mix_matrix_calculation(self);
+ ixheaacd_mps_create_w(self);
+ }
- ixheaacd_mps_pre_matrix_mix_matrix_smoothing(self);
+ if ((!(self->res_bands | self->pre_mix_req)) &&
+ (self->config->bs_phase_coding == 0)) {
+ err = ixheaacd_mps_apply_mix_matrix_type1(self);
- err = ixheaacd_mps_apply_pre_matrix(self);
- if (err < 0) return err;
+ } else if (self->pre_mix_req) {
+ err = ixheaacd_mps_apply_mix_matrix_type2(self);
- ixheaacd_mps_create_w(self);
+ } else {
+ err = ixheaacd_mps_apply_mix_matrix_type3(self);
+ }
- err = ixheaacd_mps_apply_mix_matrix(self);
if (err < 0) return err;
if (self->config->bs_temp_shape_config == 2) {
diff --git a/decoder/ixheaacd_mps_dec.h b/decoder/ixheaacd_mps_dec.h
index 845b723..55f98bd 100644
--- a/decoder/ixheaacd_mps_dec.h
+++ b/decoder/ixheaacd_mps_dec.h
@@ -38,6 +38,8 @@
#define MAX_DECORR_FIL_ORDER (DECORR_FILT_0_ORD)
+#define NO_RES_BANDS -1
+
typedef struct {
FLOAT32 re;
FLOAT32 im;
@@ -107,7 +109,7 @@ typedef struct ia_mps_decor_struct {
typedef struct ia_mps_hybrid_filt_struct {
ia_cmplx_flt_struct hf_buffer[MAX_NUM_QMF_BANDS_MPS][BUFFER_LEN_HF_MPS];
- ia_cmplx_w32_struct lf_buffer[QMF_BANDS_TO_HYBRID][BUFFER_LEN_LF_MPS];
+ ia_cmplx_flt_struct lf_buffer[QMF_BANDS_TO_HYBRID][BUFFER_LEN_LF_MPS];
} ia_mps_hybrid_filt_struct;
typedef struct ia_mps_data_struct {
@@ -151,7 +153,7 @@ typedef struct ia_mps_bs_frame {
typedef struct ia_mps_smoothing_struct {
WORD32 prev_smg_time;
- WORD32 inv_prev_smg_time;
+ FLOAT32 inv_prev_smg_time;
WORD32 prev_smg_data[MAX_PARAMETER_BANDS];
} ia_mps_smoothing_struct;
@@ -188,18 +190,18 @@ typedef struct ia_mps_dec_state_struct {
WORD32 decor_sig_count;
WORD32 time_slots;
- WORD32 present_time_slot;
- WORD32 frame_len;
-
+ WORD32 pre_mix_req;
WORD32 temp_shape_enable_ch_stp[2];
WORD32 temp_shape_enable_ch_ges[2];
FLOAT32 env_shape_data[2][MAX_TIME_SLOTS];
WORD8 parse_nxt_frame;
-
+ WORD32 band_count[MAX_M1_INPUT];
+ WORD32 synth_count;
WORD32 qmf_band_count;
- WORD32 hyb_band_count;
+ WORD32 hyb_band_count[MAX_M1_INPUT];
+ WORD32 hyb_band_count_max;
const WORD32 *hyb_band_to_processing_band_table;
WORD32 res_ch_count;
@@ -226,7 +228,7 @@ typedef struct ia_mps_dec_state_struct {
ia_mps_bs_frame bs_frame;
WORD32 smoothing_time[MAX_PARAMETER_SETS_MPS];
- WORD32 inv_smoothing_time[MAX_PARAMETER_SETS_MPS];
+ FLOAT32 inv_smoothing_time[MAX_PARAMETER_SETS_MPS];
WORD32 smoothing_data[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS];
WORD32 bs_tsd_enable;
@@ -248,32 +250,29 @@ typedef struct ia_mps_dec_state_struct {
FLOAT32 phase_l_prev[MAX_PARAMETER_BANDS];
FLOAT32 phase_r_prev[MAX_PARAMETER_BANDS];
- WORD32 phase_l_fix[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS];
- WORD32 phase_r_fix[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS];
-
- WORD32 m1_param_re[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
- [MAX_M_INPUT];
- WORD32 m1_param_im[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
- [MAX_M_INPUT];
- WORD32 m2_decor_re[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
- [MAX_M_INPUT];
- WORD32 m2_decor_im[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
- [MAX_M_INPUT];
- WORD32 m2_resid_re[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
- [MAX_M_INPUT];
- WORD32 m2_resid_im[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
- [MAX_M_INPUT];
-
- WORD32 m1_param_re_prev[MAX_PARAMETER_BANDS][MAX_M_OUTPUT][MAX_M_INPUT];
- WORD32 m1_param_im_prev[MAX_PARAMETER_BANDS][MAX_M_OUTPUT][MAX_M_INPUT];
- WORD32 m2_decor_re_prev[MAX_PARAMETER_BANDS][MAX_M_OUTPUT][MAX_M_INPUT];
- WORD32 m2_decor_im_prev[MAX_PARAMETER_BANDS][MAX_M_OUTPUT][MAX_M_INPUT];
- WORD32 m2_resid_re_prev[MAX_PARAMETER_BANDS][MAX_M_OUTPUT][MAX_M_INPUT];
- WORD32 m2_resid_im_prev[MAX_PARAMETER_BANDS][MAX_M_OUTPUT][MAX_M_INPUT];
-
- ia_cmplx_flt_struct qmf_in[2][MAX_TIME_SLOTS][MAX_NUM_QMF_BANDS_MPS_NEW];
- ia_cmplx_flt_struct hyb_in[2][MAX_TIME_SLOTS][MAX_HYBRID_BANDS_MPS];
- ia_cmplx_flt_struct hyb_res[MAX_TIME_SLOTS][MAX_HYBRID_BANDS_MPS];
+ FLOAT32 m1_param_re[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
+ [MAX_M_INPUT];
+ FLOAT32 m1_param_im[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
+ [MAX_M_INPUT];
+ FLOAT32 m2_decor_re[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
+ [MAX_M_INPUT];
+ FLOAT32 m2_decor_im[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
+ [MAX_M_INPUT];
+ FLOAT32 m2_resid_re[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
+ [MAX_M_INPUT];
+ FLOAT32 m2_resid_im[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
+ [MAX_M_INPUT];
+
+ FLOAT32 m1_param_re_prev[MAX_PARAMETER_BANDS][MAX_M_OUTPUT][MAX_M_INPUT];
+ FLOAT32 m1_param_im_prev[MAX_PARAMETER_BANDS][MAX_M_OUTPUT][MAX_M_INPUT];
+ FLOAT32 m2_decor_re_prev[MAX_PARAMETER_BANDS][MAX_M_OUTPUT][MAX_M_INPUT];
+ FLOAT32 m2_decor_im_prev[MAX_PARAMETER_BANDS][MAX_M_OUTPUT][MAX_M_INPUT];
+ FLOAT32 m2_resid_re_prev[MAX_PARAMETER_BANDS][MAX_M_OUTPUT][MAX_M_INPUT];
+ FLOAT32 m2_resid_im_prev[MAX_PARAMETER_BANDS][MAX_M_OUTPUT][MAX_M_INPUT];
+
+ ia_cmplx_flt_struct qmf_in[2][MAX_NUM_QMF_BANDS_MPS_NEW][MAX_TIME_SLOTS];
+ ia_cmplx_flt_struct hyb_in[2][MAX_HYBRID_BANDS_MPS][MAX_TIME_SLOTS];
+ ia_cmplx_flt_struct hyb_res[MAX_HYBRID_BANDS_MPS][MAX_TIME_SLOTS];
ia_cmplx_flt_struct v[MAX_M1_OUTPUT][MAX_TIME_SLOTS][MAX_HYBRID_BANDS_MPS];
ia_cmplx_flt_struct w_diff[MAX_M2_INPUT][MAX_TIME_SLOTS]
[MAX_HYBRID_BANDS_MPS];
@@ -297,7 +296,7 @@ typedef struct ia_mps_dec_state_struct {
WORD32 bs_high_rate_mode;
- WORD32 tmp_buf[84 * MAX_NUM_QMF_BANDS_SAC];
+ FLOAT32 tmp_buf[84 * MAX_NUM_QMF_BANDS_SAC];
FLOAT32 r_out_re_in_m1[MAX_TIME_SLOTS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
[MAX_M_INPUT];
@@ -340,11 +339,9 @@ typedef struct ia_mps_dec_state_struct {
VOID ixheaacd_mps_init_pre_and_post_matrix(ia_mps_dec_state_struct *self);
VOID ixheaacd_pre_and_mix_matrix_calculation(ia_mps_dec_state_struct *self);
WORD32 ixheaacd_mps_apply_pre_matrix(ia_mps_dec_state_struct *self);
-WORD32 ixheaacd_mps_apply_mix_matrix(ia_mps_dec_state_struct *self);
-
-VOID ixheaacd_mps_config(ia_mps_dec_state_struct *self, WORD32 frame_len,
- WORD32 residual_coding,
- ia_usac_dec_mps_config_struct *mps212_config);
+WORD32 ixheaacd_mps_apply_mix_matrix_type1(ia_mps_dec_state_struct *self);
+WORD32 ixheaacd_mps_apply_mix_matrix_type2(ia_mps_dec_state_struct *self);
+WORD32 ixheaacd_mps_apply_mix_matrix_type3(ia_mps_dec_state_struct *self);
WORD32 ixheaacd_mps_frame_decode(ia_mps_dec_state_struct *self);
@@ -359,25 +356,33 @@ VOID ixheaacd_mps_smoothing_opd(ia_mps_dec_state_struct *self);
WORD32 ixheaacd_mps_temp_process(ia_mps_dec_state_struct *self);
VOID ixheaacd_mps_par2umx_ps(ia_mps_dec_state_struct *self,
- ia_mps_bs_frame *curr_bit_stream, WORD32 *h_real,
+ ia_mps_bs_frame *curr_bit_stream, FLOAT32 *h_real,
WORD32 param_set_idx);
-
VOID ixheaacd_mps_par2umx_ps_ipd_opd(ia_mps_dec_state_struct *self,
ia_mps_bs_frame *curr_bit_stream,
- WORD32 *h_real, WORD32 param_set_idx);
+ FLOAT32 *h_real, WORD32 param_set_idx);
VOID ixheaacd_mps_par2umx_pred(ia_mps_dec_state_struct *self,
- ia_mps_bs_frame *curr_bit_stream, WORD32 *h_imag,
- WORD32 *h_real, WORD32 param_set_idx,
- WORD32 res_bands);
-
-WORD32 ixheaacd_mps_upmix_interp(
- WORD32 m_matrix[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
- [MAX_M_INPUT],
- WORD32 r_matrix[MAX_TIME_SLOTS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
- [MAX_M_INPUT],
- WORD32 m_matrix_prev[MAX_PARAMETER_BANDS][MAX_M_OUTPUT][MAX_M_INPUT],
- WORD32 num_rows, WORD32 num_cols, ia_mps_dec_state_struct *self);
+ ia_mps_bs_frame *curr_bit_stream,
+ FLOAT32 *h_imag, FLOAT32 *h_real,
+ WORD32 param_set_idx, WORD32 res_bands);
+
+WORD32 ixheaacd_mps_upmix_interp_type1(
+ FLOAT32 m_matrix[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
+ [MAX_M_INPUT],
+ FLOAT32 r_matrix[MAX_TIME_SLOTS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
+ [MAX_M_INPUT],
+ FLOAT32 m_matrix_prev[MAX_PARAMETER_BANDS][MAX_M_OUTPUT][MAX_M_INPUT],
+ WORD32 num_rows, WORD32 num_cols, ia_mps_dec_state_struct *self,
+ WORD32 bs_high_rate_mode);
+
+WORD32 ixheaacd_mps_upmix_interp_type2(
+ FLOAT32 m_matrix[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
+ [MAX_M_INPUT],
+ FLOAT32 r_matrix[MAX_TIME_SLOTS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
+ [MAX_M_INPUT],
+ FLOAT32 m_matrix_prev[MAX_PARAMETER_BANDS][MAX_M_OUTPUT][MAX_M_INPUT],
+ WORD32 num_rows, ia_mps_dec_state_struct *self, WORD32 col);
VOID ixheaacd_mps_phase_interpolation(
FLOAT32 pl[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS],
diff --git a/decoder/ixheaacd_mps_decor.h b/decoder/ixheaacd_mps_decor.h
index 4f856f5..8153681 100644
--- a/decoder/ixheaacd_mps_decor.h
+++ b/decoder/ixheaacd_mps_decor.h
@@ -30,6 +30,6 @@ VOID ixheaacd_mps_decor_apply(
ia_mps_decor_struct_handle self,
ia_cmplx_flt_struct in[MAX_TIME_SLOTS][MAX_HYBRID_BANDS_MPS],
ia_cmplx_flt_struct out[MAX_TIME_SLOTS][MAX_HYBRID_BANDS_MPS],
- WORD32 length);
+ WORD32 length, WORD32 res_bands);
#endif
diff --git a/decoder/ixheaacd_mps_decorr.c b/decoder/ixheaacd_mps_decorr.c
index 33b6aa5..b2acb26 100644
--- a/decoder/ixheaacd_mps_decorr.c
+++ b/decoder/ixheaacd_mps_decorr.c
@@ -44,6 +44,8 @@ static const WORD32 ixheaacd_qmf_split_freq_0[] = {3, 15, 24, 65};
static const WORD32 ixheaacd_qmf_split_freq_1[] = {3, 50, 65, 65};
static const WORD32 ixheaacd_qmf_split_freq_2[] = {0, 15, 65, 65};
+extern const WORD32 ixheaacd_mps_gain_set_indx[29];
+
static const FLOAT32
ixheaacd_lattice_coeff_0_filt_den_coeff[DECORR_FILT_0_ORD + 1] = {
1.000000f, -0.314818f, -0.256828f, -0.173641f, -0.115077f, 0.000599f,
@@ -141,19 +143,25 @@ static VOID ixheaacd_mps_decor_energy_adjustment(
ixheaacd_mps_decor_energy_adjust_filt_struct *handle,
ia_cmplx_flt_struct in[MAX_TIME_SLOTS][MAX_HYBRID_BANDS_MPS],
ia_cmplx_flt_struct out[MAX_TIME_SLOTS][MAX_HYBRID_BANDS_MPS],
- WORD32 time_slots) {
+ WORD32 time_slots, WORD32 res_bands) {
ixheaacd_mps_decor_energy_adjust_filt_struct *self =
(ixheaacd_mps_decor_energy_adjust_filt_struct *)handle;
FLOAT32 in_energy[MAX_PARAMETER_BANDS] = {0};
FLOAT32 out_energy[MAX_PARAMETER_BANDS] = {0};
FLOAT32 gain[MAX_PARAMETER_BANDS];
WORD32 i, j, k;
+ WORD32 start_param_band = 0, start_bin = 0;
+
+ if (res_bands != NO_RES_BANDS) {
+ start_bin = ixheaacd_mps_gain_set_indx[res_bands];
+ start_param_band = res_bands;
+ }
for (i = 0; i < time_slots; i++) {
memset(in_energy, 0, sizeof(FLOAT32) * MAX_PARAMETER_BANDS);
memset(out_energy, 0, sizeof(FLOAT32) * MAX_PARAMETER_BANDS);
- for (j = 0; j < self->num_bins; j++) {
+ for (j = start_bin; j < self->num_bins; j++) {
k = ixheaacd_hybrid_band_71_to_processing_band_28_map[j];
in_energy[k] += in[i][j].re * in[i][j].re + in[i][j].im * in[i][j].im;
@@ -161,7 +169,7 @@ static VOID ixheaacd_mps_decor_energy_adjustment(
out[i][j].re * out[i][j].re + out[i][j].im * out[i][j].im;
}
- for (k = 0; k < MAX_PARAMETER_BANDS; k++) {
+ for (k = start_param_band; k < MAX_PARAMETER_BANDS; k++) {
self->smooth_in_energy[k] = self->smooth_in_energy[k] * DECOR_ALPHA +
in_energy[k] * ONE_MINUS_DECOR_ALPHA;
self->smooth_out_energy[k] = self->smooth_out_energy[k] * DECOR_ALPHA +
@@ -184,7 +192,7 @@ static VOID ixheaacd_mps_decor_energy_adjustment(
}
}
- for (j = 0; j < self->num_bins; j++) {
+ for (j = start_bin; j < self->num_bins; j++) {
k = ixheaacd_hybrid_band_71_to_processing_band_28_map[j];
out[i][j].re *= gain[k];
@@ -233,12 +241,14 @@ VOID ixheaacd_mps_decor_apply(
ia_mps_decor_struct_handle self,
ia_cmplx_flt_struct in[MAX_TIME_SLOTS][MAX_HYBRID_BANDS_MPS],
ia_cmplx_flt_struct out[MAX_TIME_SLOTS][MAX_HYBRID_BANDS_MPS],
- WORD32 length) {
- WORD32 idx, sb_sample;
+ WORD32 length, WORD32 res_bands) {
+ WORD32 idx, sb_sample, index = 0;
ia_cmplx_flt_struct scratch[MAX_TIME_SLOTS];
- for (idx = 0; idx < self->num_bins; idx++) {
+ if (res_bands != NO_RES_BANDS) index = ixheaacd_mps_gain_set_indx[res_bands];
+
+ for (idx = index; idx < self->num_bins; idx++) {
for (sb_sample = 0; sb_sample < length; sb_sample++) {
self->decor_delay_buffer[idx][self->delay_sample_count[idx] + sb_sample]
.re = in[sb_sample][idx].re;
@@ -262,6 +272,6 @@ VOID ixheaacd_mps_decor_apply(
}
}
- ixheaacd_mps_decor_energy_adjustment(&self->decor_nrg_smooth, in, out,
- length);
+ ixheaacd_mps_decor_energy_adjustment(&self->decor_nrg_smooth, in, out, length,
+ res_bands);
}
diff --git a/decoder/ixheaacd_mps_hybfilter.h b/decoder/ixheaacd_mps_hybfilter.h
index b0b8266..126dee2 100644
--- a/decoder/ixheaacd_mps_hybfilter.h
+++ b/decoder/ixheaacd_mps_hybfilter.h
@@ -24,9 +24,15 @@ VOID ixheaacd_mps_qmf_hybrid_analysis_init(ia_mps_hybrid_filt_struct *handle);
VOID ixheaacd_mps_qmf_hybrid_analysis(
ia_mps_hybrid_filt_struct *handle,
- ia_cmplx_flt_struct in_qmf[MAX_TIME_SLOTS][MAX_NUM_QMF_BANDS_MPS_NEW],
+ ia_cmplx_flt_struct in_qmf[MAX_NUM_QMF_BANDS_MPS_NEW][MAX_TIME_SLOTS],
WORD32 num_bands, WORD32 num_samples,
- ia_cmplx_flt_struct out_hyb[MAX_TIME_SLOTS][MAX_HYBRID_BANDS_MPS]);
+ ia_cmplx_flt_struct out_hyb[MAX_HYBRID_BANDS_MPS][MAX_TIME_SLOTS]);
+
+VOID ixheaacd_mps_qmf_hybrid_analysis_no_pre_mix(
+ ia_mps_hybrid_filt_struct *handle,
+ ia_cmplx_flt_struct in_qmf[MAX_NUM_QMF_BANDS_MPS_NEW][MAX_TIME_SLOTS],
+ WORD32 num_bands, WORD32 num_samples,
+ ia_cmplx_flt_struct v[MAX_TIME_SLOTS][MAX_HYBRID_BANDS_MPS]);
VOID ixheaacd_mps_qmf_hybrid_synthesis(
ia_cmplx_flt_struct in_hyb[MAX_TIME_SLOTS][MAX_HYBRID_BANDS_MPS],
diff --git a/decoder/ixheaacd_mps_hybrid_filt.c b/decoder/ixheaacd_mps_hybrid_filt.c
index 044f4b1..2c57ead 100644
--- a/decoder/ixheaacd_mps_hybrid_filt.c
+++ b/decoder/ixheaacd_mps_hybrid_filt.c
@@ -33,136 +33,177 @@
#include "ixheaacd_mps_hybfilter.h"
-extern const WORD32 ixheaacd_ia_mps_hyb_filter_coeff_8[QMF_HYBRID_FILT_ORDER];
-extern const WORD32 ixheaacd_mps_hyb_filter_coeff_2[QMF_HYBRID_FILT_ORDER];
-extern const WORD32 ixheaacd_cosine[8][13];
-extern const WORD32 ixheaacd_sine[8][13];
-extern const WORD32 ixheaacd_cosine2[2][13];
-
-static WORD32 ixheaacd_mps_mult32_local(WORD32 a, WORD32 b, WORD16 shift) {
- WORD64 temp;
-
- temp = (WORD64)a * (WORD64)b;
- temp = temp >> shift;
- return (WORD32)temp;
-}
+extern const FLOAT32 ixheaacd_ia_mps_hyb_filter_coeff_8[QMF_HYBRID_FILT_ORDER];
+extern const FLOAT32 ixheaacd_mps_hyb_filter_coeff_2[QMF_HYBRID_FILT_ORDER];
+
+extern const FLOAT32 ixheaacd_sine[8][8];
+extern const FLOAT32 ixheaacd_cosine[8][8];
static VOID ixheaacd_mps_hyb_filt_type1(
- ia_cmplx_w32_struct *input, ia_cmplx_w32_struct output[8][MAX_TIME_SLOTS],
- WORD32 num_samples, const WORD32 *filt_coeff)
+ ia_cmplx_flt_struct *input, ia_cmplx_flt_struct output[8][MAX_TIME_SLOTS],
+ WORD32 num_samples, const FLOAT32 *filt_coeff)
{
WORD32 i, n, q;
- WORD32 modulation_fac_re, modulation_fac_im;
- WORD32 in_re, in_im;
- WORD32 temp;
- WORD32 coeff;
- WORD64 acc_re, acc_im;
-
- WORD16 shift = 8;
+ FLOAT32 in_re, in_im;
+ FLOAT32 coeff;
+ FLOAT32 acc_re_l, acc_re_h, acc_im_l, acc_im_h;
for (i = 0; i < num_samples; i++) {
- for (q = 0; q < 8; q++) {
- acc_re = 0;
- acc_im = 0;
- for (n = 0; n < QMF_HYBRID_FILT_ORDER; n++) {
- modulation_fac_re = ixheaacd_cosine[q][n];
- modulation_fac_im = ixheaacd_sine[q][n];
+ FLOAT32 x0_re[13], x0_im[13], x0_1_re[8], x0_1_im[8];
+ FLOAT32 acc_re_val[8], acc_im_val[8];
+ for (n = 0; n < QMF_HYBRID_FILT_ORDER; n++) // x0 = x[n]*Cf[n]
+ {
+ in_re = input[n + i].re;
+ in_im = input[n + i].im;
+
+ coeff = filt_coeff[QMF_HYBRID_FILT_ORDER - 1 - n];
+
+ x0_re[n] = coeff * in_re;
+ x0_im[n] = coeff * in_im;
+ }
+
+ // x0_2 series
+
+ x0_1_re[0] = x0_re[6];
+ x0_1_im[0] = x0_im[6];
+
+ x0_1_re[1] = x0_re[7];
+ x0_1_im[1] = x0_im[7];
+
+ x0_1_re[2] = x0_re[8] - x0_re[0];
+ x0_1_im[2] = x0_im[8] - x0_im[0];
+
+ x0_1_re[3] = x0_re[9] - x0_re[1];
+ x0_1_im[3] = x0_im[9] - x0_im[1];
- in_re = (WORD32)(input[n + i].re);
- in_im = (WORD32)(input[n + i].im);
+ x0_1_re[4] = x0_re[10] - x0_re[2];
+ x0_1_im[4] = x0_im[10] - x0_im[2];
- in_re = ixheaacd_shl32_sat(in_re, shift);
- in_im = ixheaacd_shl32_sat(in_im, shift);
+ x0_1_re[5] = x0_re[11] - x0_re[3];
+ x0_1_im[5] = x0_im[11] - x0_im[3];
- coeff = filt_coeff[QMF_HYBRID_FILT_ORDER - 1 - n];
+ x0_1_re[6] = x0_re[12] - x0_re[4];
+ x0_1_im[6] = x0_im[12] - x0_im[4];
- temp = ixheaacd_sub32_sat(
- ixheaacd_mps_mult32_local(in_re, modulation_fac_re, 30),
- ixheaacd_mps_mult32_local(in_im, modulation_fac_im, 30));
+ x0_1_re[7] = -(x0_re[5]);
+ x0_1_im[7] = -(x0_im[5]);
- if (temp >= 1073741823)
- temp = 1073741823;
- else if (temp <= -1073741824)
- temp = -1073741824;
+ // acc_re_im_val
+ acc_re_val[0] = x0_1_re[0];
+ acc_re_val[1] = x0_1_re[1] - x0_1_re[7];
+ acc_re_val[2] = x0_1_re[2] - x0_1_re[6];
+ acc_re_val[3] = x0_1_re[3] - x0_1_re[5];
+ acc_re_val[4] = x0_1_im[1] + x0_1_im[7];
+ acc_re_val[5] = x0_1_im[2] + x0_1_im[6];
+ acc_re_val[6] = x0_1_im[3] + x0_1_im[5];
+ acc_re_val[7] = x0_1_im[4];
- temp = ixheaacd_mps_mult32_local(coeff, temp, 30);
- acc_re = acc_re + (WORD64)temp;
+ acc_im_val[0] = x0_1_im[0];
+ acc_im_val[1] = x0_1_im[1] - x0_1_im[7];
+ acc_im_val[2] = x0_1_im[2] - x0_1_im[6];
+ acc_im_val[3] = x0_1_im[3] - x0_1_im[5];
+ acc_im_val[4] = x0_1_re[1] + x0_1_re[7];
+ acc_im_val[5] = x0_1_re[2] + x0_1_re[6];
+ acc_im_val[6] = x0_1_re[3] + x0_1_re[5];
+ acc_im_val[7] = x0_1_re[4];
- temp = ixheaacd_add32_sat(
- ixheaacd_mps_mult32_local(in_im, modulation_fac_re, 30),
- ixheaacd_mps_mult32_local(in_re, modulation_fac_im, 30));
+ for (q = 0; q < 4; q++) {
+ acc_re_l = 0;
+ acc_im_l = 0;
+ acc_re_h = 0;
+ acc_im_h = 0;
- if (temp >= 1073741823)
- temp = 1073741823;
- else if (temp <= -1073741824)
- temp = -1073741824;
+ // X_re
+ acc_re_l += acc_re_val[0];
+ acc_re_l += acc_re_val[1] * ixheaacd_cosine[q][1];
+ acc_re_l += acc_re_val[2] * ixheaacd_cosine[q][2];
+ acc_re_l += acc_re_val[3] * ixheaacd_cosine[q][3];
- temp = ixheaacd_mps_mult32_local(coeff, temp, 30);
- acc_im = acc_im + (WORD64)temp;
- }
+ acc_re_h = acc_re_l;
- output[q][i].re = (WORD32)(acc_re >> shift);
- output[q][i].im = (WORD32)(acc_im >> shift);
+ acc_re_l -= acc_re_val[4] * ixheaacd_sine[q][1];
+ acc_re_l -= acc_re_val[5] * ixheaacd_sine[q][2];
+ acc_re_l -= acc_re_val[6] * ixheaacd_sine[q][3];
+ acc_re_l -= acc_re_val[7] * ixheaacd_sine[q][4];
+
+ acc_re_h = acc_re_h - (acc_re_l - acc_re_h);
+
+ // X_im
+ acc_im_l += acc_im_val[0];
+ acc_im_l += acc_im_val[1] * ixheaacd_cosine[q][1];
+ acc_im_l += acc_im_val[2] * ixheaacd_cosine[q][2];
+ acc_im_l += acc_im_val[3] * ixheaacd_cosine[q][3];
+
+ acc_im_h = acc_im_l;
+
+ acc_im_l += acc_im_val[4] * ixheaacd_sine[q][1];
+ acc_im_l += acc_im_val[5] * ixheaacd_sine[q][2];
+ acc_im_l += acc_im_val[6] * ixheaacd_sine[q][3];
+ acc_im_l += acc_im_val[7] * ixheaacd_sine[q][4];
+
+ acc_im_h = acc_im_h - (acc_im_l - acc_im_h);
+
+ output[q][i].re = acc_re_l;
+ output[q][i].im = acc_im_l;
+
+ output[7 - q][i].re = acc_re_h;
+ output[7 - q][i].im = acc_im_h;
}
}
}
static VOID ixheaacd_mps_hyb_filt_type2(
- ia_cmplx_w32_struct *input, ia_cmplx_w32_struct output[2][MAX_TIME_SLOTS],
- WORD32 num_samples, const WORD32 *filt_coeff)
+ ia_cmplx_flt_struct *input, ia_cmplx_flt_struct output[2][MAX_TIME_SLOTS],
+ WORD32 num_samples, const FLOAT32 *filt_coeff)
{
- WORD32 i, n, q;
+ WORD32 i, n;
- WORD32 modulation_fac_re;
- WORD32 in_re, in_im;
- WORD32 temp;
- WORD32 coeff;
- WORD64 acc_re, acc_im;
-
- WORD16 shift = 8;
+ FLOAT32 in_re, in_im;
+ FLOAT32 coeff;
+ FLOAT32 acc_re[2], acc_im[2];
for (i = 0; i < num_samples; i++) {
- for (q = 0; q < 2; q++) {
- acc_re = 0;
- acc_im = 0;
- for (n = 0; n < QMF_HYBRID_FILT_ORDER; n++) {
- modulation_fac_re = ixheaacd_cosine2[q][n];
+ FLOAT32 x_0_re[13], x_0_im[13];
+
+ for (n = 1; n < 6; n = n + 2) {
+ in_re = input[n + i].re;
+ in_im = input[n + i].im;
- in_re = (WORD32)(input[n + i].re);
- in_im = (WORD32)(input[n + i].im);
+ in_re += input[12 - n + i].re;
+ in_im += input[12 - n + i].im;
- in_re = ixheaacd_shl32_sat(in_re, shift);
- in_im = ixheaacd_shl32_sat(in_im, shift);
+ coeff = filt_coeff[QMF_HYBRID_FILT_ORDER - 1 - n];
- coeff = filt_coeff[QMF_HYBRID_FILT_ORDER - 1 - n];
+ x_0_re[n] = coeff * in_re;
+ x_0_im[n] = coeff * in_im;
+ }
- temp = ixheaacd_mps_mult32_local(in_re, modulation_fac_re, 30);
+ n = 6;
+ in_re = input[n + i].re;
+ in_im = input[n + i].im;
- if (temp >= 1073741823)
- temp = 1073741823;
- else if (temp <= -1073741824)
- temp = -1073741824;
+ coeff = filt_coeff[QMF_HYBRID_FILT_ORDER - 1 - n];
- temp = ixheaacd_mps_mult32_local(coeff, temp, 30);
- acc_re = acc_re + (WORD64)temp;
+ x_0_re[n] = coeff * in_re;
+ x_0_im[n] = coeff * in_im;
- temp = ixheaacd_mps_mult32_local(in_im, modulation_fac_re, 30);
+ x_0_re[1] = x_0_re[1] + x_0_re[3] + x_0_re[5];
+ x_0_im[1] = x_0_im[1] + x_0_im[3] + x_0_im[5];
- if (temp >= 1073741823)
- temp = 1073741823;
- else if (temp <= -1073741824)
- temp = -1073741824;
+ acc_re[0] = x_0_re[6] + x_0_re[1];
+ acc_im[0] = x_0_im[6] + x_0_im[1];
- temp = ixheaacd_mps_mult32_local(coeff, temp, 30);
- acc_im = acc_im + (WORD64)temp;
- }
+ acc_re[1] = x_0_re[6] - x_0_re[1];
+ acc_im[1] = x_0_im[6] - x_0_im[1];
- output[q][i].re = (WORD32)(acc_re >> shift);
- output[q][i].im = (WORD32)(acc_im >> shift);
- }
+ output[0][i].re = acc_re[0];
+ output[0][i].im = acc_im[0];
+
+ output[1][i].re = acc_re[1];
+ output[1][i].im = acc_im[1];
}
}
@@ -173,17 +214,17 @@ VOID ixheaacd_mps_qmf_hybrid_analysis_init(ia_mps_hybrid_filt_struct *handle) {
sizeof(ia_cmplx_flt_struct));
}
-VOID ixheaacd_mps_qmf_hybrid_analysis(
+VOID ixheaacd_mps_qmf_hybrid_analysis_no_pre_mix(
ia_mps_hybrid_filt_struct *handle,
- ia_cmplx_flt_struct in_qmf[MAX_TIME_SLOTS][MAX_NUM_QMF_BANDS_MPS_NEW],
+ ia_cmplx_flt_struct in_qmf[MAX_NUM_QMF_BANDS_MPS_NEW][MAX_TIME_SLOTS],
WORD32 num_bands, WORD32 num_samples,
- ia_cmplx_flt_struct hyb[MAX_TIME_SLOTS][MAX_HYBRID_BANDS_MPS]) {
+ ia_cmplx_flt_struct v[MAX_TIME_SLOTS][MAX_HYBRID_BANDS_MPS]) {
WORD32 lf_samples_shift;
WORD32 hf_samples_shift;
WORD32 lf_qmf_bands;
WORD32 k, n;
- ia_cmplx_w32_struct scratch[MAX_HYBRID_ONLY_BANDS_PER_QMF][MAX_TIME_SLOTS];
+ ia_cmplx_flt_struct scratch[MAX_HYBRID_ONLY_BANDS_PER_QMF][MAX_TIME_SLOTS];
lf_samples_shift = BUFFER_LEN_LF_MPS - num_samples;
hf_samples_shift = BUFFER_LEN_HF_MPS - num_samples;
@@ -191,34 +232,109 @@ VOID ixheaacd_mps_qmf_hybrid_analysis(
lf_qmf_bands = QMF_BANDS_TO_HYBRID;
for (k = 0; k < lf_qmf_bands; k++) {
- for (n = 0; n < lf_samples_shift; n++) {
- handle->lf_buffer[k][n].re = handle->lf_buffer[k][n + num_samples].re;
- handle->lf_buffer[k][n].im = handle->lf_buffer[k][n + num_samples].im;
- }
+ memmove(&handle->lf_buffer[k][0].re, &handle->lf_buffer[k][num_samples].re,
+ 2 * lf_samples_shift * sizeof(FLOAT32));
}
for (k = 0; k < lf_qmf_bands; k++) {
+ memcpy(&handle->lf_buffer[k][lf_samples_shift].re, &in_qmf[k][0].re,
+ 2 * num_samples * sizeof(FLOAT32));
+ }
+
+ for (k = 0; k < MAX_NUM_QMF_BANDS_SAC / 2 - lf_qmf_bands; k++) {
+ memmove(&handle->hf_buffer[k][0].re, &handle->hf_buffer[k][num_samples].re,
+ 2 * hf_samples_shift * sizeof(FLOAT32));
+ }
+
+ for (k = 0; k < num_bands - lf_qmf_bands; k++) {
+ memcpy(&handle->hf_buffer[k][hf_samples_shift].re,
+ &in_qmf[k + lf_qmf_bands][0].re, 2 * num_samples * sizeof(FLOAT32));
+ }
+
+ ixheaacd_mps_hyb_filt_type1(
+ &(handle->lf_buffer[0][lf_samples_shift + 1 - QMF_HYBRID_FILT_ORDER]),
+ scratch, num_samples, ixheaacd_ia_mps_hyb_filter_coeff_8);
+
+ for (k = 0; k < 2; k++) {
for (n = 0; n < num_samples; n++) {
- handle->lf_buffer[k][n + lf_samples_shift].re = (WORD32)(in_qmf[n][k].re);
- handle->lf_buffer[k][n + lf_samples_shift].im = (WORD32)(in_qmf[n][k].im);
+ v[n][k].re = scratch[k + 6][n].re;
+ v[n][k + 2].re = scratch[k][n].re;
+ v[n][k + 4].re = scratch[k + 2][n].re;
+ v[n][k + 4].re += scratch[5 - k][n].re;
+
+ v[n][k].im = scratch[k + 6][n].im;
+ v[n][k + 2].im = scratch[k][n].im;
+ v[n][k + 4].im = scratch[k + 2][n].im;
+ v[n][k + 4].im += scratch[5 - k][n].im;
}
}
- for (k = 0; k < num_bands - lf_qmf_bands; k++) {
- for (n = 0; n < hf_samples_shift; n++) {
- handle->hf_buffer[k][n].re = handle->hf_buffer[k][n + num_samples].re;
- handle->hf_buffer[k][n].im = handle->hf_buffer[k][n + num_samples].im;
+ ixheaacd_mps_hyb_filt_type2(
+ &(handle->lf_buffer[1][lf_samples_shift + 1 - QMF_HYBRID_FILT_ORDER]),
+ scratch, num_samples, ixheaacd_mps_hyb_filter_coeff_2);
+
+ for (k = 0; k < 2; k++) {
+ for (n = 0; n < num_samples; n++) {
+ v[n][k + 6].re = scratch[1 - k][n].re;
+ v[n][k + 6].im = scratch[1 - k][n].im;
+ }
+ }
+
+ ixheaacd_mps_hyb_filt_type2(
+ &(handle->lf_buffer[2][lf_samples_shift + 1 - QMF_HYBRID_FILT_ORDER]),
+ scratch, num_samples, ixheaacd_mps_hyb_filter_coeff_2);
+
+ for (k = 0; k < 2; k++) {
+ for (n = 0; n < num_samples; n++) {
+ v[n][k + 8].re = scratch[k][n].re;
+ v[n][k + 8].im = scratch[k][n].im;
}
}
for (k = 0; k < num_bands - lf_qmf_bands; k++) {
for (n = 0; n < num_samples; n++) {
- handle->hf_buffer[k][n + hf_samples_shift].re =
- (in_qmf[n][k + lf_qmf_bands].re);
- handle->hf_buffer[k][n + hf_samples_shift].im =
- (in_qmf[n][k + lf_qmf_bands].im);
+ v[n][k + 10].re = (handle->hf_buffer[k][n + hf_samples_shift].re);
+ v[n][k + 10].im = (handle->hf_buffer[k][n + hf_samples_shift].im);
}
}
+}
+
+VOID ixheaacd_mps_qmf_hybrid_analysis(
+ ia_mps_hybrid_filt_struct *handle,
+ ia_cmplx_flt_struct in_qmf[MAX_NUM_QMF_BANDS_MPS_NEW][MAX_TIME_SLOTS],
+ WORD32 num_bands, WORD32 num_samples,
+ ia_cmplx_flt_struct hyb[MAX_HYBRID_BANDS_MPS][MAX_TIME_SLOTS]) {
+ WORD32 lf_samples_shift;
+ WORD32 hf_samples_shift;
+ WORD32 lf_qmf_bands;
+ WORD32 k, n;
+
+ ia_cmplx_flt_struct scratch[MAX_HYBRID_ONLY_BANDS_PER_QMF][MAX_TIME_SLOTS];
+
+ lf_samples_shift = BUFFER_LEN_LF_MPS - num_samples;
+ hf_samples_shift = BUFFER_LEN_HF_MPS - num_samples;
+
+ lf_qmf_bands = QMF_BANDS_TO_HYBRID;
+
+ for (k = 0; k < lf_qmf_bands; k++) {
+ memmove(&handle->lf_buffer[k][0].re, &handle->lf_buffer[k][num_samples].re,
+ 2 * lf_samples_shift * sizeof(FLOAT32));
+ }
+
+ for (k = 0; k < lf_qmf_bands; k++) {
+ memcpy(&handle->lf_buffer[k][lf_samples_shift].re, &in_qmf[k][0].re,
+ 2 * num_samples * sizeof(FLOAT32));
+ }
+
+ for (k = 0; k < MAX_NUM_QMF_BANDS_SAC / 2 - lf_qmf_bands; k++) {
+ memmove(&handle->hf_buffer[k][0].re, &handle->hf_buffer[k][num_samples].re,
+ 2 * hf_samples_shift * sizeof(FLOAT32));
+ }
+
+ for (k = 0; k < num_bands - lf_qmf_bands; k++) {
+ memcpy(&handle->hf_buffer[k][hf_samples_shift].re,
+ &in_qmf[k + lf_qmf_bands][0].re, 2 * num_samples * sizeof(FLOAT32));
+ }
ixheaacd_mps_hyb_filt_type1(
&(handle->lf_buffer[0][lf_samples_shift + 1 - QMF_HYBRID_FILT_ORDER]),
@@ -226,15 +342,15 @@ VOID ixheaacd_mps_qmf_hybrid_analysis(
for (k = 0; k < 2; k++) {
for (n = 0; n < num_samples; n++) {
- hyb[n][k].re = (FLOAT32)scratch[k + 6][n].re;
- hyb[n][k + 2].re = (FLOAT32)scratch[k][n].re;
- hyb[n][k + 4].re = (FLOAT32)scratch[k + 2][n].re;
- hyb[n][k + 4].re += (FLOAT32)scratch[5 - k][n].re;
-
- hyb[n][k].im = (FLOAT32)scratch[k + 6][n].im;
- hyb[n][k + 2].im = (FLOAT32)scratch[k][n].im;
- hyb[n][k + 4].im = (FLOAT32)scratch[k + 2][n].im;
- hyb[n][k + 4].im += (FLOAT32)scratch[5 - k][n].im;
+ hyb[k][n].re = scratch[k + 6][n].re;
+ hyb[k + 2][n].re = scratch[k][n].re;
+ hyb[k + 4][n].re = scratch[k + 2][n].re;
+ hyb[k + 4][n].re += scratch[5 - k][n].re;
+
+ hyb[k][n].im = scratch[k + 6][n].im;
+ hyb[k + 2][n].im = scratch[k][n].im;
+ hyb[k + 4][n].im = scratch[k + 2][n].im;
+ hyb[k + 4][n].im += scratch[5 - k][n].im;
}
}
@@ -244,8 +360,8 @@ VOID ixheaacd_mps_qmf_hybrid_analysis(
for (k = 0; k < 2; k++) {
for (n = 0; n < num_samples; n++) {
- hyb[n][k + 6].re = (FLOAT32)scratch[1 - k][n].re;
- hyb[n][k + 6].im = (FLOAT32)scratch[1 - k][n].im;
+ hyb[k + 6][n].re = scratch[1 - k][n].re;
+ hyb[k + 6][n].im = scratch[1 - k][n].im;
}
}
@@ -255,16 +371,14 @@ VOID ixheaacd_mps_qmf_hybrid_analysis(
for (k = 0; k < 2; k++) {
for (n = 0; n < num_samples; n++) {
- hyb[n][k + 8].re = (FLOAT32)scratch[k][n].re;
- hyb[n][k + 8].im = (FLOAT32)scratch[k][n].im;
+ hyb[k + 8][n].re = scratch[k][n].re;
+ hyb[k + 8][n].im = scratch[k][n].im;
}
}
for (k = 0; k < num_bands - lf_qmf_bands; k++) {
- for (n = 0; n < num_samples; n++) {
- hyb[n][k + 10].re = (handle->hf_buffer[k][n + hf_samples_shift].re);
- hyb[n][k + 10].im = (handle->hf_buffer[k][n + hf_samples_shift].im);
- }
+ memcpy(&hyb[k + 10][0].re, &handle->hf_buffer[k][hf_samples_shift].re,
+ 2 * num_samples * sizeof(FLOAT32));
}
}
@@ -289,9 +403,7 @@ VOID ixheaacd_mps_qmf_hybrid_synthesis(
in_qmf[n][2].re = hyb[n][8].re + hyb[n][9].re;
in_qmf[n][2].im = hyb[n][8].im + hyb[n][9].im;
- for (k = 3; k < num_bands; k++) {
- in_qmf[n][k].re = hyb[n][k - 3 + 10].re;
- in_qmf[n][k].im = hyb[n][k - 3 + 10].im;
- }
+ memcpy(&in_qmf[n][3].re, &hyb[n][10].re,
+ 2 * (num_bands - 3) * sizeof(FLOAT32));
}
}
diff --git a/decoder/ixheaacd_mps_parse.c b/decoder/ixheaacd_mps_parse.c
index 81a8592..ca5cbcb 100644
--- a/decoder/ixheaacd_mps_parse.c
+++ b/decoder/ixheaacd_mps_parse.c
@@ -107,8 +107,8 @@ const int ixheaacd_ipd_de_quant_table_q28[] = {
1264972288, 1370386688, 1475800960, 1581215360};
static const int ixheaacd_smoothing_time_table[] = {64, 128, 256, 512};
-static const int ixheaacd_inverse_smoothing_time_table_q30[] = {
- 16777216, 8388608, 4194304, 2097152};
+static const FLOAT32 ixheaacd_inverse_smoothing_time_table[] = {
+ 1.0f / 64.0f, 1.0f / 128.0f, 1.0f / 256.0f, 1.0f / 512.0f};
static WORD32 bound_check(WORD32 var, WORD32 lower_bound, WORD32 upper_bound) {
var = min(var, upper_bound);
@@ -878,7 +878,7 @@ static VOID ixheaacd_mps_dec_and_mapframesmg(ia_mps_dec_state_struct *self) {
switch (frame->bs_smooth_mode[ps]) {
case 0:
self->smoothing_time[ps] = 256;
- self->inv_smoothing_time[ps] = 4194304;
+ self->inv_smoothing_time[ps] = (FLOAT32)(1.0f / 256.0f);
for (pb = 0; pb < self->bs_param_bands; pb++) {
self->smoothing_data[ps][pb] = 0;
@@ -908,8 +908,7 @@ static VOID ixheaacd_mps_dec_and_mapframesmg(ia_mps_dec_state_struct *self) {
self->smoothing_time[ps] =
ixheaacd_smoothing_time_table[frame->bs_smooth_time[ps]];
self->inv_smoothing_time[ps] =
- ixheaacd_inverse_smoothing_time_table_q30[frame
- ->bs_smooth_time[ps]];
+ ixheaacd_inverse_smoothing_time_table[frame->bs_smooth_time[ps]];
for (pb = 0; pb < self->bs_param_bands; pb++) {
self->smoothing_data[ps][pb] = 1;
}
@@ -919,8 +918,7 @@ static VOID ixheaacd_mps_dec_and_mapframesmg(ia_mps_dec_state_struct *self) {
self->smoothing_time[ps] =
ixheaacd_smoothing_time_table[frame->bs_smooth_time[ps]];
self->inv_smoothing_time[ps] =
- ixheaacd_inverse_smoothing_time_table_q30[frame
- ->bs_smooth_time[ps]];
+ ixheaacd_inverse_smoothing_time_table[frame->bs_smooth_time[ps]];
ch_fac = ixheaacd_mps_stride_table[frame->bs_freq_res_stride_smg[ps]];
data_bands = (self->bs_param_bands - 1) / ch_fac + 1;
@@ -994,10 +992,9 @@ WORD32 ixheaacd_mps_frame_decode(ia_mps_dec_state_struct *self) {
WORD32 ixheaacd_mps_header_decode(ia_mps_dec_state_struct *self) {
self->time_slots = self->frame_length;
- self->frame_len = self->time_slots * self->qmf_band_count;
self->bs_param_bands = ixheaacd_freq_res_table[self->config->bs_freq_res];
- self->hyb_band_count = self->qmf_band_count - QMF_BANDS_TO_HYBRID + 10;
+ self->hyb_band_count_max = self->qmf_band_count - QMF_BANDS_TO_HYBRID + 10;
switch (self->bs_param_bands) {
case 4:
diff --git a/decoder/ixheaacd_mps_poly_filt.c b/decoder/ixheaacd_mps_poly_filt.c
index 315f0c7..7118538 100644
--- a/decoder/ixheaacd_mps_poly_filt.c
+++ b/decoder/ixheaacd_mps_poly_filt.c
@@ -32,22 +32,10 @@
#include "ixheaacd_basic_ops32.h"
#include "ixheaacd_function_selector.h"
-extern const WORD32
- ixheaacd_mps_polyphase_filter_coeff_fix[10 * MAX_NUM_QMF_BANDS_SAC / 2];
-extern const WORD32 ixheaacd_mps_pre_re[64];
-extern const WORD32 ixheaacd_mps_pre_im[64];
-extern const WORD32 ixheaacd_mps_post_re[128];
-extern const WORD32 ixheaacd_mps_post_im[128];
-
-static PLATFORM_INLINE WORD32 ixheaacd_mult32(WORD32 a, WORD32 b) {
- WORD32 result;
- WORD64 temp_result;
-
- temp_result = (WORD64)a * (WORD64)b;
- result = (WORD32)(temp_result >> 31);
-
- return (result);
-}
+extern const FLOAT32
+ ixheaacd_mps_polyphase_filter_coeff[10 * MAX_NUM_QMF_BANDS_SAC / 2];
+extern const FLOAT32 ixheaacd_mps_post_twid[30];
+extern const FLOAT32 ixheaacd_mps_pre_twid[64];
VOID ixheaacd_mps_synt_create(ia_mps_poly_phase_struct *kernel,
WORD32 resolution) {
@@ -55,65 +43,14 @@ VOID ixheaacd_mps_synt_create(ia_mps_poly_phase_struct *kernel,
}
VOID ixheaacd_mps_synt_init(ia_mps_poly_phase_synth_struct *self) {
- memset(self->state, 0, sizeof(WORD32) * 64 * 20);
-}
-
-static VOID ixheaacd_float_to_int32(FLOAT32 *in, WORD32 *out, WORD32 q_factor,
- WORD32 sample) {
- WORD32 loop;
- UWORD32 temp = (1 << q_factor);
-
- for (loop = 0; loop < sample; loop++) out[loop] = (WORD32)(in[loop] * temp);
-}
-
-VOID ixheaacd_mps_synt_pre_twiddle_dec(WORD32 *ptr_in, const WORD32 *table_re,
- const WORD32 *table_im,
- WORD32 resolution) {
- WORD32 tmp, k;
- for (k = 0; k < 2 * resolution; k += 2) {
- tmp = ixheaacd_add32_sat(ixheaacd_mult32(ptr_in[k], table_re[k >> 1]),
- ixheaacd_mult32(ptr_in[k + 1], table_im[k >> 1]));
- ptr_in[k + 1] = ixheaacd_add32_sat(
- ixheaacd_mult32(ixheaacd_negate32_sat(ptr_in[k]), table_im[k >> 1]),
- ixheaacd_mult32(ptr_in[k + 1], table_re[k >> 1]));
-
- ptr_in[k] = tmp;
- }
-}
-
-VOID ixheaacd_mps_synt_post_twiddle_dec(WORD32 *ptr_in, const WORD32 *table_re,
- const WORD32 *table_im,
- WORD32 resolution) {
- WORD32 tmp, k;
- for (k = 0; k < 2 * resolution; k += 2) {
- tmp = ixheaacd_add32_sat(ixheaacd_mult32(ptr_in[k], table_re[k]),
- ixheaacd_mult32(ptr_in[k + 1], table_im[k]));
-
- ptr_in[k + 1] = ixheaacd_add32_sat(
- ixheaacd_mult32(ixheaacd_negate32_sat(ptr_in[k]), table_im[k]),
- ixheaacd_mult32(ptr_in[k + 1], table_re[k]));
-
- ptr_in[k] = tmp;
- }
+ memset(self->state, 0, sizeof(FLOAT32) * POLY_PHASE_SYNTH_SIZE);
}
-VOID ixheaacd_mps_synt_post_fft_twiddle_dec(WORD32 resolution, WORD32 *fin_re,
- WORD32 *fin_im,
- const WORD32 *table_re,
- const WORD32 *table_im,
- WORD32 *state) {
- WORD32 l;
- for (l = 0; l < 2 * resolution; l++) {
- state[2 * resolution - l - 1] =
- ixheaacd_add32_sat(ixheaacd_mult32(fin_re[l], table_re[l]),
- ixheaacd_mult32(fin_im[l], table_im[l]));
- }
-}
-
-VOID ixheaacd_mps_synt_out_calc_dec(WORD32 resolution, WORD32 *out,
- WORD32 *state, const WORD32 *filter_coeff) {
+VOID ixheaacd_mps_synt_out_calc_dec(WORD32 resolution, FLOAT32 *out,
+ FLOAT32 *state,
+ const FLOAT32 *filter_coeff) {
WORD32 l, k;
- WORD32 *out1, *out2, *state1, *state2;
+ FLOAT32 *out1, *out2, *state1, *state2;
out1 = out;
out2 = out + resolution;
state1 = state;
@@ -121,8 +58,8 @@ VOID ixheaacd_mps_synt_out_calc_dec(WORD32 resolution, WORD32 *out,
for (k = 0; k < 5; k++) {
for (l = 0; l < resolution; l++) {
- *out1++ = (WORD32)(((WORD64)(*state1++) * (*filter_coeff++)) >> 31);
- *out2++ = (WORD32)(((WORD64)(*state2++) * (*filter_coeff++)) >> 31);
+ *out1++ = (*state1++) * (*filter_coeff++);
+ *out2++ = (*state2++) * (*filter_coeff++);
}
out1 += resolution;
out2 += resolution;
@@ -131,64 +68,163 @@ VOID ixheaacd_mps_synt_out_calc_dec(WORD32 resolution, WORD32 *out,
}
}
+VOID ixheaacd_mps_synth_pre_twidle(FLOAT32 *out_re, FLOAT32 *out_im,
+ FLOAT32 *c_in, WORD32 len) {
+ WORD32 i;
+ FLOAT32 *c_s = c_in;
+ FLOAT32 *p_re_s = out_re;
+ FLOAT32 *p_im_s = out_im;
+ FLOAT32 *c_e = c_in + (len << 1) - 1;
+ FLOAT32 *p_im_e = out_im + len - 1;
+ FLOAT32 *p_re_e = out_re + len - 1;
+ const FLOAT32 *prtw = ixheaacd_mps_pre_twid;
+
+ for (i = 0; i < len; i += 4) {
+ *p_re_s = ((*c_s++) * (*prtw));
+ p_re_s++;
+ *p_im_s = -((*c_s--) * (*prtw));
+ p_im_s++;
+ *p_im_s = ((*c_e--) * (*prtw));
+ p_im_s--;
+ *p_re_s = ((*c_e++) * (*prtw++));
+ p_re_s--;
+ *p_im_s += ((*c_e--) * (*prtw));
+ p_im_s++;
+ *p_re_s += ((*c_e--) * (*prtw));
+ p_re_s++;
+ *p_re_s -= ((*c_s++) * (*prtw));
+ p_re_s++;
+ *p_im_s += ((*c_s++) * (*prtw++));
+ p_im_s++;
+ *p_im_e = ((*c_e--) * (*prtw));
+ p_im_e--;
+ *p_re_e = -((*c_e++) * (*prtw));
+ p_re_e--;
+ *p_re_e = ((*c_s++) * (*prtw));
+ p_re_e++;
+ *p_im_e = ((*c_s--) * (*prtw++));
+ p_im_e++;
+ *p_re_e += ((*c_s++) * (*prtw));
+ p_re_e--;
+ *p_im_e += ((*c_s++) * (*prtw));
+ p_im_e--;
+ *p_im_e -= ((*c_e--) * (*prtw));
+ p_im_e--;
+ *p_re_e += ((*c_e--) * (*prtw++));
+ p_re_e--;
+ }
+}
+
+VOID ixheaacd_mps_synth_post_twidle(FLOAT32 *state, FLOAT32 *out_re,
+ FLOAT32 *out_im, WORD32 len) {
+ WORD32 i;
+ {
+ FLOAT32 x_0, x_1, x_2, x_3;
+ FLOAT32 *p_re_e, *p_im_e;
+ const FLOAT32 *potw = ixheaacd_mps_post_twid;
+ FLOAT32 *p_re_s = out_re;
+ FLOAT32 *p_im_s = out_im;
+
+ p_re_e = p_re_s + (len - 2);
+ p_im_e = p_im_s + (len - 2);
+ x_0 = *p_re_e;
+ x_1 = *(p_re_e + 1);
+ x_2 = *p_im_e;
+ x_3 = *(p_im_e + 1);
+
+ *(p_re_e + 1) = -*(p_re_s + 1);
+ *(p_im_e + 1) = -*p_im_s;
+ *p_im_s = *(p_im_s + 1);
+
+ for (i = 5; i < len; i += 4) {
+ FLOAT32 twdr = *potw++;
+ FLOAT32 twdi = *potw++;
+ FLOAT32 tmp;
+
+ *p_re_e = (x_0 * twdi);
+ *p_re_e += (x_1 * twdr);
+ p_re_e--;
+ p_re_s++;
+ *p_re_s = (x_0 * twdr);
+ *p_re_s -= (x_1 * twdi);
+ p_re_s++;
+ x_1 = *p_re_e--;
+ x_0 = *p_re_e++;
+ *p_re_e = (*p_re_s++ * twdi);
+ *p_re_e += -(*p_re_s * twdr);
+ p_re_e--;
+ tmp = (*p_re_s-- * twdi);
+ *p_re_s = tmp + (*p_re_s * twdr);
+
+ *p_im_e = -(x_2 * twdr);
+ *p_im_e += (x_3 * twdi);
+ p_im_e--;
+ p_im_s++;
+ *p_im_s = -(x_2 * twdi);
+ *p_im_s -= (x_3 * twdr);
+ p_im_s++;
+ x_3 = *p_im_e--;
+ x_2 = *p_im_e++;
+ *p_im_e = -(*p_im_s++ * twdr);
+ *p_im_e -= (*p_im_s * twdi);
+ p_im_e--;
+ tmp = (*p_im_s-- * twdr);
+ *p_im_s = tmp - (*p_im_s * twdi);
+ }
+
+ *p_re_e = 0.7071067f * (x_1 + x_0);
+ *p_im_e = 0.7071067f * (x_3 - x_2);
+ *(p_re_s + 1) = -0.7071067f * (x_1 - x_0);
+ *(p_im_s + 1) = -0.7071067f * (x_3 + x_2);
+ }
+
+ for (i = 0; i < len; i++) {
+ state[i] = out_im[i] - out_re[i];
+ state[len + i] = out_im[len - i - 1] + out_re[len - i - 1];
+ state[len - i - 1] = out_im[len - i - 1] - out_re[len - i - 1];
+ state[2 * len - i - 1] = out_im[i] + out_re[i];
+ }
+}
+
VOID ixheaacd_mps_synt_calc(ia_mps_dec_state_struct *self) {
WORD32 k, l, ts, ch;
- WORD64 acc;
- WORD32 ptr_in[128];
- WORD32 fin_re[128];
- WORD32 fin_im[128];
- FLOAT32 temp;
- WORD32 *state, *tmp_state, *out;
- const WORD32 *filt_coeff;
- WORD32 *tmp_buf = self->tmp_buf;
+ FLOAT32 *state, *tmp_state, *out;
+ const FLOAT32 *filt_coeff;
+ FLOAT32 *tmp_buf = self->tmp_buf;
+ FLOAT32 fin_re[64] = {0};
+ FLOAT32 fin_im[64] = {0};
ia_mps_poly_phase_struct kernel = self->poly_phase_filt_kernel;
WORD32 resolution = kernel.resolution;
+ WORD32 m_resolution = resolution >> 1;
for (ch = 0; ch < self->out_ch_count; ch++) {
tmp_state = (&self->qmf_filt_state[ch])->state;
state = &tmp_buf[self->time_slots * 2 * resolution];
- memcpy(state, tmp_state, sizeof(WORD32) * 20 * resolution);
+ memcpy(state, tmp_state, sizeof(FLOAT32) * 18 * resolution);
out = &tmp_buf[74 * MAX_NUM_QMF_BANDS_SAC];
for (ts = 0; ts < self->time_slots; ts++) {
- ixheaacd_float_to_int32(&self->qmf_out_dir[ch][ts][0].re, ptr_in, 10,
- resolution * 2);
-
- filt_coeff = ixheaacd_mps_polyphase_filter_coeff_fix;
+ filt_coeff = ixheaacd_mps_polyphase_filter_coeff;
state -= (2 * resolution);
- (*ixheaacd_mps_synt_pre_twiddle)(ptr_in, ixheaacd_mps_pre_re,
- ixheaacd_mps_pre_im, resolution);
- (*ixheaacd_mps_complex_fft_64)(ptr_in, fin_re, fin_im, resolution);
+ ixheaacd_mps_synth_pre_twidle(
+ fin_re, fin_im, &self->qmf_out_dir[ch][ts][0].re, resolution);
- (*ixheaacd_mps_synt_post_twiddle)(ptr_in, ixheaacd_mps_post_re,
- ixheaacd_mps_post_im, resolution);
+ ixheaacd_mps_synth_calc_fft(fin_re, fin_im, m_resolution);
- (*ixheaacd_mps_complex_fft_64)(ptr_in, &fin_re[1], &fin_im[1],
- resolution);
+ ixheaacd_mps_synth_post_twidle(state, fin_re, fin_im, resolution);
- (*ixheaacd_mps_synt_post_fft_twiddle)(resolution, fin_re, fin_im,
- ixheaacd_mps_post_re,
- ixheaacd_mps_post_im, state);
(*ixheaacd_mps_synt_out_calc)(resolution, out, state, filt_coeff);
for (k = 0; k < resolution; k++) {
- acc = 0;
- for (l = 0; l < 10; l++) {
- acc = acc + out[resolution * l + k];
+ FLOAT32 acc = out[k];
+ for (l = 1; l < 10; l++) {
+ acc += out[resolution * l + k];
}
- if (acc >= 2147483647)
- temp = 1.0;
- else if (acc <= -2147483647 - 1)
- temp = -1.0f;
- else
- temp = (FLOAT32)((WORD32)acc) / ((FLOAT32)(1 << 10));
-
- self->output_buffer[ch][self->qmf_band_count * ts + k] = (FLOAT32)temp;
+ self->output_buffer[ch][self->qmf_band_count * ts + k] = acc;
}
}
-
- memcpy(tmp_state, state, sizeof(WORD32) * 20 * resolution);
+ memcpy(tmp_state, state, sizeof(FLOAT32) * 18 * resolution);
}
}
diff --git a/decoder/ixheaacd_mps_polyphase.h b/decoder/ixheaacd_mps_polyphase.h
index dcc6f10..79e2c8e 100644
--- a/decoder/ixheaacd_mps_polyphase.h
+++ b/decoder/ixheaacd_mps_polyphase.h
@@ -21,9 +21,10 @@
#define IXHEAACD_MPS_POLYPHASE_H
#define MAX_NUM_QMF_BANDS_SAC (128)
+#define POLY_PHASE_SYNTH_SIZE (1152)
typedef struct ia_mps_poly_phase_synth_struct {
- WORD32 state[1280];
+ FLOAT32 state[POLY_PHASE_SYNTH_SIZE];
} ia_mps_poly_phase_synth_struct;
typedef struct ia_mps_poly_phase_struct {
diff --git a/decoder/ixheaacd_mps_pre_mix.c b/decoder/ixheaacd_mps_pre_mix.c
index c490e78..3d7a5cf 100644
--- a/decoder/ixheaacd_mps_pre_mix.c
+++ b/decoder/ixheaacd_mps_pre_mix.c
@@ -47,22 +47,21 @@
#define PI_Q28 (843314856)
#define PI_Q27 (421657428)
#define PI_BY_8_Q28 (105414352)
+#define P_PI 3.1415926535897932
+#define PI_IN_Q28 843314880
-extern const WORD32 ixheaacd_im_weight_Q28[16][8][31];
-extern const WORD32 ixheaacd_re_weight_Q28[16][8][31];
-extern const WORD32 ixheaacd_beta_Q28[16][8][31];
-extern const WORD32 ixheaacd_weight_Q28[16][8][31];
-extern const WORD32 ixheaacd_c_l_table_Q31[31];
-extern const WORD32 ixheaacd_sin_table_Q31[8][31];
-extern const WORD32 ixheaacd_cos_table_Q31[8][31];
extern const WORD32 ixheaacd_atan_table_Q28[16][8][31];
extern const WORD32 ixheaacd_ipd_de_quant_table_q28[16];
-#define P_PI 3.1415926535897932
-#define PI_IN_Q28 843314880
+extern const FLOAT32 ixheaacd_im_weight[16][8][31];
+extern const FLOAT32 ixheaacd_re_weight[16][8][31];
+extern const FLOAT32 ixheaacd_beta[16][8][31];
+extern const FLOAT32 ixheaacd_weight[16][8][31];
+extern const FLOAT32 ixheaacd_c_l_table[31];
+extern const FLOAT32 ixheaacd_sin_table[8][31];
+extern const FLOAT32 ixheaacd_cos_table[8][31];
-#define P_PI 3.1415926535897932
-#define PI_IN_Q28 843314880
+extern const WORD32 ixheaacd_mps_gain_set_indx[29];
static WORD32 ixheaacd_mps_phase_wraping(WORD32 phase) {
const WORD32 pi_2 = 2 * PI_IN_Q28;
@@ -116,17 +115,17 @@ VOID ixheaacd_fix_to_float_int(WORD32 *inp, FLOAT32 *out, WORD32 length,
VOID ixheaacd_pre_and_mix_matrix_calculation(ia_mps_dec_state_struct *self) {
WORD32 ps, pb;
ia_mps_bs_frame *curr_bit_stream = &(self->bs_frame);
- WORD32 h_imag[2 * MAX_PARAMETER_BANDS];
- WORD32
- h_real[6 * MAX_PARAMETER_BANDS];
+ FLOAT32 h_imag[2 * MAX_PARAMETER_BANDS];
+ FLOAT32 h_real[6 * MAX_PARAMETER_BANDS];
ixheaacd_mps_buffer_pre_and_mix_matrix(self);
for (ps = 0; ps < self->num_parameter_sets; ps++) {
- WORD32 *h_im = &h_imag[0];
- WORD32 *h_re = &h_real[0];
- memset(h_real, 0, 6 * MAX_PARAMETER_BANDS * sizeof(WORD32));
- memset(h_imag, 0, 2 * MAX_PARAMETER_BANDS * sizeof(WORD32));
+ FLOAT32 *h_im = &h_imag[0];
+ FLOAT32 *h_re = &h_real[0];
+
+ memset(h_real, 0, 6 * MAX_PARAMETER_BANDS * sizeof(FLOAT32));
+ memset(h_imag, 0, 2 * MAX_PARAMETER_BANDS * sizeof(FLOAT32));
switch (self->config->bs_phase_coding) {
case 0:
@@ -148,8 +147,8 @@ VOID ixheaacd_pre_and_mix_matrix_calculation(ia_mps_dec_state_struct *self) {
}
for (pb = 0; pb < self->bs_param_bands; pb++) {
- self->m1_param_re[ps][pb][0][0] = 1073741824;
- self->m1_param_re[ps][pb][1][0] = 1073741824;
+ self->m1_param_re[ps][pb][0][0] = 1.0f;
+ self->m1_param_re[ps][pb][1][0] = 1.0f;
self->m1_param_im[ps][pb][0][0] = 0;
self->m1_param_im[ps][pb][1][0] = 0;
@@ -177,21 +176,15 @@ VOID ixheaacd_pre_and_mix_matrix_calculation(ia_mps_dec_state_struct *self) {
}
}
ixheaacd_mps_smoothing_opd(self);
-
- ixheaacd_fix_to_float_int(&self->phase_l_fix[0][0], &self->phase_l[0][0],
- MAX_PARAMETER_SETS_MPS * MAX_PARAMETER_BANDS,
- 268435456.0f);
- ixheaacd_fix_to_float_int(&self->phase_r_fix[0][0], &self->phase_r[0][0],
- MAX_PARAMETER_SETS_MPS * MAX_PARAMETER_BANDS,
- 268435456.0f);
}
static VOID ixheaacd_mps_par2umx_ps_core(WORD32 cld[MAX_PARAMETER_BANDS],
WORD32 icc[MAX_PARAMETER_BANDS],
WORD32 ott_band_count,
- WORD32 *h_real) {
+ FLOAT32 *h_real) {
WORD32 band;
- WORD32 c_l_temp, c_r_temp, cld_idx, icc_idx, temp;
+ FLOAT32 c_l_temp, c_r_temp, temp;
+ WORD32 cld_idx, icc_idx;
for (band = 0; band < ott_band_count; band++) {
cld_idx = *cld++ + 15;
@@ -199,27 +192,27 @@ static VOID ixheaacd_mps_par2umx_ps_core(WORD32 cld[MAX_PARAMETER_BANDS],
icc_idx = icc_idx & 7;
- c_l_temp = (ixheaacd_c_l_table_Q31[cld_idx]);
- c_r_temp = (ixheaacd_c_l_table_Q31[30 - cld_idx]);
+ c_l_temp = (ixheaacd_c_l_table[cld_idx]);
+ c_r_temp = (ixheaacd_c_l_table[30 - cld_idx]);
+#define MULT(a, b) (a * b)
+ temp = ixheaacd_cos_table[icc_idx][cld_idx];
+ *h_real++ = MULT(temp, c_l_temp);
- temp = ixheaacd_cos_table_Q31[icc_idx][cld_idx];
- *h_real++ = ixheaacd_mult32(temp, c_l_temp) >> 2;
+ temp = ixheaacd_cos_table[icc_idx][30 - cld_idx];
+ *h_real++ = MULT(temp, c_r_temp);
- temp = ixheaacd_cos_table_Q31[icc_idx][30 - cld_idx];
- *h_real++ = ixheaacd_mult32(temp, c_r_temp) >> 2;
+ temp = ixheaacd_sin_table[icc_idx][cld_idx];
+ *h_real++ = MULT(temp, c_l_temp);
- temp = ixheaacd_sin_table_Q31[icc_idx][cld_idx];
- *h_real++ = ixheaacd_mult32(temp, c_l_temp) >> 2;
-
- temp = -ixheaacd_sin_table_Q31[icc_idx][30 - cld_idx];
- *h_real++ = ixheaacd_mult32(temp, c_r_temp) >> 2;
+ temp = -ixheaacd_sin_table[icc_idx][30 - cld_idx];
+ *h_real++ = MULT(temp, c_r_temp);
h_real += 2;
}
}
VOID ixheaacd_mps_par2umx_ps(ia_mps_dec_state_struct *self,
- ia_mps_bs_frame *curr_bit_stream, WORD32 *h_real,
+ ia_mps_bs_frame *curr_bit_stream, FLOAT32 *h_real,
WORD32 param_set_idx) {
ixheaacd_mps_par2umx_ps_core(curr_bit_stream->cld_idx[param_set_idx],
curr_bit_stream->icc_idx[param_set_idx],
@@ -246,7 +239,7 @@ static VOID ixheaacd_mps_opd_calc(ia_mps_dec_state_struct *self,
VOID ixheaacd_mps_par2umx_ps_ipd_opd(ia_mps_dec_state_struct *self,
ia_mps_bs_frame *curr_bit_stream,
- WORD32 *h_real, WORD32 param_set_idx) {
+ FLOAT32 *h_real, WORD32 param_set_idx) {
WORD32 opd[MAX_PARAMETER_BANDS];
WORD32 ott_band_count = self->bs_param_bands;
WORD32 num_bands_ipd = self->num_bands_ipd;
@@ -263,25 +256,27 @@ VOID ixheaacd_mps_par2umx_ps_ipd_opd(ia_mps_dec_state_struct *self,
WORD32 ipd_idx = curr_bit_stream->ipd_idx[param_set_idx][band] & 15;
WORD32 ipd = ixheaacd_ipd_de_quant_table_q28[ipd_idx];
- self->phase_l_fix[param_set_idx][band] =
- ixheaacd_mps_phase_wraping(opd[band]);
- self->phase_r_fix[param_set_idx][band] =
- ixheaacd_mps_phase_wraping(opd[band] - ipd);
+#define Q28_FLOAT_VAL ((float)(1 << 28))
+#define ONE_BY_Q28_FLOAT_VAL (1.0f / Q28_FLOAT_VAL)
+ self->phase_l[param_set_idx][band] =
+ ixheaacd_mps_phase_wraping(opd[band]) * ONE_BY_Q28_FLOAT_VAL;
+ self->phase_r[param_set_idx][band] =
+ ixheaacd_mps_phase_wraping(opd[band] - ipd) * ONE_BY_Q28_FLOAT_VAL;
}
} else {
num_bands_ipd = 0;
}
for (band = num_bands_ipd; band < ott_band_count; band++) {
- self->phase_l_fix[param_set_idx][band] = 0;
- self->phase_r_fix[param_set_idx][band] = 0;
+ self->phase_l[param_set_idx][band] = 0;
+ self->phase_r[param_set_idx][band] = 0;
}
}
VOID ixheaacd_mps_par2umx_pred(ia_mps_dec_state_struct *self,
- ia_mps_bs_frame *curr_bit_stream, WORD32 *h_imag,
- WORD32 *h_real, WORD32 param_set_idx,
- WORD32 res_bands) {
+ ia_mps_bs_frame *curr_bit_stream,
+ FLOAT32 *h_imag, FLOAT32 *h_real,
+ WORD32 param_set_idx, WORD32 res_bands) {
WORD32 band;
for (band = 0; band < self->bs_param_bands; band++) {
@@ -291,7 +286,7 @@ VOID ixheaacd_mps_par2umx_pred(ia_mps_dec_state_struct *self,
if ((band < self->num_bands_ipd) && (cld_idx == 15) && (icc_idx == 0) &&
(ipd_idx == 8)) {
- WORD32 gain = 111848107;
+ FLOAT32 gain = 0.416666667f;
*h_imag++ = 0;
*h_imag++ = 0;
@@ -309,34 +304,34 @@ VOID ixheaacd_mps_par2umx_pred(ia_mps_dec_state_struct *self,
h_real += 4;
}
} else {
- WORD32 weight_fix, re_weight_fix, im_weight_fix;
+ FLOAT32 weight, re_weight, im_weight;
- weight_fix = ixheaacd_weight_Q28[ipd_idx][icc_idx][cld_idx];
- re_weight_fix = ixheaacd_re_weight_Q28[ipd_idx][icc_idx][cld_idx];
- im_weight_fix = ixheaacd_im_weight_Q28[ipd_idx][icc_idx][cld_idx];
+ weight = ixheaacd_weight[ipd_idx][icc_idx][cld_idx];
+ re_weight = ixheaacd_re_weight[ipd_idx][icc_idx][cld_idx];
+ im_weight = ixheaacd_im_weight[ipd_idx][icc_idx][cld_idx];
if (band < self->num_bands_ipd) {
- weight_fix = ixheaacd_weight_Q28[ipd_idx][icc_idx][cld_idx];
- re_weight_fix = ixheaacd_re_weight_Q28[ipd_idx][icc_idx][cld_idx];
- im_weight_fix = ixheaacd_im_weight_Q28[ipd_idx][icc_idx][cld_idx];
+ weight = ixheaacd_weight[ipd_idx][icc_idx][cld_idx];
+ re_weight = ixheaacd_re_weight[ipd_idx][icc_idx][cld_idx];
+ im_weight = ixheaacd_im_weight[ipd_idx][icc_idx][cld_idx];
} else {
- weight_fix = ixheaacd_weight_Q28[0][icc_idx][cld_idx];
- re_weight_fix = ixheaacd_re_weight_Q28[0][icc_idx][cld_idx];
- im_weight_fix = ixheaacd_im_weight_Q28[0][icc_idx][cld_idx];
+ weight = ixheaacd_weight[0][icc_idx][cld_idx];
+ re_weight = ixheaacd_re_weight[0][icc_idx][cld_idx];
+ im_weight = ixheaacd_im_weight[0][icc_idx][cld_idx];
}
- *h_real++ = weight_fix - re_weight_fix;
- *h_imag++ = -im_weight_fix;
- *h_real++ = weight_fix + re_weight_fix;
- *h_imag++ = im_weight_fix;
+ *h_real++ = weight - re_weight; // h_real[0] = weight - re_weight
+ *h_imag++ = -im_weight;
+ *h_real++ = weight + re_weight;
+ *h_imag++ = im_weight;
if (band < res_bands) {
h_real += 2;
- *h_real++ = weight_fix;
- *h_real++ = -weight_fix;
+ *h_real++ = weight;
+ *h_real++ = -weight;
} else {
- WORD32 beta = ixheaacd_beta_Q28[ipd_idx][icc_idx][cld_idx];
+ FLOAT32 beta = ixheaacd_beta[ipd_idx][icc_idx][cld_idx];
*h_real++ = beta;
*h_real++ = -beta;
@@ -347,122 +342,121 @@ VOID ixheaacd_mps_par2umx_pred(ia_mps_dec_state_struct *self,
}
WORD32 ixheaacd_mps_apply_pre_matrix(ia_mps_dec_state_struct *self) {
- WORD32 ts, qs, row, col = 0;
+ WORD32 ts, qs, row;
WORD32 err = 0;
- err = ixheaacd_mps_upmix_interp(
- self->m1_param_re, self->r_out_re_scratch_m1, self->m1_param_re_prev,
- (self->dir_sig_count + self->decor_sig_count), 1, self);
- if (err < 0) return err;
- err = ixheaacd_mps_upmix_interp(
- self->m1_param_im, self->r_out_im_scratch_m1, self->m1_param_im_prev,
- (self->dir_sig_count + self->decor_sig_count), 1, self);
- if (err < 0) return err;
+ if (self->pre_mix_req) {
+ err = ixheaacd_mps_upmix_interp_type1(
+ self->m1_param_re, self->r_out_re_in_m1, self->m1_param_re_prev,
+ (self->dir_sig_count + self->decor_sig_count), 1, self,
+ self->bs_high_rate_mode);
+ if (err < 0) return err;
- ixheaacd_fix_to_float_int(
- (WORD32 *)(self->r_out_re_scratch_m1), (FLOAT32 *)(self->r_out_re_in_m1),
- MAX_TIME_SLOTS * MAX_PARAMETER_BANDS * MAX_M_OUTPUT * MAX_M_INPUT,
- 1073741824);
- ixheaacd_fix_to_float_int(
- (WORD32 *)self->r_out_im_scratch_m1, (FLOAT32 *)self->r_out_im_in_m1,
- MAX_TIME_SLOTS * MAX_PARAMETER_BANDS * MAX_M_OUTPUT * MAX_M_INPUT,
- 1073741824);
+ for (ts = 0; ts < self->time_slots; ts++) {
+ for (qs = 0; qs < 2; qs++) {
+ WORD32 indx = self->hyb_band_to_processing_band_table[qs];
- for (ts = 0; ts < self->time_slots; ts++) {
- for (qs = 0; qs < 2; qs++) {
- WORD32 sign = -1;
- WORD32 indx = self->hyb_band_to_processing_band_table[qs];
- for (row = 0; row < (self->dir_sig_count + self->decor_sig_count);
- row++) {
- FLOAT32 sum_real = 0.0f;
- FLOAT32 sum_imag = 0.0f;
-
- {
- FLOAT32 real = self->hyb_in[0][ts][qs].re *
- self->r_out_re_in_m1[ts][indx][row][col] -
- self->hyb_in[0][ts][qs].im *
- self->r_out_im_in_m1[ts][indx][row][col] * sign;
- FLOAT32 imag = self->hyb_in[0][ts][qs].re *
- self->r_out_im_in_m1[ts][indx][row][col] * sign +
- self->hyb_in[0][ts][qs].im *
- self->r_out_re_in_m1[ts][indx][row][col];
- sum_real += real;
- sum_imag += imag;
+ FLOAT32 real =
+ self->hyb_in[0][qs][ts].re * self->r_out_re_in_m1[ts][indx][0][0];
+ FLOAT32 imag =
+ self->hyb_in[0][qs][ts].im * self->r_out_re_in_m1[ts][indx][0][0];
+ for (row = 0; row < (self->dir_sig_count + self->decor_sig_count);
+ row++) {
+ self->v[row][ts][qs].re = real;
+ self->v[row][ts][qs].im = imag;
+ }
+ }
+ for (qs = 2; qs < self->hyb_band_count[0]; qs++) {
+ WORD32 indx = self->hyb_band_to_processing_band_table[qs];
+ FLOAT32 real =
+ self->hyb_in[0][qs][ts].re * self->r_out_re_in_m1[ts][indx][0][0];
+ FLOAT32 imag =
+ self->hyb_in[0][qs][ts].im * self->r_out_re_in_m1[ts][indx][0][0];
+ for (row = 0; row < (self->dir_sig_count + self->decor_sig_count);
+ row++) {
+ self->v[row][ts][qs].re = real;
+ self->v[row][ts][qs].im = imag;
}
- self->v[row][ts][qs].re = sum_real;
- self->v[row][ts][qs].im = sum_imag;
}
}
- for (qs = 2; qs < self->hyb_band_count; qs++) {
- WORD32 sign = 1;
- WORD32 indx = self->hyb_band_to_processing_band_table[qs];
- for (row = 0; row < (self->dir_sig_count + self->decor_sig_count);
- row++) {
- FLOAT32 sum_real = 0.0f;
- FLOAT32 sum_imag = 0.0f;
-
- {
- FLOAT32 real = self->hyb_in[0][ts][qs].re *
- self->r_out_re_in_m1[ts][indx][row][col] -
- self->hyb_in[0][ts][qs].im *
- self->r_out_im_in_m1[ts][indx][row][col] * sign;
- FLOAT32 imag = self->hyb_in[0][ts][qs].re *
- self->r_out_im_in_m1[ts][indx][row][col] * sign +
- self->hyb_in[0][ts][qs].im *
- self->r_out_re_in_m1[ts][indx][row][col];
- sum_real += real;
- sum_imag += imag;
+ } else {
+ for (ts = 0; ts < self->time_slots; ts++) {
+ for (qs = 0; qs < self->hyb_band_count[0]; qs++) {
+ FLOAT32 real = self->hyb_in[0][qs][ts].re;
+ FLOAT32 imag = self->hyb_in[0][qs][ts].im;
+ for (row = 0; row < (self->dir_sig_count + self->decor_sig_count);
+ row++) {
+ self->v[row][ts][qs].re = real;
+ self->v[row][ts][qs].im = imag;
}
- self->v[row][ts][qs].re = sum_real;
- self->v[row][ts][qs].im = sum_imag;
}
}
}
return 0;
}
-WORD32 ixheaacd_mps_apply_mix_matrix(ia_mps_dec_state_struct *self) {
+WORD32 ixheaacd_mps_apply_mix_matrix_type1(ia_mps_dec_state_struct *self) {
+ WORD32 ts, qs, row;
+ WORD32 err = 0;
+
+ err = ixheaacd_mps_upmix_interp_type2(
+ self->m2_decor_re, self->r_out_diff_re_in_m2, self->m2_decor_re_prev,
+ self->out_ch_count, self, 1);
+ if (err < 0) return err;
+
+ err = ixheaacd_mps_upmix_interp_type2(self->m2_resid_re, self->r_out_re_in_m2,
+ self->m2_resid_re_prev,
+ self->out_ch_count, self, 0);
+ if (err < 0) return err;
+
+ for (qs = 0; qs < self->hyb_band_count[0]; qs++) {
+ WORD32 indx = self->hyb_band_to_processing_band_table[qs];
+ for (ts = 0; ts < self->time_slots; ts++) {
+ for (row = 0; row < self->out_ch_count; row++) {
+ self->hyb_dir_out[row][ts][qs].re =
+ self->w_dir[0][ts][qs].re * self->r_out_re_in_m2[ts][indx][row][0];
+ self->hyb_dir_out[row][ts][qs].im =
+ self->w_dir[0][ts][qs].im * self->r_out_re_in_m2[ts][indx][row][0];
+ self->hyb_diff_out[row][ts][qs].re =
+ self->w_diff[1][ts][qs].re *
+ self->r_out_diff_re_in_m2[ts][indx][row][1];
+ self->hyb_diff_out[row][ts][qs].im =
+ self->w_diff[1][ts][qs].im *
+ self->r_out_diff_re_in_m2[ts][indx][row][1];
+ }
+ }
+ }
+ return 0;
+}
+
+WORD32 ixheaacd_mps_apply_mix_matrix_type2(ia_mps_dec_state_struct *self) {
WORD32 ts, qs, row, col;
WORD32 complex_m2 = ((self->config->bs_phase_coding != 0));
WORD32 phase_interpolation = (self->config->bs_phase_coding == 1);
WORD32 err = 0;
- err = ixheaacd_mps_upmix_interp(
- self->m2_decor_re, self->r_diff_out_re_fix_in_m2, self->m2_decor_re_prev,
- self->out_ch_count, (self->dir_sig_count + self->decor_sig_count), self);
+ WORD32 num_col_iters = 0;
+
+ err = ixheaacd_mps_upmix_interp_type1(
+ self->m2_decor_re, self->r_out_diff_re_in_m2, self->m2_decor_re_prev,
+ self->out_ch_count, (self->dir_sig_count + self->decor_sig_count), self,
+ 1);
if (err < 0) return err;
- err = ixheaacd_mps_upmix_interp(
- self->m2_resid_re, self->r_out_re_fix_in_m2, self->m2_resid_re_prev,
- self->out_ch_count, (self->dir_sig_count + self->decor_sig_count), self);
+ err = ixheaacd_mps_upmix_interp_type1(
+ self->m2_resid_re, self->r_out_re_in_m2, self->m2_resid_re_prev,
+ self->out_ch_count, (self->dir_sig_count + self->decor_sig_count), self,
+ 1);
if (err < 0) return err;
- ixheaacd_fix_to_float_int(
- (WORD32 *)self->r_out_re_fix_in_m2, (FLOAT32 *)self->r_out_re_in_m2,
- MAX_TIME_SLOTS * MAX_PARAMETER_BANDS * MAX_M_OUTPUT * MAX_M_INPUT,
- 268435456);
- ixheaacd_fix_to_float_int(
- (WORD32 *)self->r_diff_out_re_fix_in_m2,
- (FLOAT32 *)self->r_out_diff_re_in_m2,
- MAX_TIME_SLOTS * MAX_PARAMETER_BANDS * MAX_M_OUTPUT * MAX_M_INPUT,
- 268435456);
if (complex_m2 && !phase_interpolation) {
- err = ixheaacd_mps_upmix_interp(
- self->m2_decor_im, self->r_diff_out_im_fix_in_m2,
- self->m2_decor_im_prev, self->out_ch_count,
- (self->dir_sig_count + self->decor_sig_count), self);
+ err = ixheaacd_mps_upmix_interp_type1(
+ self->m2_decor_im, self->r_out_diff_im_in_m2, self->m2_decor_im_prev,
+ self->out_ch_count, (self->dir_sig_count + self->decor_sig_count), self,
+ 1);
if (err < 0) return err;
- err = ixheaacd_mps_upmix_interp(
- self->m2_resid_im, self->r_out_im_fix_in_m2, self->m2_resid_im_prev,
- self->out_ch_count, (self->dir_sig_count + self->decor_sig_count),
- self);
+ err = ixheaacd_mps_upmix_interp_type1(
+ self->m2_resid_im, self->r_out_im_in_m2, self->m2_resid_im_prev,
+ self->out_ch_count, (self->dir_sig_count + self->decor_sig_count), self,
+ 1);
if (err < 0) return err;
- ixheaacd_fix_to_float_int(
- (WORD32 *)self->r_diff_out_im_fix_in_m2,
- (FLOAT32 *)self->r_out_diff_im_in_m2,
- MAX_TIME_SLOTS * MAX_PARAMETER_BANDS * MAX_M_OUTPUT * MAX_M_INPUT,
- 268435456);
- ixheaacd_fix_to_float_int(
- (WORD32 *)self->r_out_im_fix_in_m2, (FLOAT32 *)self->r_out_im_in_m2,
- MAX_TIME_SLOTS * MAX_PARAMETER_BANDS * MAX_M_OUTPUT * MAX_M_INPUT,
- 268435456);
}
if (phase_interpolation) {
@@ -473,155 +467,586 @@ WORD32 ixheaacd_mps_apply_mix_matrix(ia_mps_dec_state_struct *self) {
for (ts = 0; ts < self->time_slots; ts++) {
WORD32 pb;
for (pb = 0; pb < self->bs_param_bands; pb++) {
- for (row = 0; row < self->out_ch_count; row++) {
- for (col = 0; col < (self->dir_sig_count + self->decor_sig_count);
- col++) {
- self->r_out_im_in_m2[ts][pb][row][col] =
- self->r_out_re_in_m2[ts][pb][row][col] *
- self->r_out_ph_im_in_m2[ts][pb][row];
- self->r_out_re_in_m2[ts][pb][row][col] =
- self->r_out_re_in_m2[ts][pb][row][col] *
- self->r_out_ph_re_in_m2[ts][pb][row];
-
- self->r_out_diff_im_in_m2[ts][pb][row][col] =
- self->r_out_diff_re_in_m2[ts][pb][row][col] *
- self->r_out_ph_im_in_m2[ts][pb][row];
- self->r_out_diff_re_in_m2[ts][pb][row][col] =
- self->r_out_diff_re_in_m2[ts][pb][row][col] *
- self->r_out_ph_re_in_m2[ts][pb][row];
- }
- }
+ self->r_out_im_in_m2[ts][pb][0][0] =
+ self->r_out_re_in_m2[ts][pb][0][0] *
+ self->r_out_ph_im_in_m2[ts][pb][0];
+
+ self->r_out_im_in_m2[ts][pb][0][1] =
+ self->r_out_re_in_m2[ts][pb][0][1] *
+ self->r_out_ph_im_in_m2[ts][pb][0];
+
+ self->r_out_im_in_m2[ts][pb][1][0] =
+ self->r_out_re_in_m2[ts][pb][1][0] *
+ self->r_out_ph_im_in_m2[ts][pb][1];
+
+ self->r_out_im_in_m2[ts][pb][1][1] =
+ self->r_out_re_in_m2[ts][pb][1][1] *
+ self->r_out_ph_im_in_m2[ts][pb][1];
+
+ self->r_out_re_in_m2[ts][pb][0][0] =
+ self->r_out_re_in_m2[ts][pb][0][0] *
+ self->r_out_ph_re_in_m2[ts][pb][0];
+
+ self->r_out_re_in_m2[ts][pb][0][1] =
+ self->r_out_re_in_m2[ts][pb][0][1] *
+ self->r_out_ph_re_in_m2[ts][pb][0];
+
+ self->r_out_re_in_m2[ts][pb][1][0] =
+ self->r_out_re_in_m2[ts][pb][1][0] *
+ self->r_out_ph_re_in_m2[ts][pb][1];
+
+ self->r_out_re_in_m2[ts][pb][1][1] =
+ self->r_out_re_in_m2[ts][pb][1][1] *
+ self->r_out_ph_re_in_m2[ts][pb][1];
+
+ self->r_out_diff_im_in_m2[ts][pb][0][0] = 0;
+ self->r_out_diff_im_in_m2[ts][pb][0][1] =
+ self->r_out_diff_re_in_m2[ts][pb][0][1] *
+ self->r_out_ph_im_in_m2[ts][pb][0];
+
+ self->r_out_diff_im_in_m2[ts][pb][1][0] = 0;
+ self->r_out_diff_im_in_m2[ts][pb][1][1] =
+ self->r_out_diff_re_in_m2[ts][pb][1][1] *
+ self->r_out_ph_im_in_m2[ts][pb][1];
+
+ self->r_out_diff_re_in_m2[ts][pb][0][0] = 0;
+ self->r_out_diff_re_in_m2[ts][pb][0][1] =
+ self->r_out_diff_re_in_m2[ts][pb][0][1] *
+ self->r_out_ph_re_in_m2[ts][pb][0];
+
+ self->r_out_diff_re_in_m2[ts][pb][1][0] = 0;
+ self->r_out_diff_re_in_m2[ts][pb][1][1] =
+ self->r_out_diff_re_in_m2[ts][pb][1][1] *
+ self->r_out_ph_re_in_m2[ts][pb][1];
}
}
}
-
+ if (self->res_bands == 0) {
+ num_col_iters = self->dir_sig_count;
+ } else {
+ num_col_iters = (self->dir_sig_count + self->decor_sig_count);
+ }
for (ts = 0; ts < self->time_slots; ts++) {
- for (qs = 0; qs < self->hyb_band_count; qs++) {
+ for (qs = 0; qs < self->hyb_band_count_max; qs++) {
WORD32 indx = self->hyb_band_to_processing_band_table[qs];
+
for (row = 0; row < self->out_ch_count; row++) {
FLOAT32 sum_re_dir = 0;
- FLOAT32 sum_re_diff = 0;
FLOAT32 sum_im_dir = 0;
- FLOAT32 sum_im_diff = 0;
- for (col = 0; col < (self->dir_sig_count + self->decor_sig_count);
- col++) {
+ for (col = 0; col < num_col_iters; col++) {
sum_re_dir += self->w_dir[col][ts][qs].re *
self->r_out_re_in_m2[ts][indx][row][col];
sum_im_dir += self->w_dir[col][ts][qs].im *
self->r_out_re_in_m2[ts][indx][row][col];
- sum_re_diff += self->w_diff[col][ts][qs].re *
- self->r_out_diff_re_in_m2[ts][indx][row][col];
- sum_im_diff += self->w_diff[col][ts][qs].im *
- self->r_out_diff_re_in_m2[ts][indx][row][col];
}
self->hyb_dir_out[row][ts][qs].re = sum_re_dir;
self->hyb_dir_out[row][ts][qs].im = sum_im_dir;
- self->hyb_diff_out[row][ts][qs].re = sum_re_diff;
- self->hyb_diff_out[row][ts][qs].im = sum_im_diff;
+
+ self->hyb_diff_out[row][ts][qs].re =
+ self->w_diff[1][ts][qs].re *
+ self->r_out_diff_re_in_m2[ts][indx][row][1];
+ self->hyb_diff_out[row][ts][qs].im =
+ self->w_diff[1][ts][qs].im *
+ self->r_out_diff_re_in_m2[ts][indx][row][1];
}
}
}
if (complex_m2) {
+ if (phase_interpolation) {
+ for (ts = 0; ts < self->time_slots; ts++) {
+ for (qs = 0; qs < 2; qs++) {
+ WORD32 indx = self->hyb_band_to_processing_band_table[qs];
+ for (row = 0; row < self->out_ch_count; row++) {
+ FLOAT32 sum_re_dir = self->hyb_dir_out[row][ts][qs].re;
+ FLOAT32 sum_im_dir = self->hyb_dir_out[row][ts][qs].im;
+ for (col = 0; col < num_col_iters; col++) {
+ sum_re_dir += self->w_dir[col][ts][qs].im *
+ self->r_out_im_in_m2[ts][indx][row][col];
+ sum_im_dir -= self->w_dir[col][ts][qs].re *
+ self->r_out_im_in_m2[ts][indx][row][col];
+ }
+ self->hyb_dir_out[row][ts][qs].re = sum_re_dir;
+ self->hyb_dir_out[row][ts][qs].im = sum_im_dir;
+ self->hyb_diff_out[row][ts][qs].re +=
+ self->w_diff[1][ts][qs].im *
+ self->r_out_diff_im_in_m2[ts][indx][row][1];
+ self->hyb_diff_out[row][ts][qs].im -=
+ self->w_diff[1][ts][qs].re *
+ self->r_out_diff_im_in_m2[ts][indx][row][1];
+ }
+ }
+ for (qs = 2; qs < self->hyb_band_count[0]; qs++) {
+ WORD32 indx = self->hyb_band_to_processing_band_table[qs];
+ for (row = 0; row < self->out_ch_count; row++) {
+ FLOAT32 sum_re_dir = self->hyb_dir_out[row][ts][qs].re;
+ FLOAT32 sum_im_dir = self->hyb_dir_out[row][ts][qs].im;
+ for (col = 0; col < num_col_iters; col++) {
+ sum_re_dir -= self->w_dir[col][ts][qs].im *
+ self->r_out_im_in_m2[ts][indx][row][col];
+ sum_im_dir += self->w_dir[col][ts][qs].re *
+ self->r_out_im_in_m2[ts][indx][row][col];
+ }
+ self->hyb_dir_out[row][ts][qs].re = sum_re_dir;
+ self->hyb_dir_out[row][ts][qs].im = sum_im_dir;
+ self->hyb_diff_out[row][ts][qs].re -=
+ self->w_diff[1][ts][qs].im *
+ self->r_out_diff_im_in_m2[ts][indx][row][1];
+ self->hyb_diff_out[row][ts][qs].im +=
+ self->w_diff[1][ts][qs].re *
+ self->r_out_diff_im_in_m2[ts][indx][row][1];
+ }
+ }
+ }
+ } else {
+ int num_cols = (self->dir_sig_count + self->decor_sig_count) > 1
+ ? 1
+ : (self->dir_sig_count + self->decor_sig_count);
+ for (ts = 0; ts < self->time_slots; ts++) {
+ for (qs = 0; qs < 2; qs++) {
+ WORD32 indx = self->hyb_band_to_processing_band_table[qs];
+ for (row = 0; row < self->out_ch_count; row++) {
+ FLOAT32 sum_re_dir = self->hyb_dir_out[row][ts][qs].re;
+ FLOAT32 sum_im_dir = self->hyb_dir_out[row][ts][qs].im;
+ if (num_cols > 0) {
+ sum_re_dir += self->w_dir[0][ts][qs].im *
+ self->r_out_im_in_m2[ts][indx][row][0];
+ sum_im_dir -= self->w_dir[0][ts][qs].re *
+ self->r_out_im_in_m2[ts][indx][row][0];
+ }
+ self->hyb_dir_out[row][ts][qs].re = sum_re_dir;
+ self->hyb_dir_out[row][ts][qs].im = sum_im_dir;
+ }
+ }
+ for (qs = 2; qs < self->hyb_band_count[0]; qs++) {
+ WORD32 indx = self->hyb_band_to_processing_band_table[qs];
+ for (row = 0; row < self->out_ch_count; row++) {
+ FLOAT32 sum_re_dir = self->hyb_dir_out[row][ts][qs].re;
+ FLOAT32 sum_im_dir = self->hyb_dir_out[row][ts][qs].im;
+ if (num_cols > 0) {
+ sum_re_dir -= self->w_dir[0][ts][qs].im *
+ self->r_out_im_in_m2[ts][indx][row][0];
+ sum_im_dir += self->w_dir[0][ts][qs].re *
+ self->r_out_im_in_m2[ts][indx][row][0];
+ }
+ self->hyb_dir_out[row][ts][qs].re = sum_re_dir;
+ self->hyb_dir_out[row][ts][qs].im = sum_im_dir;
+ }
+ }
+ }
+ }
+ }
+ return 0;
+}
+
+WORD32 ixheaacd_mps_apply_mix_matrix_type3(ia_mps_dec_state_struct *self) {
+ WORD32 ts, qs, row, col;
+ WORD32 complex_m2 = ((self->config->bs_phase_coding != 0));
+ WORD32 phase_interpolation = (self->config->bs_phase_coding == 1);
+ WORD32 err = 0;
+ WORD32 num_col_iters = 0;
+
+ if (self->res_bands != 28) {
+ err = ixheaacd_mps_upmix_interp_type2(
+ self->m2_decor_re, self->r_out_diff_re_in_m2, self->m2_decor_re_prev,
+ self->out_ch_count, self, 1);
+ if (err < 0) return err;
+ }
+ if (self->res_bands == 0) {
+ num_col_iters = self->dir_sig_count;
+ err = ixheaacd_mps_upmix_interp_type2(
+ self->m2_resid_re, self->r_out_re_in_m2, self->m2_resid_re_prev,
+ self->out_ch_count, self, 0);
+ if (err < 0) return err;
+ } else {
+ num_col_iters = (self->dir_sig_count + self->decor_sig_count);
+ err = ixheaacd_mps_upmix_interp_type1(
+ self->m2_resid_re, self->r_out_re_in_m2, self->m2_resid_re_prev,
+ self->out_ch_count, (self->dir_sig_count + self->decor_sig_count), self,
+ 1);
+ if (err < 0) return err;
+ }
+
+ if (complex_m2 && !phase_interpolation) {
+ err = ixheaacd_mps_upmix_interp_type2(
+ self->m2_resid_im, self->r_out_im_in_m2, self->m2_resid_im_prev,
+ self->out_ch_count, self, 0);
+ if (err < 0) return err;
+ }
+
+ if (phase_interpolation) {
+ ixheaacd_mps_phase_interpolation(
+ self->phase_l, self->phase_r, self->phase_l_prev, self->phase_r_prev,
+ self->r_out_ph_re_in_m2, self->r_out_ph_im_in_m2, self);
+
+ if (self->res_bands == 0) {
+ for (ts = 0; ts < self->time_slots; ts++) {
+ WORD32 pb;
+ for (pb = 0; pb < self->bs_param_bands; pb++) {
+ self->r_out_im_in_m2[ts][pb][0][0] =
+ self->r_out_re_in_m2[ts][pb][0][0] *
+ self->r_out_ph_im_in_m2[ts][pb][0];
+
+ self->r_out_im_in_m2[ts][pb][1][0] =
+ self->r_out_re_in_m2[ts][pb][1][0] *
+ self->r_out_ph_im_in_m2[ts][pb][1];
+
+ self->r_out_re_in_m2[ts][pb][0][0] =
+ self->r_out_re_in_m2[ts][pb][0][0] *
+ self->r_out_ph_re_in_m2[ts][pb][0];
+
+ self->r_out_re_in_m2[ts][pb][1][0] =
+ self->r_out_re_in_m2[ts][pb][1][0] *
+ self->r_out_ph_re_in_m2[ts][pb][1];
+
+ self->r_out_diff_im_in_m2[ts][pb][0][1] =
+ self->r_out_diff_re_in_m2[ts][pb][0][1] *
+ self->r_out_ph_im_in_m2[ts][pb][0];
+
+ self->r_out_diff_im_in_m2[ts][pb][1][1] =
+ self->r_out_diff_re_in_m2[ts][pb][1][1] *
+ self->r_out_ph_im_in_m2[ts][pb][1];
+
+ self->r_out_diff_re_in_m2[ts][pb][0][1] =
+ self->r_out_diff_re_in_m2[ts][pb][0][1] *
+ self->r_out_ph_re_in_m2[ts][pb][0];
+
+ self->r_out_diff_re_in_m2[ts][pb][1][1] =
+ self->r_out_diff_re_in_m2[ts][pb][1][1] *
+ self->r_out_ph_re_in_m2[ts][pb][1];
+ }
+ }
+ } else if (self->res_bands == 28) {
+ for (ts = 0; ts < self->time_slots; ts++) {
+ WORD32 pb;
+ for (pb = 0; pb < self->bs_param_bands; pb++) {
+ self->r_out_im_in_m2[ts][pb][0][0] =
+ self->r_out_re_in_m2[ts][pb][0][0] *
+ self->r_out_ph_im_in_m2[ts][pb][0];
+
+ self->r_out_im_in_m2[ts][pb][0][1] =
+ self->r_out_re_in_m2[ts][pb][0][1] *
+ self->r_out_ph_im_in_m2[ts][pb][0];
+
+ self->r_out_im_in_m2[ts][pb][1][0] =
+ self->r_out_re_in_m2[ts][pb][1][0] *
+ self->r_out_ph_im_in_m2[ts][pb][1];
+
+ self->r_out_im_in_m2[ts][pb][1][1] =
+ self->r_out_re_in_m2[ts][pb][1][1] *
+ self->r_out_ph_im_in_m2[ts][pb][1];
+
+ self->r_out_re_in_m2[ts][pb][0][0] =
+ self->r_out_re_in_m2[ts][pb][0][0] *
+ self->r_out_ph_re_in_m2[ts][pb][0];
+
+ self->r_out_re_in_m2[ts][pb][0][1] =
+ self->r_out_re_in_m2[ts][pb][0][1] *
+ self->r_out_ph_re_in_m2[ts][pb][0];
+
+ self->r_out_re_in_m2[ts][pb][1][0] =
+ self->r_out_re_in_m2[ts][pb][1][0] *
+ self->r_out_ph_re_in_m2[ts][pb][1];
+
+ self->r_out_re_in_m2[ts][pb][1][1] =
+ self->r_out_re_in_m2[ts][pb][1][1] *
+ self->r_out_ph_re_in_m2[ts][pb][1];
+ }
+ }
+ } else {
+ for (ts = 0; ts < self->time_slots; ts++) {
+ WORD32 pb;
+ for (pb = 0; pb < self->bs_param_bands; pb++) {
+ self->r_out_im_in_m2[ts][pb][0][0] =
+ self->r_out_re_in_m2[ts][pb][0][0] *
+ self->r_out_ph_im_in_m2[ts][pb][0];
+
+ self->r_out_im_in_m2[ts][pb][0][1] =
+ self->r_out_re_in_m2[ts][pb][0][1] *
+ self->r_out_ph_im_in_m2[ts][pb][0];
+
+ self->r_out_im_in_m2[ts][pb][1][0] =
+ self->r_out_re_in_m2[ts][pb][1][0] *
+ self->r_out_ph_im_in_m2[ts][pb][1];
+
+ self->r_out_im_in_m2[ts][pb][1][1] =
+ self->r_out_re_in_m2[ts][pb][1][1] *
+ self->r_out_ph_im_in_m2[ts][pb][1];
+
+ self->r_out_re_in_m2[ts][pb][0][0] =
+ self->r_out_re_in_m2[ts][pb][0][0] *
+ self->r_out_ph_re_in_m2[ts][pb][0];
+
+ self->r_out_re_in_m2[ts][pb][0][1] =
+ self->r_out_re_in_m2[ts][pb][0][1] *
+ self->r_out_ph_re_in_m2[ts][pb][0];
+
+ self->r_out_re_in_m2[ts][pb][1][0] =
+ self->r_out_re_in_m2[ts][pb][1][0] *
+ self->r_out_ph_re_in_m2[ts][pb][1];
+
+ self->r_out_re_in_m2[ts][pb][1][1] =
+ self->r_out_re_in_m2[ts][pb][1][1] *
+ self->r_out_ph_re_in_m2[ts][pb][1];
+
+ self->r_out_diff_im_in_m2[ts][pb][0][1] =
+ self->r_out_diff_re_in_m2[ts][pb][0][1] *
+ self->r_out_ph_im_in_m2[ts][pb][0];
+
+ self->r_out_diff_im_in_m2[ts][pb][1][1] =
+ self->r_out_diff_re_in_m2[ts][pb][1][1] *
+ self->r_out_ph_im_in_m2[ts][pb][1];
+
+ self->r_out_diff_re_in_m2[ts][pb][0][1] =
+ self->r_out_diff_re_in_m2[ts][pb][0][1] *
+ self->r_out_ph_re_in_m2[ts][pb][0];
+
+ self->r_out_diff_re_in_m2[ts][pb][1][1] =
+ self->r_out_diff_re_in_m2[ts][pb][1][1] *
+ self->r_out_ph_re_in_m2[ts][pb][1];
+ }
+ }
+ }
+ }
+ if (self->res_bands == 0) {
for (ts = 0; ts < self->time_slots; ts++) {
- for (qs = 0; qs < 2; qs++) {
+ for (qs = 0; qs < self->hyb_band_count[0]; qs++) {
+ WORD32 indx = self->hyb_band_to_processing_band_table[qs];
+ for (row = 0; row < self->out_ch_count; row++) {
+ self->hyb_dir_out[row][ts][qs].re =
+ self->w_dir[0][ts][qs].re *
+ self->r_out_re_in_m2[ts][indx][row][0];
+ self->hyb_dir_out[row][ts][qs].im =
+ self->w_dir[0][ts][qs].im *
+ self->r_out_re_in_m2[ts][indx][row][0];
+ self->hyb_diff_out[row][ts][qs].re =
+ self->w_diff[1][ts][qs].re *
+ self->r_out_diff_re_in_m2[ts][indx][row][1];
+ self->hyb_diff_out[row][ts][qs].im =
+ self->w_diff[1][ts][qs].im *
+ self->r_out_diff_re_in_m2[ts][indx][row][1];
+ }
+ }
+ }
+ } else if (self->res_bands == 28) {
+ for (ts = 0; ts < self->time_slots; ts++) {
+ for (qs = 0; qs < self->hyb_band_count[1]; qs++) {
+ WORD32 indx = self->hyb_band_to_processing_band_table[qs];
+ for (row = 0; row < self->out_ch_count; row++) {
+ FLOAT32 sum_re_dir = 0;
+ FLOAT32 sum_im_dir = 0;
+ for (col = 0; col < num_col_iters; col++) {
+ sum_re_dir += self->w_dir[col][ts][qs].re *
+ self->r_out_re_in_m2[ts][indx][row][col];
+ sum_im_dir += self->w_dir[col][ts][qs].im *
+ self->r_out_re_in_m2[ts][indx][row][col];
+ }
+ self->hyb_dir_out[row][ts][qs].re = sum_re_dir;
+ self->hyb_dir_out[row][ts][qs].im = sum_im_dir;
+ }
+ }
+ for (; qs < self->hyb_band_count[0]; qs++) {
+ WORD32 indx = self->hyb_band_to_processing_band_table[qs];
+ for (row = 0; row < self->out_ch_count; row++) {
+ self->hyb_dir_out[row][ts][qs].re =
+ self->w_dir[0][ts][qs].re *
+ self->r_out_re_in_m2[ts][indx][row][0];
+ self->hyb_dir_out[row][ts][qs].im =
+ self->w_dir[0][ts][qs].im *
+ self->r_out_re_in_m2[ts][indx][row][0];
+ }
+ }
+ }
+ } else {
+ WORD32 dif_s = ixheaacd_mps_gain_set_indx[self->res_bands];
+ for (ts = 0; ts < self->time_slots; ts++) {
+ for (qs = 0; qs < dif_s; qs++) {
WORD32 indx = self->hyb_band_to_processing_band_table[qs];
for (row = 0; row < self->out_ch_count; row++) {
- FLOAT32 sum_re_dir = self->hyb_dir_out[row][ts][qs].re;
- FLOAT32 sum_im_dir = self->hyb_dir_out[row][ts][qs].im;
- FLOAT32 sum_re_diff = self->hyb_diff_out[row][ts][qs].re;
- FLOAT32 sum_im_diff = self->hyb_diff_out[row][ts][qs].im;
- for (col = 0; col < (self->dir_sig_count + self->decor_sig_count);
- col++) {
- sum_re_dir += self->w_dir[col][ts][qs].im *
- self->r_out_im_in_m2[ts][indx][row][col];
- sum_im_dir -= self->w_dir[col][ts][qs].re *
- self->r_out_im_in_m2[ts][indx][row][col];
- sum_re_diff += self->w_diff[col][ts][qs].im *
- self->r_out_diff_im_in_m2[ts][indx][row][col];
- sum_im_diff -= self->w_diff[col][ts][qs].re *
- self->r_out_diff_im_in_m2[ts][indx][row][col];
+ FLOAT32 sum_re_dir = 0;
+ FLOAT32 sum_im_dir = 0;
+ for (col = 0; col < num_col_iters; col++) {
+ sum_re_dir += self->w_dir[col][ts][qs].re *
+ self->r_out_re_in_m2[ts][indx][row][col];
+ sum_im_dir += self->w_dir[col][ts][qs].im *
+ self->r_out_re_in_m2[ts][indx][row][col];
}
self->hyb_dir_out[row][ts][qs].re = sum_re_dir;
self->hyb_dir_out[row][ts][qs].im = sum_im_dir;
- self->hyb_diff_out[row][ts][qs].re = sum_re_diff;
- self->hyb_diff_out[row][ts][qs].im = sum_im_diff;
}
}
- for (qs = 2; qs < self->hyb_band_count; qs++) {
+ for (; qs < self->hyb_band_count[1]; qs++) {
WORD32 indx = self->hyb_band_to_processing_band_table[qs];
for (row = 0; row < self->out_ch_count; row++) {
- FLOAT32 sum_re_dir = self->hyb_dir_out[row][ts][qs].re;
- FLOAT32 sum_im_dir = self->hyb_dir_out[row][ts][qs].im;
- FLOAT32 sum_re_diff = self->hyb_diff_out[row][ts][qs].re;
- FLOAT32 sum_im_diff = self->hyb_diff_out[row][ts][qs].im;
- for (col = 0; col < (self->dir_sig_count + self->decor_sig_count);
- col++) {
- sum_re_dir -= self->w_dir[col][ts][qs].im *
- self->r_out_im_in_m2[ts][indx][row][col];
- sum_im_dir += self->w_dir[col][ts][qs].re *
- self->r_out_im_in_m2[ts][indx][row][col];
- sum_re_diff -= self->w_diff[col][ts][qs].im *
- self->r_out_diff_im_in_m2[ts][indx][row][col];
- sum_im_diff += self->w_diff[col][ts][qs].re *
- self->r_out_diff_im_in_m2[ts][indx][row][col];
+ FLOAT32 sum_re_dir = 0;
+ FLOAT32 sum_im_dir = 0;
+ for (col = 0; col < num_col_iters; col++) {
+ sum_re_dir += self->w_dir[col][ts][qs].re *
+ self->r_out_re_in_m2[ts][indx][row][col];
+ sum_im_dir += self->w_dir[col][ts][qs].im *
+ self->r_out_re_in_m2[ts][indx][row][col];
}
self->hyb_dir_out[row][ts][qs].re = sum_re_dir;
self->hyb_dir_out[row][ts][qs].im = sum_im_dir;
- self->hyb_diff_out[row][ts][qs].re = sum_re_diff;
- self->hyb_diff_out[row][ts][qs].im = sum_im_diff;
+ self->hyb_diff_out[row][ts][qs].re =
+ self->w_diff[1][ts][qs].re *
+ self->r_out_diff_re_in_m2[ts][indx][row][1];
+ self->hyb_diff_out[row][ts][qs].im =
+ self->w_diff[1][ts][qs].im *
+ self->r_out_diff_re_in_m2[ts][indx][row][1];
+ }
+ }
+ for (; qs < self->hyb_band_count[0]; qs++) {
+ WORD32 indx = self->hyb_band_to_processing_band_table[qs];
+ for (row = 0; row < self->out_ch_count; row++) {
+ self->hyb_dir_out[row][ts][qs].re =
+ self->w_dir[0][ts][qs].re *
+ self->r_out_re_in_m2[ts][indx][row][0];
+ self->hyb_dir_out[row][ts][qs].im =
+ self->w_dir[0][ts][qs].im *
+ self->r_out_re_in_m2[ts][indx][row][0];
+ self->hyb_diff_out[row][ts][qs].re =
+ self->w_diff[1][ts][qs].re *
+ self->r_out_diff_re_in_m2[ts][indx][row][1];
+ self->hyb_diff_out[row][ts][qs].im =
+ self->w_diff[1][ts][qs].im *
+ self->r_out_diff_re_in_m2[ts][indx][row][1];
}
}
}
}
- return 0;
-}
-
-static PLATFORM_INLINE WORD32 ixheaacd_mult32_shl2(WORD32 a, WORD32 b) {
- WORD32 result;
- WORD64 temp_result;
- temp_result = (WORD64)a * (WORD64)b;
- result = (WORD32)(temp_result >> 30);
-
- return (result);
+ if (complex_m2) {
+ if (phase_interpolation) {
+ for (ts = 0; ts < self->time_slots; ts++) {
+ for (qs = 0; qs < 2; qs++) {
+ WORD32 indx = self->hyb_band_to_processing_band_table[qs];
+ for (row = 0; row < self->out_ch_count; row++) {
+ FLOAT32 sum_re_dir = self->hyb_dir_out[row][ts][qs].re;
+ FLOAT32 sum_im_dir = self->hyb_dir_out[row][ts][qs].im;
+ for (col = 0; col < num_col_iters; col++) {
+ sum_re_dir += self->w_dir[col][ts][qs].im *
+ self->r_out_im_in_m2[ts][indx][row][col];
+ sum_im_dir -= self->w_dir[col][ts][qs].re *
+ self->r_out_im_in_m2[ts][indx][row][col];
+ }
+ self->hyb_dir_out[row][ts][qs].re = sum_re_dir;
+ self->hyb_dir_out[row][ts][qs].im = sum_im_dir;
+ self->hyb_diff_out[row][ts][qs].re +=
+ self->w_diff[1][ts][qs].im *
+ self->r_out_diff_im_in_m2[ts][indx][row][1];
+ self->hyb_diff_out[row][ts][qs].im -=
+ self->w_diff[1][ts][qs].re *
+ self->r_out_diff_im_in_m2[ts][indx][row][1];
+ }
+ }
+ for (qs = 2; qs < self->hyb_band_count_max; qs++) {
+ WORD32 indx = self->hyb_band_to_processing_band_table[qs];
+ for (row = 0; row < self->out_ch_count; row++) {
+ FLOAT32 sum_re_dir = self->hyb_dir_out[row][ts][qs].re;
+ FLOAT32 sum_im_dir = self->hyb_dir_out[row][ts][qs].im;
+ for (col = 0; col < num_col_iters; col++) {
+ sum_re_dir -= self->w_dir[col][ts][qs].im *
+ self->r_out_im_in_m2[ts][indx][row][col];
+ sum_im_dir += self->w_dir[col][ts][qs].re *
+ self->r_out_im_in_m2[ts][indx][row][col];
+ }
+ self->hyb_dir_out[row][ts][qs].re = sum_re_dir;
+ self->hyb_dir_out[row][ts][qs].im = sum_im_dir;
+ self->hyb_diff_out[row][ts][qs].re -=
+ self->w_diff[1][ts][qs].im *
+ self->r_out_diff_im_in_m2[ts][indx][row][1];
+ self->hyb_diff_out[row][ts][qs].im +=
+ self->w_diff[1][ts][qs].re *
+ self->r_out_diff_im_in_m2[ts][indx][row][1];
+ }
+ }
+ }
+ } else {
+ int num_cols = (self->dir_sig_count + self->decor_sig_count) > 1
+ ? 1
+ : (self->dir_sig_count + self->decor_sig_count);
+ for (ts = 0; ts < self->time_slots; ts++) {
+ for (qs = 0; qs < 2; qs++) {
+ WORD32 indx = self->hyb_band_to_processing_band_table[qs];
+ for (row = 0; row < self->out_ch_count; row++) {
+ FLOAT32 sum_re_dir = self->hyb_dir_out[row][ts][qs].re;
+ FLOAT32 sum_im_dir = self->hyb_dir_out[row][ts][qs].im;
+ if (num_cols > 0) {
+ sum_re_dir += self->w_dir[0][ts][qs].im *
+ self->r_out_im_in_m2[ts][indx][row][0];
+ sum_im_dir -= self->w_dir[0][ts][qs].re *
+ self->r_out_im_in_m2[ts][indx][row][0];
+ }
+ self->hyb_dir_out[row][ts][qs].re = sum_re_dir;
+ self->hyb_dir_out[row][ts][qs].im = sum_im_dir;
+ }
+ }
+ for (qs = 2; qs < self->hyb_band_count_max; qs++) {
+ WORD32 indx = self->hyb_band_to_processing_band_table[qs];
+ for (row = 0; row < self->out_ch_count; row++) {
+ FLOAT32 sum_re_dir = self->hyb_dir_out[row][ts][qs].re;
+ FLOAT32 sum_im_dir = self->hyb_dir_out[row][ts][qs].im;
+ if (num_cols > 0) {
+ sum_re_dir -= self->w_dir[0][ts][qs].im *
+ self->r_out_im_in_m2[ts][indx][row][0];
+ sum_im_dir += self->w_dir[0][ts][qs].re *
+ self->r_out_im_in_m2[ts][indx][row][0];
+ }
+ self->hyb_dir_out[row][ts][qs].re = sum_re_dir;
+ self->hyb_dir_out[row][ts][qs].im = sum_im_dir;
+ }
+ }
+ }
+ }
+ }
+ return 0;
}
-WORD32 ixheaacd_mps_upmix_interp(
- WORD32 m_matrix[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
- [MAX_M_INPUT],
- WORD32 r_matrix[MAX_TIME_SLOTS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
- [MAX_M_INPUT],
- WORD32 m_matrix_prev[MAX_PARAMETER_BANDS][MAX_M_OUTPUT][MAX_M_INPUT],
- WORD32 num_rows, WORD32 num_cols, ia_mps_dec_state_struct *self) {
+WORD32 ixheaacd_mps_upmix_interp_type1(
+ FLOAT32 m_matrix[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
+ [MAX_M_INPUT],
+ FLOAT32 r_matrix_float[MAX_TIME_SLOTS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
+ [MAX_M_INPUT],
+ FLOAT32 m_matrix_prev[MAX_PARAMETER_BANDS][MAX_M_OUTPUT][MAX_M_INPUT],
+ WORD32 num_rows, WORD32 num_cols, ia_mps_dec_state_struct *self,
+ WORD32 bs_high_rate_mode) {
WORD32 ts, ps, pb, row, col, i;
+ FLOAT32 ks, ms, ls;
+ FLOAT32 fl_step, fl_base;
+
+ if (MAX_TIME_SLOTS < (self->param_slot_diff[0])) return -1;
for (pb = 0; pb < self->bs_param_bands; pb++) {
for (row = 0; row < num_rows; row++) {
for (col = 0; col < num_cols; col++) {
- ps = 0;
ts = 0;
- if (MAX_TIME_SLOTS < (self->param_slot_diff[0])) return -1;
+ ps = 0;
+ ks = self->inv_param_slot_diff[ps];
+ ms = m_matrix[ps][pb][row][col];
+ ls = m_matrix_prev[pb][row][col];
+ fl_step = ks * (ms - ls);
+ fl_base = ls + fl_step;
+
for (i = 1; i <= (WORD32)self->param_slot_diff[0]; i++) {
- WORD32 alpha = i * self->inv_param_slot_diff_Q30[ps];
- WORD32 one_minus_alpha = 1073741824 - alpha;
- r_matrix[ts][pb][row][col] =
- ((ixheaacd_mult32_shl2(m_matrix_prev[pb][row][col],
- one_minus_alpha) +
- ixheaacd_mult32_shl2(alpha, m_matrix[ps][pb][row][col])));
+ r_matrix_float[ts][pb][row][col] = fl_base;
+ fl_base += fl_step;
ts++;
}
-
- for (ps = 1; ps < self->num_parameter_sets; ps++) {
- if (MAX_TIME_SLOTS < (ts + self->param_slot_diff[ps])) return -1;
- for (i = 1; i <= (WORD32)self->param_slot_diff[ps]; i++) {
- WORD32 alpha = i * self->inv_param_slot_diff_Q30[ps];
- WORD32 one_minus_alpha = 1073741824 - alpha;
- r_matrix[ts][pb][row][col] =
- ((ixheaacd_mult32_shl2(m_matrix[ps - 1][pb][row][col],
- one_minus_alpha) +
- ixheaacd_mult32_shl2(alpha, m_matrix[ps][pb][row][col])));
- ts++;
+ if (bs_high_rate_mode) {
+ for (ps = 1; ps < self->num_parameter_sets; ps++) {
+ if (MAX_TIME_SLOTS < (ts + self->param_slot_diff[ps])) return -1;
+ ks = self->inv_param_slot_diff[ps];
+ ms = m_matrix[ps][pb][row][col];
+ ls = m_matrix[ps - 1][pb][row][col];
+ fl_step = ks * (ms - ls);
+ fl_base = ls + fl_step;
+
+ for (i = 1; i <= (WORD32)self->param_slot_diff[ps]; i++) {
+ r_matrix_float[ts][pb][row][col] = fl_base;
+ fl_base += fl_step;
+ ts++;
+ }
}
}
}
@@ -630,13 +1055,60 @@ WORD32 ixheaacd_mps_upmix_interp(
return 0;
}
+WORD32 ixheaacd_mps_upmix_interp_type2(
+ FLOAT32 m_matrix[MAX_PARAMETER_SETS_MPS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
+ [MAX_M_INPUT],
+ FLOAT32 r_matrix_float[MAX_TIME_SLOTS][MAX_PARAMETER_BANDS][MAX_M_OUTPUT]
+ [MAX_M_INPUT],
+ FLOAT32 m_matrix_prev[MAX_PARAMETER_BANDS][MAX_M_OUTPUT][MAX_M_INPUT],
+ WORD32 num_rows, ia_mps_dec_state_struct *self, WORD32 col) {
+ WORD32 ts, ps, pb, row, i;
+ FLOAT32 ks, ms, ls;
+ FLOAT32 fl_step, fl_base;
+
+ if (MAX_TIME_SLOTS < (self->param_slot_diff[0])) return -1;
+
+ for (pb = 0; pb < self->bs_param_bands; pb++) {
+ for (row = 0; row < num_rows; row++) {
+ ts = 0;
+ ps = 0;
+ ks = self->inv_param_slot_diff[ps];
+ ms = m_matrix[ps][pb][row][col];
+ ls = m_matrix_prev[pb][row][col];
+ fl_step = ks * (ms - ls);
+ fl_base = ls + fl_step;
+
+ for (i = 1; i <= (WORD32)self->param_slot_diff[0]; i++) {
+ r_matrix_float[ts][pb][row][col] = fl_base;
+ fl_base += fl_step;
+ ts++;
+ }
+ for (ps = 1; ps < self->num_parameter_sets; ps++) {
+ if (MAX_TIME_SLOTS < (ts + self->param_slot_diff[ps])) return -1;
+ ks = self->inv_param_slot_diff[ps];
+ ms = m_matrix[ps][pb][row][col];
+ ls = m_matrix[ps - 1][pb][row][col];
+ fl_step = ks * (ms - ls);
+ fl_base = ls + fl_step;
+
+ for (i = 1; i <= (WORD32)self->param_slot_diff[ps]; i++) {
+ r_matrix_float[ts][pb][row][col] = fl_base;
+ fl_base += fl_step;
+ ts++;
+ }
+ }
+ }
+ }
+ return 0;
+}
+
static FLOAT32 ixheaacd_mps_angle_interpolation(FLOAT32 angle1, FLOAT32 angle2,
- FLOAT32 alpha) {
+ FLOAT32 alpha, FLOAT32 *step) {
while (angle2 - angle1 > (FLOAT32)P_PI)
angle1 = angle1 + 2.0f * (FLOAT32)P_PI;
while (angle1 - angle2 > (FLOAT32)P_PI)
angle2 = angle2 + 2.0f * (FLOAT32)P_PI;
-
+ *step = angle2 - angle1;
return (1 - alpha) * angle1 + alpha * angle2;
}
@@ -647,37 +1119,46 @@ VOID ixheaacd_mps_phase_interpolation(
FLOAT32 r_re[MAX_TIME_SLOTS][MAX_PARAMETER_BANDS][2],
FLOAT32 r_im[MAX_TIME_SLOTS][MAX_PARAMETER_BANDS][2],
ia_mps_dec_state_struct *self) {
- WORD32 ts, ps, pb;
- WORD32 i;
+ WORD32 i, ts, ps, pb;
+ FLOAT32 step_l, step_r, alpha, tl, tr;
for (pb = 0; pb < self->bs_param_bands; pb++) {
ps = 0;
ts = 0;
- for (i = 1; i <= self->param_slot_diff[ps]; i++) {
- FLOAT32 alpha = (FLOAT32)i * self->inv_param_slot_diff[ps];
- FLOAT32 t;
+ alpha = (FLOAT32)self->inv_param_slot_diff[ps];
+ tl = ixheaacd_mps_angle_interpolation(pl_prev[pb], pl[ps][pb], alpha,
+ &step_l);
+ tr = ixheaacd_mps_angle_interpolation(pr_prev[pb], pr[ps][pb], alpha,
+ &step_r);
+ step_l *= alpha;
+ step_r *= alpha;
- t = ixheaacd_mps_angle_interpolation(pl_prev[pb], pl[ps][pb], alpha);
- r_re[ts][pb][0] = (FLOAT32)cos(t);
- r_im[ts][pb][0] = (FLOAT32)sin(t);
+ for (i = 1; i <= self->param_slot_diff[ps]; i++) {
+ r_re[ts][pb][0] = (FLOAT32)cos(tl);
+ r_im[ts][pb][0] = (FLOAT32)sin(tl);
+ tl += step_l;
- t = ixheaacd_mps_angle_interpolation(pr_prev[pb], pr[ps][pb], alpha);
- r_re[ts][pb][1] = (FLOAT32)cos(t);
- r_im[ts][pb][1] = (FLOAT32)sin(t);
+ r_re[ts][pb][1] = (FLOAT32)cos(tr);
+ r_im[ts][pb][1] = (FLOAT32)sin(tr);
+ tr += step_r;
ts++;
}
for (ps = 1; ps < self->num_parameter_sets; ps++) {
+ FLOAT32 alpha = self->inv_param_slot_diff[ps];
+ tl = ixheaacd_mps_angle_interpolation(pl[ps - 1][pb], pl[ps][pb], alpha,
+ &step_l);
+ tr = ixheaacd_mps_angle_interpolation(pr[ps - 1][pb], pr[ps][pb], alpha,
+ &step_r);
+ step_l *= alpha;
+ step_r *= alpha;
for (i = 1; i <= self->param_slot_diff[ps]; i++) {
- FLOAT32 alpha = (FLOAT32)i * self->inv_param_slot_diff[ps];
- FLOAT32 t;
-
- t = ixheaacd_mps_angle_interpolation(pl[ps - 1][pb], pl[ps][pb], alpha);
- r_re[ts][pb][0] = (FLOAT32)cos(t);
- r_im[ts][pb][0] = (FLOAT32)sin(t);
+ r_re[ts][pb][0] = (FLOAT32)cos(tl);
+ r_im[ts][pb][0] = (FLOAT32)sin(tl);
+ tl += step_l;
- t = ixheaacd_mps_angle_interpolation(pr[ps - 1][pb], pr[ps][pb], alpha);
- r_re[ts][pb][1] = (FLOAT32)cos(t);
- r_im[ts][pb][1] = (FLOAT32)sin(t);
+ r_re[ts][pb][1] = (FLOAT32)cos(tr);
+ r_im[ts][pb][1] = (FLOAT32)sin(tr);
+ tr += step_r;
ts++;
if (ts > 71) {
diff --git a/decoder/ixheaacd_mps_process.h b/decoder/ixheaacd_mps_process.h
index 97b7090..40555fa 100644
--- a/decoder/ixheaacd_mps_process.h
+++ b/decoder/ixheaacd_mps_process.h
@@ -22,6 +22,7 @@
VOID ixheaacd_mps_res_buf_copy(ia_mps_dec_state_struct* self);
VOID ixheaacd_mps_qmf_hyb_analysis(ia_mps_dec_state_struct* self);
+VOID ixheaacd_mps_qmf_hyb_analysis_no_pre_mix(ia_mps_dec_state_struct* self);
VOID ixheaacd_mps_qmf_hyb_synthesis(ia_mps_dec_state_struct* self);
VOID ixheaacd_mps_decor(ia_mps_dec_state_struct* self);
VOID ixheaacd_mps_create_w(ia_mps_dec_state_struct* self);
diff --git a/decoder/ixheaacd_mps_rom.c b/decoder/ixheaacd_mps_rom.c
index 6dd2ded..954fef0 100644
--- a/decoder/ixheaacd_mps_rom.c
+++ b/decoder/ixheaacd_mps_rom.c
@@ -828,2953 +828,4240 @@ const ia_huff_res_nodes_struct ixheaacd_huff_reshape_nodes = {
{-56, 35}, {-24, -67}, {-23, -55}, {-8, -72}, {-5, 36}, {-68, 37},
{-6, 38}, {-7, -69}, {-70, -71}}};
-const WORD32 ixheaacd_im_weight_Q28[16][8][31] = {
+const FLOAT32 ixheaacd_im_weight[16][8][31] = {
{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- },
+
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f}},
{
- {-3, -574674, -1017796, -1796901, -3154468, -5481590,
- -7575016, -10370478, -14006830, -18549081, -23865573, -27607851,
- -31193408, -34233661, -36296902, -37030589, -36296902, -34233661,
- -31193411, -27607851, -23865573, -18549082, -14006829, -10370478,
- -7575017, -5481590, -3154468, -1796901, -1017796, -574674,
- -3},
- {-3, -538644, -954220, -1685385, -2960885, -5151503,
- -7126422, -9769580, -13217236, -17537304, -22610489, -26190951,
- -29627877, -32546501, -34529291, -35234746, -34529291, -32546501,
- -29627879, -26190951, -22610489, -17537304, -13217236, -9769579,
- -7126423, -5151503, -2960885, -1685385, -954220, -538644,
- -3},
- {-3, -483799, -857386, -1515349, -2665174, -4645760,
- -6437353, -8843606, -11995831, -15965514, -20652239, -23974316,
- -27173122, -29896409, -31749795, -32409817, -31749798, -29896409,
- -27173122, -23974316, -20652241, -15965512, -11995831, -8843606,
- -6437353, -4645760, -2665174, -1515349, -857386, -483799,
- -3},
- {-2, -346044, -613840, -1086712, -1916795, -3357478,
- -4672194, -6454555, -8816980, -11833773, -15450674, -18047554,
- -20571857, -22737959, -24220523, -24750059, -24220526, -22737954,
- -20571860, -18047555, -15450674, -11833774, -8816980, -6454555,
- -4672195, -3357477, -1916795, -1086712, -613840, -346044,
- -2},
- {-1, -211963, -376347, -667357, -1180477, -2077857,
- -2904213, -4035616, -5554462, -7524805, -9930552, -11685604,
- -13412726, -14910621, -15943947, -16314578, -15943948, -14910621,
- -13412728, -11685605, -9930552, -7524805, -5554462, -4035615,
- -2904213, -2077857, -1180477, -667357, -376347, -211963,
- -1},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {2, 341283, 608313, 1086175, 1945172, 3500199, 4995375,
- 7149357, 10257166, 14719094, 21095209, 27678683, 35807499, 44718702,
- 52254129, 55306472, 52254135, 44718696, 35807506, 27678683, 21095208,
- 14719092, 10257166, 7149356, 4995375, 3500199, 1945172, 1086175,
- 608313, 341283, 2},
- {3, 574839, 1026313, 1838046, 3309837, 6017789,
- 8678530, 12620302, 18566315, 29617673, 51387069, 78419391,
- 127027624, 219233261, 378389618, 496423988, 378389858, 219233221,
- 127027637, 78419391, 51387075, 29617673, 18566315, 12620301,
- 8678531, 6017788, 3309837, 1838046, 1026313, 574839,
- 3},
- },
+
+ {-0.0000000112f, -0.0021408275f, -0.0037915856f, -0.0066939779f,
+ -0.0117513090f, -0.0204205140f, -0.0282191336f, -0.0386330411f,
+ -0.0521795079f, -0.0691007078f, -0.0889061838f, -0.1028472632f,
+ -0.1162045002f, -0.1275303215f, -0.1352165043f, -0.1379496902f,
+ -0.1352165043f, -0.1275303215f, -0.1162045151f, -0.1028472632f,
+ -0.0889061838f, -0.0691007152f, -0.0521795042f, -0.0386330411f,
+ -0.0282191373f, -0.0204205140f, -0.0117513090f, -0.0066939779f,
+ -0.0037915856f, -0.0021408275f, -0.0000000112f},
+ {-0.0000000112f, -0.0020066053f, -0.0035547465f, -0.0062785484f,
+ -0.0110301562f, -0.0191908441f, -0.0265479907f, -0.0363945216f,
+ -0.0492380410f, -0.0653315485f, -0.0842306316f, -0.0975688994f,
+ -0.1103724390f, -0.1212451607f, -0.1286316365f, -0.1312596500f,
+ -0.1286316365f, -0.1212451607f, -0.1103724539f, -0.0975688994f,
+ -0.0842306316f, -0.0653315485f, -0.0492380410f, -0.0363945179f,
+ -0.0265479945f, -0.0191908441f, -0.0110301562f, -0.0062785484f,
+ -0.0035547465f, -0.0020066053f, -0.0000000112f},
+ {-0.0000000112f, -0.0018022917f, -0.0031940117f, -0.0056451149f,
+ -0.0099285468f, -0.0173068047f, -0.0239810087f, -0.0329449996f,
+ -0.0446879528f, -0.0594761744f, -0.0769355893f, -0.0893112868f,
+ -0.1012277678f, -0.1113727987f, -0.1182772070f, -0.1207359731f,
+ -0.1182772145f, -0.1113727987f, -0.1012277678f, -0.0893112868f,
+ -0.0769355893f, -0.0594761670f, -0.0446879528f, -0.0329449996f,
+ -0.0239810087f, -0.0173068047f, -0.0099285468f, -0.0056451149f,
+ -0.0031940117f, -0.0018022917f, -0.0000000112f},
+ {-0.0000000075f, -0.0012891144f, -0.0022867322f, -0.0040483177f,
+ -0.0071406178f, -0.0125075802f, -0.0174052790f, -0.0240450911f,
+ -0.0328458101f, -0.0440842398f, -0.0575582460f, -0.0672323778f,
+ -0.0766361356f, -0.0847055018f, -0.0902284831f, -0.0922011584f,
+ -0.0902284905f, -0.0847054794f, -0.0766361505f, -0.0672323853f,
+ -0.0575582460f, -0.0440842435f, -0.0328458101f, -0.0240450911f,
+ -0.0174052827f, -0.0125075765f, -0.0071406178f, -0.0040483177f,
+ -0.0022867322f, -0.0012891144f, -0.0000000075f},
+ {-0.0000000037f, -0.0007896237f, -0.0014020018f, -0.0024860986f,
+ -0.0043976195f, -0.0077406205f, -0.0108190365f, -0.0150338411f,
+ -0.0206919834f, -0.0280320831f, -0.0369941890f, -0.0435322672f,
+ -0.0499662980f, -0.0555463918f, -0.0593958311f, -0.0607765391f,
+ -0.0593958348f, -0.0555463918f, -0.0499663055f, -0.0435322709f,
+ -0.0369941890f, -0.0280320831f, -0.0206919834f, -0.0150338374f,
+ -0.0108190365f, -0.0077406205f, -0.0043976195f, -0.0024860986f,
+ -0.0014020018f, -0.0007896237f, -0.0000000037f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000075f, 0.0012713782f, 0.0022661425f, 0.0040463172f,
+ 0.0072463304f, 0.0130392574f, 0.0186092220f, 0.0266334303f,
+ 0.0382109210f, 0.0548328981f, 0.0785857737f, 0.1031111330f,
+ 0.1333933324f, 0.1665901542f, 0.1946617961f, 0.2060326636f,
+ 0.1946618259f, 0.1665901244f, 0.1333933473f, 0.1031111330f,
+ 0.0785857737f, 0.0548328906f, 0.0382109210f, 0.0266334265f,
+ 0.0186092220f, 0.0130392574f, 0.0072463304f, 0.0040463172f,
+ 0.0022661425f, 0.0012713782f, 0.0000000075f},
+ {0.0000000112f, 0.0021414421f, 0.0038233139f, 0.0068472549f,
+ 0.0123301037f, 0.0224180110f, 0.0323300436f, 0.0470142886f,
+ 0.0691649169f, 0.1103344262f, 0.1914317459f, 0.2921350002f,
+ 0.4732147753f, 0.8167075515f, 1.4096112251f, 1.8493235111f,
+ 1.4096120596f, 0.8167073727f, 0.4732148349f, 0.2921350002f,
+ 0.1914317757f, 0.1103344262f, 0.0691649169f, 0.0470142849f,
+ 0.0323300473f, 0.0224180073f, 0.0123301037f, 0.0068472549f,
+ 0.0038233139f, 0.0021414421f, 0.0000000112f}},
{
- {-6, -1063142, -1884657, -3332697, -5866780, -10242061,
- -14210618, -19556015, -26583487, -35470365, -46010122, -53508848,
- -60748872, -66926406, -71137302, -72638110, -71137307, -66926401,
- -60748877, -53508853, -46010127, -35470363, -26583487, -19556013,
- -14210619, -10242061, -5866781, -3332697, -1884657, -1063142,
- -6},
- {-6, -996411, -1766700, -3125152, -5504594, -9619093,
- -13357671, -18402686, -25050704, -33480939, -43509452, -50662425,
- -57581404, -63494074, -67528860, -68967732, -67528865, -63494073,
- -57581409, -50662430, -43509452, -33480939, -25050704, -18402684,
- -13357672, -9619093, -5504594, -3125152, -1766700, -996411,
- -6},
- {-5, -894854, -1587094, -2808873, -4951863, -8666114,
- -12050168, -16630008, -22687068, -30401449, -39622947, -46227133,
- -52634601, -58124037, -61876858, -63216462, -61876863, -58124037,
- -52634607, -46227138, -39622951, -30401449, -22687068, -16630007,
- -12050168, -8666115, -4951864, -2808873, -1587094, -894854,
- -5},
- {-4, -639871, -1135692, -2012557, -3555941, -6246900,
- -8715879, -12082768, -16579119, -22374143, -29395763, -34483541,
- -39463815, -43763084, -46718677, -47776809, -46718677, -43763084,
- -39463820, -34483541, -29395763, -22374143, -16579119, -12082768,
- -8715880, -6246900, -3555941, -2012557, -1135692, -639871,
- -4},
- {-2, -391832, -695950, -1234845, -2186633, -3856009,
- -5398614, -7518849, -10379694, -14115081, -18711418, -22088179,
- -25429852, -28342454, -30359291, -31084156, -30359294, -28342454,
- -25429854, -22088179, -18711418, -14115079, -10379693, -7518848,
- -5398615, -3856009, -2186633, -1234845, -695950, -391832,
- -2},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {4, 630153, 1122569, 2002361, 3579289, 6418784, 9130132,
- 13002758, 18518363, 26281774, 36854214, 45475090, 56006939, 67371285,
- 76348185, 79832098, 76348185, 67371278, 56006945, 45475094, 36854219,
- 26281774, 18518363, 13002756, 9130133, 6418784, 3579289, 2002361,
- 1122569, 630153, 4},
- {6, 1060871, 1892248, 3382951, 6072244, 10973302,
- 15727473, 22653420, 32821245, 47830061, 75342938, 103710864,
- 142829663, 191958022, 239742154, 261023300, 239742208, 191958009,
- 142829663, 103710864, 75342952, 47830061, 32821243, 22653418,
- 15727475, 10973302, 6072245, 3382952, 1892248, 1060871,
- 6},
- },
+
+ {-0.0000000224f, -0.0039605126f, -0.0070208944f, -0.0124152638f,
+ -0.0218554586f, -0.0381546505f, -0.0529386774f, -0.0728518367f,
+ -0.0990312099f, -0.1321374029f, -0.1714010537f, -0.1993359923f,
+ -0.2263071835f, -0.2493202984f, -0.2650071084f, -0.2705980539f,
+ -0.2650071084f, -0.2493202686f, -0.2263071984f, -0.1993360072f,
+ -0.1714010835f, -0.1321374029f, -0.0990312099f, -0.0728518218f,
+ -0.0529386811f, -0.0381546505f, -0.0218554623f, -0.0124152638f,
+ -0.0070208944f, -0.0039605126f, -0.0000000224f},
+ {-0.0000000224f, -0.0037119202f, -0.0065814704f, -0.0116420984f,
+ -0.0205062106f, -0.0358339138f, -0.0497612022f, -0.0685553476f,
+ -0.0933211446f, -0.1247262210f, -0.1620853394f, -0.1887322366f,
+ -0.2145074457f, -0.2365338504f, -0.2515646219f, -0.2569248080f,
+ -0.2515646219f, -0.2365338504f, -0.2145074606f, -0.1887322664f,
+ -0.1620853394f, -0.1247262210f, -0.0933211446f, -0.0685553402f,
+ -0.0497612059f, -0.0358339138f, -0.0205062106f, -0.0116420984f,
+ -0.0065814704f, -0.0037119202f, -0.0000000224f},
+ {-0.0000000186f, -0.0033335909f, -0.0059123859f, -0.0104638673f,
+ -0.0184471272f, -0.0322837904f, -0.0448903739f, -0.0619516075f,
+ -0.0845159143f, -0.1132542193f, -0.1476069838f, -0.1722094864f,
+ -0.1960791647f, -0.2165289074f, -0.2305092514f, -0.2354996800f,
+ -0.2305092812f, -0.2165289074f, -0.1960791945f, -0.1722095013f,
+ -0.1476069987f, -0.1132542193f, -0.0845159143f, -0.0619516037f,
+ -0.0448903739f, -0.0322837941f, -0.0184471309f, -0.0104638673f,
+ -0.0059123859f, -0.0033335909f, -0.0000000186f},
+ {-0.0000000149f, -0.0023837052f, -0.0042307824f, -0.0074973591f,
+ -0.0132469125f, -0.0232715160f, -0.0324691795f, -0.0450118184f,
+ -0.0617620312f, -0.0833501816f, -0.1095077544f, -0.1284611970f,
+ -0.1470141709f, -0.1630301923f, -0.1740406305f, -0.1779824793f,
+ -0.1740406305f, -0.1630301923f, -0.1470141858f, -0.1284611970f,
+ -0.1095077544f, -0.0833501816f, -0.0617620312f, -0.0450118184f,
+ -0.0324691832f, -0.0232715160f, -0.0132469125f, -0.0074973591f,
+ -0.0042307824f, -0.0023837052f, -0.0000000149f},
+ {-0.0000000075f, -0.0014596879f, -0.0025926158f, -0.0046001561f,
+ -0.0081458427f, -0.0143647529f, -0.0201114044f, -0.0280098952f,
+ -0.0386673734f, -0.0525827743f, -0.0697054639f, -0.0822848827f,
+ -0.0947335809f, -0.1055838689f, -0.1130971760f, -0.1157975048f,
+ -0.1130971834f, -0.1055838689f, -0.0947335884f, -0.0822848827f,
+ -0.0697054639f, -0.0525827669f, -0.0386673696f, -0.0280098915f,
+ -0.0201114081f, -0.0143647529f, -0.0081458427f, -0.0046001561f,
+ -0.0025926158f, -0.0014596879f, -0.0000000075f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000149f, 0.0023475029f, 0.0041818954f, 0.0074593760f,
+ 0.0133338906f, 0.0239118338f, 0.0340123922f, 0.0484390482f,
+ 0.0689862818f, 0.0979072377f, 0.1372926533f, 0.1694079041f,
+ 0.2086421102f, 0.2509776056f, 0.2844191492f, 0.2973977327f,
+ 0.2844191492f, 0.2509775758f, 0.2086421251f, 0.1694079340f,
+ 0.1372926682f, 0.0979072377f, 0.0689862818f, 0.0484390408f,
+ 0.0340123959f, 0.0239118338f, 0.0133338906f, 0.0074593760f,
+ 0.0041818954f, 0.0023475029f, 0.0000000149f},
+ {0.0000000224f, 0.0039520524f, 0.0070491731f, 0.0126024745f,
+ 0.0226208717f, 0.0408787355f, 0.0585894026f, 0.0843905658f,
+ 0.1222686619f, 0.1781808585f, 0.2806743085f, 0.3863530755f,
+ 0.5320819616f, 0.7150993347f, 0.8931091428f, 0.9723875523f,
+ 0.8931093216f, 0.7150993347f, 0.5320819616f, 0.3863530755f,
+ 0.2806743681f, 0.1781808585f, 0.1222686619f, 0.0843905583f,
+ 0.0585894100f, 0.0408787355f, 0.0226208754f, 0.0126024783f,
+ 0.0070491731f, 0.0039520524f, 0.0000000224f}},
{
- {-8, -1391582, -2470337, -4379084, -7741644, -13613250,
- -19010161, -26384297, -36257343, -49022548, -64547243, -75833181,
- -86908862, -96491301, -103089782, -105454184, -103089782, -96491301,
- -86908862, -75833172, -64547240, -49022548, -36257343, -26384295,
- -19010165, -13613251, -7741645, -4379084, -2470337, -1391582,
- -8},
- {-7, -1304089, -2315260, -4104938, -7259321, -12772177,
- -17844573, -24783192, -34086929, -46138449, -60827308, -71526414,
- -82042251, -91152504, -97432108, -99683455, -97432108, -91152495,
- -82042260, -71526418, -60827312, -46138449, -34086931, -24783188,
- -17844578, -12772178, -7259321, -4104938, -2315260, -1304089,
- -7},
- {-7, -1170970, -2079253, -3687531, -6524359, -11488788,
- -16063810, -22333022, -30758491, -41703962, -55090554, -64871119,
- -74507479, -82873672, -88649676, -90722278, -88649676, -82873672,
- -74507487, -64871119, -55090554, -41703962, -30758489, -22333018,
- -16063811, -11488789, -6524359, -3687531, -2079253, -1170970,
- -7},
- {-5, -836946, -1486730, -2638556, -4674179, -8248466,
- -11555711, -16108121, -22262876, -30319528, -40263731, -47590055,
- -54856837, -61203595, -65605308, -67188665, -65605308, -61203586,
- -54856842, -47590059, -40263731, -30319526, -22262874, -16108120,
- -11555711, -8248465, -4674180, -2638556, -1486730, -836946,
- -5},
- {-3, -512296, -910384, -1616803, -2867623, -5071172,
- -7118298, -9948960, -13799297, -18879453, -25211247, -29918728,
- -34622928, -38759529, -41643508, -42683912, -41643508, -38759525,
- -34622930, -29918732, -25211249, -18879451, -13799296, -9948958,
- -7118299, -5071172, -2867624, -1616803, -910384, -512296,
- -3},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {5, 822447, 1463889, 2607236, 4647839, 8293870, 11741041,
- 16605976, 23414447, 32754663, 45010872, 54604473, 64638836, 73862135,
- 80529788, 82985438, 80529795, 73862128, 64638850, 54604473, 45010872,
- 32754663, 23414449, 16605974, 11741042, 8293870, 4647839, 2607237,
- 1463889, 822447, 5},
- {8, 1383579, 2464328, 4394383, 7850862, 14065144,
- 19987153, 28424960, 40399126, 57162281, 79807987, 98105864,
- 117845260, 140317143, 157927636, 164697609, 157927650, 140317143,
- 117845274, 98105858, 79807994, 57162273, 40399123, 28424958,
- 19987155, 14065143, 7850864, 4394383, 2464328, 1383579,
- 8},
- },
+
+ {-0.0000000298f, -0.0051840469f, -0.0092027225f, -0.0163133591f,
+ -0.0288398713f, -0.0507133082f, -0.0708183646f, -0.0982891619f,
+ -0.1350691319f, -0.1826232225f, -0.2404572219f, -0.2825006247f,
+ -0.3237607479f, -0.3594581187f, -0.3840393722f, -0.3928474486f,
+ -0.3840393722f, -0.3594581187f, -0.3237607479f, -0.2825005651f,
+ -0.2404572070f, -0.1826232225f, -0.1350691319f, -0.0982891619f,
+ -0.0708183795f, -0.0507133119f, -0.0288398750f, -0.0163133591f,
+ -0.0092027225f, -0.0051840469f, -0.0000000298f},
+ {-0.0000000261f, -0.0048581101f, -0.0086250156f, -0.0152920857f,
+ -0.0270430781f, -0.0475800671f, -0.0664762110f, -0.0923245847f,
+ -0.1269837022f, -0.1718791127f, -0.2265993804f, -0.2664566636f,
+ -0.3056311905f, -0.3395695388f, -0.3629629016f, -0.3713498116f,
+ -0.3629629016f, -0.3395695090f, -0.3056312203f, -0.2664566636f,
+ -0.2265993953f, -0.1718791127f, -0.1269837171f, -0.0923245698f,
+ -0.0664762333f, -0.0475800708f, -0.0270430781f, -0.0152920857f,
+ -0.0086250156f, -0.0048581101f, -0.0000000261f},
+ {-0.0000000261f, -0.0043622032f, -0.0077458210f, -0.0137371235f,
+ -0.0243051313f, -0.0427990705f, -0.0598423555f, -0.0831969902f,
+ -0.1145843118f, -0.1553593576f, -0.2052282989f, -0.2416637540f,
+ -0.2775619924f, -0.3087284863f, -0.3302457929f, -0.3379668295f,
+ -0.3302457929f, -0.3087284863f, -0.2775620222f, -0.2416637540f,
+ -0.2052282989f, -0.1553593576f, -0.1145842969f, -0.0831969753f,
+ -0.0598423593f, -0.0427990742f, -0.0243051313f, -0.0137371235f,
+ -0.0077458210f, -0.0043622032f, -0.0000000261f},
+ {-0.0000000186f, -0.0031178668f, -0.0055385008f, -0.0098293871f,
+ -0.0174126737f, -0.0307279304f, -0.0430483781f, -0.0600074269f,
+ -0.0829356760f, -0.1129490435f, -0.1499940902f, -0.1772867739f,
+ -0.2043576390f, -0.2280011624f, -0.2443988174f, -0.2502972782f,
+ -0.2443988174f, -0.2280011177f, -0.2043576539f, -0.1772867888f,
+ -0.1499940902f, -0.1129490361f, -0.0829356685f, -0.0600074232f,
+ -0.0430483781f, -0.0307279266f, -0.0174126774f, -0.0098293871f,
+ -0.0055385008f, -0.0031178668f, -0.0000000186f},
+ {-0.0000000112f, -0.0019084513f, -0.0033914447f, -0.0060230605f,
+ -0.0106827281f, -0.0188915879f, -0.0265177265f, -0.0370627642f,
+ -0.0514063872f, -0.0703314394f, -0.0939192176f, -0.1114559472f,
+ -0.1289804578f, -0.1443904936f, -0.1551341563f, -0.1590099633f,
+ -0.1551341563f, -0.1443904787f, -0.1289804578f, -0.1114559621f,
+ -0.0939192176f, -0.0703314394f, -0.0514063835f, -0.0370627567f,
+ -0.0265177302f, -0.0188915879f, -0.0106827319f, -0.0060230605f,
+ -0.0033914447f, -0.0019084513f, -0.0000000112f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000186f, 0.0030638538f, 0.0054534115f, 0.0097127110f,
+ 0.0173145495f, 0.0308970734f, 0.0437387861f, 0.0618620813f,
+ 0.0872256160f, 0.1220206320f, 0.1676785648f, 0.2034175098f,
+ 0.2407984287f, 0.2751578987f, 0.2999968529f, 0.3091448545f,
+ 0.2999968529f, 0.2751578689f, 0.2407984734f, 0.2034175098f,
+ 0.1676785648f, 0.1220206320f, 0.0872256160f, 0.0618620738f,
+ 0.0437387899f, 0.0308970734f, 0.0173145495f, 0.0097127147f,
+ 0.0054534115f, 0.0030638538f, 0.0000000186f},
+ {0.0000000298f, 0.0051542334f, 0.0091803372f, 0.0163703524f,
+ 0.0292467400f, 0.0523967445f, 0.0744579434f, 0.1058912277f,
+ 0.1504984796f, 0.2129460871f, 0.2973079085f, 0.3654728234f,
+ 0.4390078187f, 0.5227220654f, 0.5883262753f, 0.6135464311f,
+ 0.5883263350f, 0.5227220654f, 0.4390078485f, 0.3654727936f,
+ 0.2973079383f, 0.2129460573f, 0.1504984647f, 0.1058912203f,
+ 0.0744579583f, 0.0523967408f, 0.0292467475f, 0.0163703524f,
+ 0.0091803372f, 0.0051542334f, 0.0000000298f}},
{
- {-8, -1509476, -2684086, -4772023, -8480193, -15047650,
- -21188892, -29744494, -41501680, -57227068, -77169768, -92246064,
- -107526888, -121143312, -130736632, -134217744, -130736624, -121143312,
- -107526896, -92246064, -77169768, -57227064, -41501676, -29744492,
- -21188894, -15047650, -8480194, -4772023, -2684086, -1509476,
- -8},
- {-8, -1414379, -2514988, -4471386, -7945941, -14099648,
- -19853990, -27870592, -38887072, -53621760, -72308072, -86434552,
- -100752688, -113511272, -122500224, -125762016, -122500216, -113511280,
- -100752696, -86434560, -72308072, -53621760, -38887072, -27870588,
- -19853994, -14099649, -7945942, -4471386, -2514989, -1414379,
- -8},
- {-7, -1269741, -2257800, -4014131, -7133369, -12657783,
- -17823674, -25020474, -34910384, -48138264, -64913664, -77595552,
- -90449464, -101903328, -109973032, -112901280, -109973040, -101903328,
- -90449472, -77595544, -64913668, -48138264, -34910384, -25020472,
- -17823674, -12657783, -7133369, -4014131, -2257800, -1269741,
- -7},
- {-5, -907074, -1612921, -2867604, -5095918, -9042434,
- -12732830, -17874062, -24939188, -34388892, -46372856, -55432508,
- -64615056, -72797440, -78562256, -80654120, -78562256, -72797432,
- -64615064, -55432508, -46372860, -34388892, -24939190, -17874060,
- -12732831, -9042434, -5095918, -2867604, -1612921, -907074,
- -5},
- {-3, -554944, -986777, -1754386, -3117658, -5532118,
- -7789884, -10935266, -15257677, -21038960, -28370692, -33913340,
- -39531184, -44537124, -48064012, -49343804, -48064012, -44537124,
- -39531188, -33913344, -28370694, -21038958, -15257676, -10935264,
- -7789885, -5532117, -3117658, -1754387, -986777, -554944,
- -3},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {5, 889081, 1580927, 2810722, 4994834, 8863066, 12480257,
- 17519508, 24444488, 33706744, 45452992, 54332928, 63333332, 71353408,
- 77003864, 79054240, 77003872, 71353400, 63333336, 54332932, 45452992,
- 33706744, 24444488, 17519506, 12480258, 8863066, 4994834, 2810722,
- 1580927, 889081, 5},
- {8, 1494381, 2657245, 4724303, 8395391, 14897174,
- 20977002, 29447048, 41086664, 56654796, 76398072, 91323608,
- 106451616, 119931880, 129429263, 132875552, 129429264, 119931878,
- 106451624, 91323608, 76398072, 56654796, 41086660, 29447048,
- 20977004, 14897174, 8395392, 4724304, 2657245, 1494381,
- 8},
- },
+
+ {-0.0000000298f, -0.0056232363f, -0.0099989995f, -0.0177771710f,
+ -0.0315911807f, -0.0560568646f, -0.0789347738f, -0.1108068749f,
+ -0.1546058059f, -0.2131874412f, -0.2874797881f, -0.3436433673f,
+ -0.4005688727f, -0.4512940049f, -0.4870319068f, -0.5000000596f,
+ -0.4870318770f, -0.4512940049f, -0.4005689025f, -0.3436433673f,
+ -0.2874797881f, -0.2131874263f, -0.1546057910f, -0.1108068675f,
+ -0.0789347813f, -0.0560568646f, -0.0315911844f, -0.0177771710f,
+ -0.0099989995f, -0.0056232363f, -0.0000000298f},
+ {-0.0000000298f, -0.0052689724f, -0.0093690604f, -0.0166572109f,
+ -0.0296009369f, -0.0525252819f, -0.0739618763f, -0.1038260460f,
+ -0.1448656321f, -0.1997566223f, -0.2693685591f, -0.3219937980f,
+ -0.3753330112f, -0.4228624403f, -0.4563488960f, -0.4685000181f,
+ -0.4563488662f, -0.4228624701f, -0.3753330410f, -0.3219938278f,
+ -0.2693685591f, -0.1997566223f, -0.1448656321f, -0.1038260311f,
+ -0.0739618912f, -0.0525252856f, -0.0296009406f, -0.0166572109f,
+ -0.0093690641f, -0.0052689724f, -0.0000000298f},
+ {-0.0000000261f, -0.0047301538f, -0.0084109604f, -0.0149538033f,
+ -0.0265738703f, -0.0471539162f, -0.0663983598f, -0.0932085291f,
+ -0.1300513148f, -0.1793290079f, -0.2418222427f, -0.2890659571f,
+ -0.3369505107f, -0.3796194792f, -0.4096814692f, -0.4205900431f,
+ -0.4096814990f, -0.3796194792f, -0.3369505405f, -0.2890659273f,
+ -0.2418222576f, -0.1793290079f, -0.1300513148f, -0.0932085216f,
+ -0.0663983598f, -0.0471539162f, -0.0265738703f, -0.0149538033f,
+ -0.0084109604f, -0.0047301538f, -0.0000000261f},
+ {-0.0000000186f, -0.0033791140f, -0.0060085990f, -0.0106826574f,
+ -0.0189837739f, -0.0336856917f, -0.0474334881f, -0.0665860698f,
+ -0.0929057151f, -0.1281086057f, -0.1727523506f, -0.2065021843f,
+ -0.2407098413f, -0.2711915970f, -0.2926672101f, -0.3004600108f,
+ -0.2926672101f, -0.2711915672f, -0.2407098711f, -0.2065021843f,
+ -0.1727523655f, -0.1281086057f, -0.0929057226f, -0.0665860623f,
+ -0.0474334918f, -0.0336856917f, -0.0189837739f, -0.0106826574f,
+ -0.0060085990f, -0.0033791140f, -0.0000000186f},
+ {-0.0000000112f, -0.0020673275f, -0.0036760308f, -0.0065355971f,
+ -0.0116141811f, -0.0206087455f, -0.0290195793f, -0.0407370403f,
+ -0.0568392761f, -0.0783762336f, -0.1056890637f, -0.1263370365f,
+ -0.1472651362f, -0.1659137160f, -0.1790523976f, -0.1838199943f,
+ -0.1790523976f, -0.1659137160f, -0.1472651511f, -0.1263370514f,
+ -0.1056890711f, -0.0783762261f, -0.0568392724f, -0.0407370329f,
+ -0.0290195830f, -0.0206087418f, -0.0116141811f, -0.0065356009f,
+ -0.0036760308f, -0.0020673275f, -0.0000000112f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000186f, 0.0033120848f, 0.0058894120f, 0.0104707554f,
+ 0.0186072066f, 0.0330174938f, 0.0464925803f, 0.0652652532f,
+ 0.0910628140f, 0.1255674064f, 0.1693255901f, 0.2024059296f,
+ 0.2359350473f, 0.2658121586f, 0.2868617475f, 0.2944999933f,
+ 0.2868617773f, 0.2658121288f, 0.2359350622f, 0.2024059445f,
+ 0.1693255901f, 0.1255674064f, 0.0910628140f, 0.0652652457f,
+ 0.0464925840f, 0.0330174938f, 0.0186072066f, 0.0104707554f,
+ 0.0058894120f, 0.0033120848f, 0.0000000186f},
+ {0.0000000298f, 0.0055670030f, 0.0098990090f, 0.0175994001f,
+ 0.0312752686f, 0.0554962978f, 0.0781454220f, 0.1096988022f,
+ 0.1530597508f, 0.2110555619f, 0.2846049964f, 0.3402069509f,
+ 0.3965631723f, 0.4467810690f, 0.4821615815f, 0.4950000048f,
+ 0.4821615815f, 0.4467810690f, 0.3965632021f, 0.3402069509f,
+ 0.2846049964f, 0.2110555619f, 0.1530597359f, 0.1096988022f,
+ 0.0781454295f, 0.0554962978f, 0.0312752724f, 0.0175994039f,
+ 0.0098990090f, 0.0055670030f, 0.0000000298f}},
{
- {-8, -1397585, -2489316, -4439078, -7931147, -14210401,
- -20195533, -28725381, -40834574, -57795944, -80727760, -99273505,
- -119386757, -142482370, -160470890, -167392516, -160470890, -142482357,
- -119386757, -99273512, -80727756, -57795944, -40834574, -28725377,
- -20195535, -14210400, -7931148, -4439078, -2489316, -1397585,
- -8},
- {-7, -1309358, -2331922, -4157610, -7425692, -13296383,
- -18885003, -26837459, -38101253, -53825212, -74978577, -91990894,
- -110257644, -129210650, -144934890, -150951436, -144934903, -129210650,
- -110257650, -91990901, -74978584, -53825215, -38101253, -26837455,
- -18885005, -13296384, -7425692, -4157610, -2331922, -1309358,
- -7},
- {-7, -1175217, -2092682, -3729980, -6658434, -11911179,
- -16901999, -23987347, -33988896, -47881077, -66434665, -81236418,
- -97003508, -111774388, -123343304, -128186650, -123343317, -111774382,
- -97003515, -81236418, -66434665, -47881077, -33988892, -23987347,
- -16902001, -11911179, -6658434, -3729980, -2092681, -1175217,
- -7},
- {-5, -839113, -1493583, -2660218, -4742594, -8463942,
- -11983129, -16951064, -23906436, -33453557, -45991133, -55813174,
- -66094542, -75552455, -82394424, -84915283, -82394417, -75552441,
- -66094540, -55813171, -45991139, -33453554, -23906434, -16951065,
- -11983130, -8463941, -4742595, -2660218, -1493583, -839113,
- -5},
- {-3, -513107, -912949, -1624911, -2893228, -5151802,
- -7278196, -10264146, -14413252, -20048070, -27340204, -32966174,
- -38772409, -44037899, -47801354, -49178242, -47801358, -44037903,
- -38772413, -32966178, -27340208, -20048068, -14413250, -10264145,
- -7278196, -5151802, -2893229, -1624911, -912949, -513107,
- -3},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {5, 820365, 1457305, 2586425, 4582113, 8086863, 11330426,
- 15796198, 21835646, 29744456, 39510836, 46709319, 53851835, 60092071,
- 64420974, 65978354, 64420974, 60092067, 53851844, 46709315, 39510836,
- 29744457, 21835644, 15796195, 11330427, 8086863, 4582113, 2586425,
- 1457305, 820365, 5},
- {8, 1377696, 2445727, 4335584, 7665133, 13479892,
- 18825424, 26130668, 35913779, 48566398, 63959479, 75153138,
- 86140901, 95649257, 102197733, 104544436, 102197742, 95649257,
- 86140901, 75153138, 63959483, 48566398, 35913779, 26130668,
- 18825426, 13479892, 7665134, 4335585, 2445727, 1377696,
- 8},
- },
+
+ {-0.0000000298f, -0.0052064098f, -0.0092734247f, -0.0165368542f,
+ -0.0295458250f, -0.0529378690f, -0.0752342194f, -0.1070103794f,
+ -0.1521206498f, -0.2153066695f, -0.3007343411f, -0.3698226213f,
+ -0.4447503388f, -0.5307881832f, -0.5978006721f, -0.6235857010f,
+ -0.5978006721f, -0.5307881236f, -0.4447503388f, -0.3698226511f,
+ -0.3007343411f, -0.2153066695f, -0.1521206498f, -0.1070103645f,
+ -0.0752342343f, -0.0529378653f, -0.0295458287f, -0.0165368542f,
+ -0.0092734247f, -0.0052064098f, -0.0000000298f},
+ {-0.0000000261f, -0.0048777387f, -0.0086870864f, -0.0154883042f,
+ -0.0276628584f, -0.0495328866f, -0.0703521222f, -0.0999773294f,
+ -0.1419382244f, -0.2005145401f, -0.2793169618f, -0.3426927924f,
+ -0.4107417464f, -0.4813471735f, -0.5399245620f, -0.5623379350f,
+ -0.5399245620f, -0.4813471735f, -0.4107417464f, -0.3426928222f,
+ -0.2793169916f, -0.2005145550f, -0.1419382244f, -0.0999773145f,
+ -0.0703521222f, -0.0495328903f, -0.0276628584f, -0.0154883042f,
+ -0.0086870864f, -0.0048777387f, -0.0000000261f},
+ {-0.0000000261f, -0.0043780245f, -0.0077958480f, -0.0138952583f,
+ -0.0248045996f, -0.0443725996f, -0.0629648566f, -0.0893598348f,
+ -0.1266185045f, -0.1783709079f, -0.2474884093f, -0.3026292324f,
+ -0.3613662124f, -0.4163920283f, -0.4594896138f, -0.4775324762f,
+ -0.4594896734f, -0.4163920283f, -0.3613662422f, -0.3026292324f,
+ -0.2474884093f, -0.1783709079f, -0.1266184896f, -0.0893598348f,
+ -0.0629648566f, -0.0443725996f, -0.0248045996f, -0.0138952583f,
+ -0.0077958442f, -0.0043780245f, -0.0000000261f},
+ {-0.0000000186f, -0.0031259395f, -0.0055640303f, -0.0099100843f,
+ -0.0176675394f, -0.0315306410f, -0.0446406342f, -0.0631476343f,
+ -0.0890584141f, -0.1246242076f, -0.1713303179f, -0.2079202831f,
+ -0.2462213635f, -0.2814548314f, -0.3069431484f, -0.3163340688f,
+ -0.3069431186f, -0.2814547718f, -0.2462213486f, -0.2079202682f,
+ -0.1713303477f, -0.1246242002f, -0.0890584067f, -0.0631476343f,
+ -0.0446406379f, -0.0315306373f, -0.0176675431f, -0.0099100843f,
+ -0.0055640303f, -0.0031259395f, -0.0000000186f},
+ {-0.0000000112f, -0.0019114725f, -0.0034010001f, -0.0060532652f,
+ -0.0107781142f, -0.0191919580f, -0.0271133929f, -0.0382369235f,
+ -0.0536935478f, -0.0746848807f, -0.1018501967f, -0.1228085682f,
+ -0.1444384754f, -0.1640539616f, -0.1780739129f, -0.1832032204f,
+ -0.1780739427f, -0.1640539765f, -0.1444384903f, -0.1228085831f,
+ -0.1018502116f, -0.0746848732f, -0.0536935404f, -0.0382369198f,
+ -0.0271133929f, -0.0191919580f, -0.0107781179f, -0.0060532652f,
+ -0.0034010001f, -0.0019114725f, -0.0000000112f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000186f, 0.0030560978f, 0.0054288842f, 0.0096351840f,
+ 0.0170697011f, 0.0301259123f, 0.0422091261f, 0.0588454232f,
+ 0.0813441202f, 0.1108067334f, 0.1471893340f, 0.1740057766f,
+ 0.2006137222f, 0.2238604128f, 0.2399868369f, 0.2457885146f,
+ 0.2399868369f, 0.2238603979f, 0.2006137520f, 0.1740057617f,
+ 0.1471893340f, 0.1108067334f, 0.0813441128f, 0.0588454120f,
+ 0.0422091298f, 0.0301259123f, 0.0170697011f, 0.0096351840f,
+ 0.0054288842f, 0.0030560978f, 0.0000000186f},
+ {0.0000000298f, 0.0051323175f, 0.0091110431f, 0.0161513090f,
+ 0.0285548456f, 0.0502165109f, 0.0701301694f, 0.0973443240f,
+ 0.1337892562f, 0.1809239388f, 0.2382676303f, 0.2799672484f,
+ 0.3208998740f, 0.3563212454f, 0.3807162344f, 0.3894583583f,
+ 0.3807162642f, 0.3563212454f, 0.3208998740f, 0.2799672484f,
+ 0.2382676452f, 0.1809239388f, 0.1337892562f, 0.0973443240f,
+ 0.0701301768f, 0.0502165109f, 0.0285548493f, 0.0161513127f,
+ 0.0091110431f, 0.0051323175f, 0.0000000298f}},
{
- {-6, -1071630, -1911499, -3417563, -6135014, -11088915,
- -15896315, -22903493, -33199122, -48417346, -76625352, -105748897,
- -146157663, -197317649, -247522927, -270025194, -247522954, -197317609,
- -146157677, -105748904, -76625358, -48417346, -33199122, -22903491,
- -15896315, -11088915, -6135014, -3417563, -1911499, -1071630,
- -6},
- {-6, -1003864, -1790265, -3199659, -5740059, -10362247,
- -14836237, -21336047, -30836947, -44762533, -68827345, -93516451,
- -126532850, -166393343, -203549915, -219611661, -203549928, -166393329,
- -126532890, -93516458, -68827352, -44762536, -30836951, -21336046,
- -14836239, -10362246, -5740059, -3199659, -1790265, -1003864,
- -6},
- {-5, -900861, -1606086, -2868917, -5141593, -9264643,
- -13240198, -18987808, -27325830, -39399654, -58130792, -77340471,
- -101814498, -129653024, -154062530, -164186529, -154062570, -129653010,
- -101814518, -77340471, -58130799, -39399654, -27325828, -18987806,
- -13240198, -9264643, -5141593, -2868917, -1606086, -900860,
- -5},
- {-4, -642936, -1145384, -2043195, -3652724, -6551934,
- -9321546, -13279575, -18921457, -26872438, -37720430, -46584838,
- -57725379, -69582952, -78984425, -82641451, -78984418, -69582945,
- -57725385, -46584841, -37720434, -26872436, -18921457, -13279575,
- -9321547, -6551934, -3652725, -2043195, -1145384, -642936,
- -4},
- {-2, -392979, -699578, -1246312, -2222848, -3970081,
- -5624912, -7965246, -11250449, -15776819, -21752506, -26460379,
- -31414830, -35997598, -39328571, -40559278, -39328574, -35997598,
- -31414833, -26460381, -21752510, -15776818, -11250449, -7965245,
- -5624912, -3970080, -2222848, -1246312, -699578, -392979,
- -2},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {4, 627208, 1113258, 1972927, 3486308, 6125748, 8548319,
- 11853214, 16269000, 21963762, 28868936, 33875540, 38778800, 43013413,
- 45925477, 46968213, 45925482, 43013409, 38778804, 33875542, 28868936,
- 21963760, 16269001, 11853213, 8548320, 6125748, 3486308, 1972927,
- 1113257, 627208, 4},
- {6, 1052552, 1865940, 3299774, 5809354, 10143366, 14075580,
- 19373582, 26341294, 35156402, 45615999, 53060599, 60250435, 66386585,
- 70569986, 72061134, 70569991, 66386585, 60250429, 53060599, 45615999,
- 35156405, 26341292, 19373582, 14075583, 10143366, 5809355, 3299775,
- 1865941, 1052552, 6},
- },
+
+ {-0.0000000224f, -0.0039921328f, -0.0071208887f, -0.0127314143f,
+ -0.0228547081f, -0.0413094275f, -0.0592183881f, -0.0853221565f,
+ -0.1236763671f, -0.1803686619f, -0.2854516804f, -0.3939453363f,
+ -0.5444797277f, -0.7350655198f, -0.9220947623f, -1.0059221983f,
+ -0.9220948815f, -0.7350654006f, -0.5444797873f, -0.3939453661f,
+ -0.2854517102f, -0.1803686619f, -0.1236763671f, -0.0853221565f,
+ -0.0592183881f, -0.0413094275f, -0.0228547081f, -0.0127314143f,
+ -0.0071208887f, -0.0039921328f, -0.0000000224f},
+ {-0.0000000224f, -0.0037396848f, -0.0066692568f, -0.0119196586f,
+ -0.0213833861f, -0.0386023782f, -0.0552692898f, -0.0794829726f,
+ -0.1148765832f, -0.1667534262f, -0.2564018369f, -0.3483759165f,
+ -0.4713715911f, -0.6198635101f, -0.7582825422f, -0.8181172013f,
+ -0.7582825422f, -0.6198634505f, -0.4713717401f, -0.3483759463f,
+ -0.2564018667f, -0.1667534411f, -0.1148765981f, -0.0794829652f,
+ -0.0552692972f, -0.0386023745f, -0.0213833861f, -0.0119196586f,
+ -0.0066692568f, -0.0037396848f, -0.0000000224f},
+ {-0.0000000186f, -0.0033559687f, -0.0059831366f, -0.0106875487f,
+ -0.0191539265f, -0.0345134847f, -0.0493235812f, -0.0707350969f,
+ -0.1017966494f, -0.1467751563f, -0.2165540755f, -0.2881157100f,
+ -0.3792885542f, -0.4829951525f, -0.5739276409f, -0.6116424799f,
+ -0.5739278197f, -0.4829950929f, -0.3792886436f, -0.2881157100f,
+ -0.2165541053f, -0.1467751563f, -0.1017966419f, -0.0707350895f,
+ -0.0493235812f, -0.0345134847f, -0.0191539265f, -0.0106875487f,
+ -0.0059831366f, -0.0033559650f, -0.0000000186f},
+ {-0.0000000149f, -0.0023951232f, -0.0042668879f, -0.0076114945f,
+ -0.0136074573f, -0.0244078562f, -0.0347254649f, -0.0494702719f,
+ -0.0704879165f, -0.1001076326f, -0.1405195594f, -0.1735420525f,
+ -0.2150437981f, -0.2592166960f, -0.2942399085f, -0.3078633845f,
+ -0.2942398787f, -0.2592166662f, -0.2150438130f, -0.1735420525f,
+ -0.1405195594f, -0.1001076251f, -0.0704879165f, -0.0494702719f,
+ -0.0347254686f, -0.0244078562f, -0.0136074610f, -0.0076114945f,
+ -0.0042668879f, -0.0023951232f, -0.0000000149f},
+ {-0.0000000075f, -0.0014639609f, -0.0026061311f, -0.0046428740f,
+ -0.0082807541f, -0.0147897042f, -0.0209544301f, -0.0296728536f,
+ -0.0419111885f, -0.0587732308f, -0.0810343996f, -0.0985725969f,
+ -0.1170293614f, -0.1341015100f, -0.1465103477f, -0.1510950923f,
+ -0.1465103626f, -0.1341015100f, -0.1170293689f, -0.0985725969f,
+ -0.0810344145f, -0.0587732270f, -0.0419111885f, -0.0296728499f,
+ -0.0209544301f, -0.0147897005f, -0.0082807541f, -0.0046428740f,
+ -0.0026061311f, -0.0014639609f, -0.0000000075f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000149f, 0.0023365319f, 0.0041472092f, 0.0073497258f,
+ 0.0129875094f, 0.0228201896f, 0.0318449698f, 0.0441566631f,
+ 0.0606067479f, 0.0818213895f, 0.1075451672f, 0.1261962205f,
+ 0.1444622874f, 0.1602374464f, 0.1710857302f, 0.1749702245f,
+ 0.1710857451f, 0.1602374315f, 0.1444623023f, 0.1261962354f,
+ 0.1075451672f, 0.0818213820f, 0.0606067516f, 0.0441566594f,
+ 0.0318449736f, 0.0228201896f, 0.0129875094f, 0.0073497258f,
+ 0.0041472055f, 0.0023365319f, 0.0000000149f},
+ {0.0000000224f, 0.0039210618f, 0.0069511682f, 0.0122926161f,
+ 0.0216415301f, 0.0377869830f, 0.0524356216f, 0.0721722171f,
+ 0.0981289670f, 0.1309677958f, 0.1699328423f, 0.1976661384f,
+ 0.2244503647f, 0.2473092973f, 0.2628936768f, 0.2684486508f,
+ 0.2628937066f, 0.2473092973f, 0.2244503349f, 0.1976661384f,
+ 0.1699328423f, 0.1309678108f, 0.0981289595f, 0.0721722171f,
+ 0.0524356328f, 0.0377869830f, 0.0216415338f, 0.0122926198f,
+ 0.0069511719f, 0.0039210618f, 0.0000000224f}},
{
- {-3, -580676, -1036778, -1856927, -3344306, -6082086,
- -8773675, -12764181, -18791317, -30111286, -52494265, -80589391,
- -131965584, -232564048, -416579297, -562298280, -416579510, -232563968,
- -131965624, -80589405, -52494275, -30111283, -18791315, -12764179,
- -8773676, -6082086, -3344306, -1856927, -1036778, -580676,
- -3},
- {-3, -543914, -970885, -1738082, -3127514, -5678284,
- -8177066, -11864206, -17389757, -27104441, -45909909, -68054278,
- -104838298, -165555583, -249179407, -298573540, -249179487, -165555569,
- -104838338, -68054292, -45909909, -27104439, -17389757, -11864205,
- -8177067, -5678284, -3127513, -1738082, -970885, -543913,
- -3},
- {-3, -488046, -870816, -1557814, -2799416, -5069822,
- -7282155, -10523970, -15327605, -22959079, -37422722, -53115972,
- -76430452, -108848624, -144319570, -161563289, -144319637, -108848611,
- -76430472, -53115969, -37422729, -22959078, -15327603, -10523969,
- -7282156, -5069822, -2799417, -1557814, -870816, -488046,
- -3},
- {-2, -348211, -620694, -1108379, -1985253, -3573386,
- -5101324, -7304187, -10486237, -15063094, -21722298, -28584446,
- -37112672, -46532696, -54556959, -57822712, -54556959, -46532689,
- -37112682, -28584446, -21722299, -15063095, -10486238, -7304186,
- -5101324, -3573386, -1985253, -1108378, -620694, -348211,
- -2},
- {-1, -212775, -378912, -675466, -1206088, -2158548,
- -3064349, -4351732, -6171956, -8706333, -12102898, -14823042,
- -17731555, -20482223, -22906153, -23829791, -22906156, -20482223,
- -17731555, -14823041, -12102899, -8706332, -6171955, -4351731,
- -3064349, -2158548, -1206088, -675466, -378913, -212775,
- -1},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {2, 339200, 601729, 1065360, 1879405, 3292792, 4583180,
- 6333406, 8654669, 11621118, 15180668, 17738214, 20225637, 22361080,
- 23823154, 24345462, 23823157, 22361078, 20225641, 17738213, 15180668,
- 11621118, 8654670, 6333406, 4583181, 3292792, 1879405, 1065360,
- 601729, 339200, 2},
- {3, 568956, 1007710, 1779215, 3123785, 5429323, 7504044,
- 10275511, 13882195, 18389595, 23668008, 27385006, 30947362, 33968646,
- 36019344, 36748630, 36019347, 33968643, 30947364, 27385006, 23668008,
- 18389595, 13882195, 10275510, 7504045, 5429323, 3123785, 1779215,
- 1007710, 568956, 3},
- },
+
+ {-0.0000000112f, -0.0021631867f, -0.0038622990f, -0.0069175921f,
+ -0.0124585107f, -0.0226575360f, -0.0326844864f, -0.0475502796f,
+ -0.0700031072f, -0.1121732816f, -0.1955563724f, -0.3002188802f,
+ -0.4916101098f, -0.8663685918f, -1.5518788099f, -2.0947244167f,
+ -1.5518796444f, -0.8663682938f, -0.4916102588f, -0.3002189398f,
+ -0.1955564171f, -0.1121732742f, -0.0700031072f, -0.0475502722f,
+ -0.0326844901f, -0.0226575360f, -0.0124585107f, -0.0069175921f,
+ -0.0038622990f, -0.0021631867f, -0.0000000112f},
+ {-0.0000000112f, -0.0020262375f, -0.0036168285f, -0.0064748600f,
+ -0.0116508976f, -0.0211532563f, -0.0304619446f, -0.0441976115f,
+ -0.0647818893f, -0.1009719074f, -0.1710277349f, -0.2535219491f,
+ -0.3905530870f, -0.6167426109f, -0.9282656312f, -1.1122730970f,
+ -0.9282659292f, -0.6167425513f, -0.3905532360f, -0.2535219789f,
+ -0.1710277349f, -0.1009719074f, -0.0647818893f, -0.0441976078f,
+ -0.0304619484f, -0.0211532563f, -0.0116508938f, -0.0064748600f,
+ -0.0036168285f, -0.0020262338f, -0.0000000112f},
+ {-0.0000000112f, -0.0018181130f, -0.0032440424f, -0.0058033094f,
+ -0.0104286373f, -0.0188865587f, -0.0271281414f, -0.0392048433f,
+ -0.0570997782f, -0.0855292380f, -0.1394104958f, -0.1978724152f,
+ -0.2847256064f, -0.4054927230f, -0.5376322865f, -0.6018701792f,
+ -0.5376325250f, -0.4054926634f, -0.2847256958f, -0.1978724003f,
+ -0.1394105256f, -0.0855292305f, -0.0570997708f, -0.0392048396f,
+ -0.0271281451f, -0.0188865587f, -0.0104286410f, -0.0058033094f,
+ -0.0032440424f, -0.0018181130f, -0.0000000112f},
+ {-0.0000000075f, -0.0012971871f, -0.0023122653f, -0.0041290335f,
+ -0.0073956437f, -0.0133119002f, -0.0190039128f, -0.0272102170f,
+ -0.0390642770f, -0.0561143979f, -0.0809218660f, -0.1064853594f,
+ -0.1382554770f, -0.1733478010f, -0.2032405138f, -0.2154063880f,
+ -0.2032405138f, -0.1733477712f, -0.1382555068f, -0.1064853594f,
+ -0.0809218735f, -0.0561144017f, -0.0390642807f, -0.0272102132f,
+ -0.0190039128f, -0.0133119002f, -0.0073956437f, -0.0041290298f,
+ -0.0023122653f, -0.0012971871f, -0.0000000075f},
+ {-0.0000000037f, -0.0007926486f, -0.0014115572f, -0.0025163069f,
+ -0.0044930279f, -0.0080412179f, -0.0114155896f, -0.0162114650f,
+ -0.0229923278f, -0.0324336179f, -0.0450868085f, -0.0552201346f,
+ -0.0660551935f, -0.0763022304f, -0.0853320658f, -0.0887728930f,
+ -0.0853320807f, -0.0763022304f, -0.0660551935f, -0.0552201308f,
+ -0.0450868122f, -0.0324336141f, -0.0229923241f, -0.0162114613f,
+ -0.0114155896f, -0.0080412179f, -0.0044930279f, -0.0025163069f,
+ -0.0014115609f, -0.0007926486f, -0.0000000037f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000075f, 0.0012636185f, 0.0022416152f, 0.0039687753f,
+ 0.0070013292f, 0.0122666061f, 0.0170736760f, 0.0235937759f,
+ 0.0322411545f, 0.0432920381f, 0.0565523952f, 0.0660799965f,
+ 0.0753463656f, 0.0833015144f, 0.0887481645f, 0.0906939134f,
+ 0.0887481719f, 0.0833015069f, 0.0753463805f, 0.0660799891f,
+ 0.0565523952f, 0.0432920381f, 0.0322411582f, 0.0235937759f,
+ 0.0170736797f, 0.0122666061f, 0.0070013292f, 0.0039687753f,
+ 0.0022416152f, 0.0012636185f, 0.0000000075f},
+ {0.0000000112f, 0.0021195263f, 0.0037540123f, 0.0066280924f,
+ 0.0116370060f, 0.0202258043f, 0.0279547423f, 0.0382792614f,
+ 0.0517152064f, 0.0685065836f, 0.0881702006f, 0.1020170972f,
+ 0.1152879074f, 0.1265430748f, 0.1341825128f, 0.1368993223f,
+ 0.1341825277f, 0.1265430599f, 0.1152879149f, 0.1020170972f,
+ 0.0881702006f, 0.0685065836f, 0.0517152064f, 0.0382792577f,
+ 0.0279547460f, 0.0202258043f, 0.0116370060f, 0.0066280924f,
+ 0.0037540123f, 0.0021195263f, 0.0000000112f}},
{
- {0, 0, 0, 0, 1, 1, 2, 3, 4, 7, 13, 21, 39, 91, 367, -858993460,
- 367, 91, 39, 21, 13, 7, 4, 3, 2, 1, 1, 0, 0, 0, 0},
- {0, 0, 0, 0, 1, 1, 2, 3, 4, 7, 11, 18, 29, 54, 102, 145,
- 102, 54, 29, 18, 11, 7, 4, 3, 2, 1, 1, 0, 0, 0, 0},
- {0, 0, 0, 0, 1, 1, 2, 2, 4, 5, 9, 13, 20, 31, 44, 52,
- 44, 31, 20, 13, 9, 5, 4, 2, 2, 1, 1, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 5, 7, 9, 12, 14, 15,
- 14, 12, 9, 7, 5, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 3, 3, 4, 5, 5, 6,
- 5, 5, 4, 3, 3, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, -1, -1, -1, -2, -3, -3, -4, -5, -5, -5, -5,
- -5, -5, -5, -4, -3, -3, -2, -1, -1, -1, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, -1, -1, -2, -2, -3, -4, -5, -6, -7, -8, -8, -8,
- -8, -8, -7, -6, -5, -4, -3, -2, -2, -1, -1, 0, 0, 0, 0},
- },
+
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000037f, 0.0000000037f, 0.0000000075f, 0.0000000112f,
+ 0.0000000149f, 0.0000000261f, 0.0000000484f, 0.0000000782f,
+ 0.0000001453f, 0.0000003390f, 0.0000013672f, -3.2000000477f,
+ 0.0000013672f, 0.0000003390f, 0.0000001453f, 0.0000000782f,
+ 0.0000000484f, 0.0000000261f, 0.0000000149f, 0.0000000112f,
+ 0.0000000075f, 0.0000000037f, 0.0000000037f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000037f, 0.0000000037f, 0.0000000075f, 0.0000000112f,
+ 0.0000000149f, 0.0000000261f, 0.0000000410f, 0.0000000671f,
+ 0.0000001080f, 0.0000002012f, 0.0000003800f, 0.0000005402f,
+ 0.0000003800f, 0.0000002012f, 0.0000001080f, 0.0000000671f,
+ 0.0000000410f, 0.0000000261f, 0.0000000149f, 0.0000000112f,
+ 0.0000000075f, 0.0000000037f, 0.0000000037f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000037f, 0.0000000037f, 0.0000000075f, 0.0000000075f,
+ 0.0000000149f, 0.0000000186f, 0.0000000335f, 0.0000000484f,
+ 0.0000000745f, 0.0000001155f, 0.0000001639f, 0.0000001937f,
+ 0.0000001639f, 0.0000001155f, 0.0000000745f, 0.0000000484f,
+ 0.0000000335f, 0.0000000186f, 0.0000000149f, 0.0000000075f,
+ 0.0000000075f, 0.0000000037f, 0.0000000037f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000037f, 0.0000000037f, 0.0000000075f,
+ 0.0000000075f, 0.0000000112f, 0.0000000186f, 0.0000000261f,
+ 0.0000000335f, 0.0000000447f, 0.0000000522f, 0.0000000559f,
+ 0.0000000522f, 0.0000000447f, 0.0000000335f, 0.0000000261f,
+ 0.0000000186f, 0.0000000112f, 0.0000000075f, 0.0000000075f,
+ 0.0000000037f, 0.0000000037f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000037f, 0.0000000037f,
+ 0.0000000037f, 0.0000000075f, 0.0000000112f, 0.0000000112f,
+ 0.0000000149f, 0.0000000186f, 0.0000000186f, 0.0000000224f,
+ 0.0000000186f, 0.0000000186f, 0.0000000149f, 0.0000000112f,
+ 0.0000000112f, 0.0000000075f, 0.0000000037f, 0.0000000037f,
+ 0.0000000037f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, -0.0000000037f, -0.0000000037f, -0.0000000037f,
+ -0.0000000075f, -0.0000000112f, -0.0000000112f, -0.0000000149f,
+ -0.0000000186f, -0.0000000186f, -0.0000000186f, -0.0000000186f,
+ -0.0000000186f, -0.0000000186f, -0.0000000186f, -0.0000000149f,
+ -0.0000000112f, -0.0000000112f, -0.0000000075f, -0.0000000037f,
+ -0.0000000037f, -0.0000000037f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ -0.0000000037f, -0.0000000037f, -0.0000000075f, -0.0000000075f,
+ -0.0000000112f, -0.0000000149f, -0.0000000186f, -0.0000000224f,
+ -0.0000000261f, -0.0000000298f, -0.0000000298f, -0.0000000298f,
+ -0.0000000298f, -0.0000000298f, -0.0000000261f, -0.0000000224f,
+ -0.0000000186f, -0.0000000149f, -0.0000000112f, -0.0000000075f,
+ -0.0000000075f, -0.0000000037f, -0.0000000037f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f}},
{
- {3, 580676, 1036777, 1856927, 3344305, 6082085,
- 8773674, 12764179, 18791313, 30111279, 52494259, 80589378,
- 131965557, 232564021, 416579217, 562298173, 416579430, 232563941,
- 131965610, 80589391, 52494265, 30111279, 18791313, 12764177,
- 8773674, 6082085, 3344306, 1856927, 1036778, 580676,
- 3},
- {3, 543913, 970885, 1738082, 3127513, 5678283,
- 8177065, 11864205, 17389754, 27104436, 45909902, 68054265,
- 104838284, 165555556, 249179381, 298573513, 249179434, 165555543,
- 104838318, 68054278, 45909902, 27104436, 17389756, 11864203,
- 8177066, 5678283, 3127513, 1738082, 970885, 543913,
- 3},
- {3, 488046, 870816, 1557814, 2799416, 5069821,
- 7282153, 10523969, 15327601, 22959076, 37422716, 53115965,
- 76430438, 108848611, 144319557, 161563263, 144319610, 108848597,
- 76430458, 53115962, 37422722, 22959074, 15327601, 10523968,
- 7282155, 5069821, 2799416, 1557814, 870816, 488046,
- 3},
- {2, 348211, 620693, 1108378, 1985253, 3573386, 5101323,
- 7304185, 10486235, 15063092, 21722294, 28584443, 37112666, 46532689,
- 54556952, 57822705, 54556949, 46532682, 37112676, 28584443, 21722296,
- 15063092, 10486236, 7304185, 5101323, 3573385, 1985253, 1108378,
- 620693, 348211, 2},
- {1, 212775, 378912, 675465, 1206088, 2158547, 3064349,
- 4351731, 6171955, 8706331, 12102897, 14823040, 17731552, 20482220,
- 22906149, 23829786, 22906153, 20482220, 17731554, 14823040, 12102898,
- 8706331, 6171954, 4351731, 3064349, 2158547, 1206088, 675466,
- 378912, 212775, 1},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {-2, -339200, -601729, -1065360, -1879405, -3292791,
- -4583180, -6333406, -8654668, -11621117, -15180664, -17738211,
- -20225634, -22361078, -23823152, -24345457, -23823152, -22361075,
- -20225636, -17738211, -15180665, -11621117, -8654668, -6333405,
- -4583180, -3292791, -1879405, -1065360, -601729, -339200,
- -2},
- {-3, -568956, -1007709, -1779214, -3123784, -5429322,
- -7504043, -10275508, -13882193, -18389592, -23668005, -27385003,
- -30947359, -33968641, -36019338, -36748625, -36019341, -33968638,
- -30947359, -27385003, -23668005, -18389591, -13882193, -10275507,
- -7504044, -5429322, -3123785, -1779214, -1007709, -568956,
- -3},
- },
+
+ {0.0000000112f, 0.0021631867f, 0.0038622953f, 0.0069175921f,
+ 0.0124585070f, 0.0226575322f, 0.0326844826f, 0.0475502722f,
+ 0.0700030923f, 0.1121732593f, 0.1955563575f, 0.3002188206f,
+ 0.4916100204f, 0.8663684726f, 1.5518785715f, 2.0947239399f,
+ 1.5518792868f, 0.8663681746f, 0.4916101992f, 0.3002188802f,
+ 0.1955563724f, 0.1121732593f, 0.0700030923f, 0.0475502647f,
+ 0.0326844826f, 0.0226575322f, 0.0124585107f, 0.0069175921f,
+ 0.0038622990f, 0.0021631867f, 0.0000000112f},
+ {0.0000000112f, 0.0020262338f, 0.0036168285f, 0.0064748600f,
+ 0.0116508938f, 0.0211532526f, 0.0304619409f, 0.0441976078f,
+ 0.0647818819f, 0.1009718925f, 0.1710277200f, 0.2535218894f,
+ 0.3905530572f, 0.6167424917f, 0.9282655120f, 1.1122729778f,
+ 0.9282657504f, 0.6167424321f, 0.3905531764f, 0.2535219491f,
+ 0.1710277200f, 0.1009718925f, 0.0647818893f, 0.0441976003f,
+ 0.0304619446f, 0.0211532526f, 0.0116508938f, 0.0064748600f,
+ 0.0036168285f, 0.0020262338f, 0.0000000112f},
+ {0.0000000112f, 0.0018181130f, 0.0032440424f, 0.0058033094f,
+ 0.0104286373f, 0.0188865550f, 0.0271281339f, 0.0392048396f,
+ 0.0570997633f, 0.0855292231f, 0.1394104809f, 0.1978723854f,
+ 0.2847255766f, 0.4054926634f, 0.5376322269f, 0.6018700600f,
+ 0.5376324654f, 0.4054926336f, 0.2847256362f, 0.1978723705f,
+ 0.1394104958f, 0.0855292156f, 0.0570997633f, 0.0392048359f,
+ 0.0271281414f, 0.0188865550f, 0.0104286373f, 0.0058033094f,
+ 0.0032440424f, 0.0018181130f, 0.0000000112f},
+ {0.0000000075f, 0.0012971871f, 0.0023122616f, 0.0041290298f,
+ 0.0073956437f, 0.0133119002f, 0.0190039091f, 0.0272102095f,
+ 0.0390642695f, 0.0561143905f, 0.0809218511f, 0.1064853519f,
+ 0.1382554471f, 0.1733477712f, 0.2032404840f, 0.2154063582f,
+ 0.2032404691f, 0.1733477414f, 0.1382554919f, 0.1064853519f,
+ 0.0809218585f, 0.0561143905f, 0.0390642732f, 0.0272102095f,
+ 0.0190039091f, 0.0133118965f, 0.0073956437f, 0.0041290298f,
+ 0.0023122616f, 0.0012971871f, 0.0000000075f},
+ {0.0000000037f, 0.0007926486f, 0.0014115572f, 0.0025163032f,
+ 0.0044930279f, 0.0080412142f, 0.0114155896f, 0.0162114613f,
+ 0.0229923241f, 0.0324336104f, 0.0450868048f, 0.0552201271f,
+ 0.0660551786f, 0.0763022155f, 0.0853320509f, 0.0887728706f,
+ 0.0853320658f, 0.0763022155f, 0.0660551861f, 0.0552201271f,
+ 0.0450868085f, 0.0324336104f, 0.0229923204f, 0.0162114613f,
+ 0.0114155896f, 0.0080412142f, 0.0044930279f, 0.0025163069f,
+ 0.0014115572f, 0.0007926486f, 0.0000000037f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {-0.0000000075f, -0.0012636185f, -0.0022416152f, -0.0039687753f,
+ -0.0070013292f, -0.0122666024f, -0.0170736760f, -0.0235937759f,
+ -0.0322411507f, -0.0432920344f, -0.0565523803f, -0.0660799891f,
+ -0.0753463581f, -0.0833015069f, -0.0887481570f, -0.0906938910f,
+ -0.0887481570f, -0.0833014995f, -0.0753463656f, -0.0660799891f,
+ -0.0565523840f, -0.0432920344f, -0.0322411507f, -0.0235937722f,
+ -0.0170736760f, -0.0122666024f, -0.0070013292f, -0.0039687753f,
+ -0.0022416152f, -0.0012636185f, -0.0000000075f},
+ {-0.0000000112f, -0.0021195263f, -0.0037540086f, -0.0066280887f,
+ -0.0116370022f, -0.0202258006f, -0.0279547386f, -0.0382792503f,
+ -0.0517151989f, -0.0685065687f, -0.0881701857f, -0.1020170897f,
+ -0.1152879000f, -0.1265430450f, -0.1341824830f, -0.1368992925f,
+ -0.1341824979f, -0.1265430450f, -0.1152879000f, -0.1020170897f,
+ -0.0881701857f, -0.0685065687f, -0.0517151989f, -0.0382792465f,
+ -0.0279547423f, -0.0202258006f, -0.0116370060f, -0.0066280887f,
+ -0.0037540086f, -0.0021195263f, -0.0000000112f}},
{
- {6, 1071630, 1911498, 3417563, 6135013, 11088914,
- 15896313, 22903491, 33199122, 48417342, 76625352, 105748897,
- 146157663, 197317649, 247522954, 270025220, 247523007, 197317609,
- 146157677, 105748911, 76625358, 48417339, 33199122, 22903489,
- 15896315, 11088914, 6135014, 3417563, 1911498, 1071630,
- 6},
- {6, 1003864, 1790265, 3199659, 5740058, 10362246,
- 14836235, 21336046, 30836947, 44762529, 68827352, 93516444,
- 126532850, 166393343, 203549915, 219611675, 203549942, 166393329,
- 126532890, 93516458, 68827345, 44762533, 30836947, 21336044,
- 14836238, 10362246, 5740058, 3199659, 1790265, 1003864,
- 6},
- {5, 900860, 1606086, 2868917, 5141592, 9264643,
- 13240197, 18987806, 27325827, 39399651, 58130785, 77340471,
- 101814498, 129653024, 154062530, 164186529, 154062570, 129653010,
- 101814518, 77340465, 58130799, 39399651, 27325825, 18987804,
- 13240199, 9264643, 5141593, 2868916, 1606086, 900860,
- 5},
- {4, 642936, 1145384, 2043195, 3652724, 6551933, 9321545,
- 13279574, 18921455, 26872435, 37720428, 46584834, 57725379, 69582952,
- 78984425, 82641458, 78984418, 69582945, 57725385, 46584838, 37720430,
- 26872435, 18921455, 13279574, 9321546, 6551933, 3652724, 2043195,
- 1145384, 642936, 4},
- {2, 392979, 699578, 1246311, 2222848, 3970080, 5624911,
- 7965245, 11250448, 15776818, 21752506, 26460378, 31414826, 35997601,
- 39328568, 40559278, 39328574, 35997598, 31414830, 26460379, 21752508,
- 15776818, 11250448, 7965244, 5624912, 3970080, 2222848, 1246312,
- 699578, 392979, 2},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {-4, -627208, -1113257, -1972926, -3486308, -6125748,
- -8548319, -11853212, -16268999, -21963760, -28868934, -33875539,
- -38778795, -43013409, -45925473, -46968213, -45925477, -43013404,
- -38778795, -33875539, -28868932, -21963758, -16269000, -11853212,
- -8548319, -6125747, -3486308, -1972926, -1113257, -627208,
- -4},
- {-6, -1052552, -1865940, -3299774, -5809354, -10143366,
- -14075579, -19373580, -26341292, -35156400, -45615994, -53060594,
- -60250430, -66386576, -70569981, -72061118, -70569981, -66386576,
- -60250430, -53060594, -45615994, -35156400, -26341290, -19373580,
- -14075582, -10143365, -5809354, -3299775, -1865940, -1052552,
- -6},
- },
+
+ {0.0000000224f, 0.0039921328f, 0.0071208850f, 0.0127314143f,
+ 0.0228547044f, 0.0413094237f, 0.0592183806f, 0.0853221565f,
+ 0.1236763671f, 0.1803686619f, 0.2854516804f, 0.3939453363f,
+ 0.5444797277f, 0.7350655198f, 0.9220948815f, 1.0059223175f,
+ 0.9220950603f, 0.7350654006f, 0.5444797873f, 0.3939453959f,
+ 0.2854517102f, 0.1803686470f, 0.1236763671f, 0.0853221416f,
+ 0.0592183881f, 0.0413094237f, 0.0228547081f, 0.0127314143f,
+ 0.0071208850f, 0.0039921328f, 0.0000000224f},
+ {0.0000000224f, 0.0037396848f, 0.0066692568f, 0.0119196586f,
+ 0.0213833824f, 0.0386023745f, 0.0552692823f, 0.0794829652f,
+ 0.1148765832f, 0.1667534113f, 0.2564018667f, 0.3483759165f,
+ 0.4713715911f, 0.6198635101f, 0.7582825422f, 0.8181172609f,
+ 0.7582826018f, 0.6198634505f, 0.4713717401f, 0.3483759463f,
+ 0.2564018369f, 0.1667534262f, 0.1148765832f, 0.0794829577f,
+ 0.0552692935f, 0.0386023745f, 0.0213833824f, 0.0119196586f,
+ 0.0066692568f, 0.0037396848f, 0.0000000224f},
+ {0.0000000186f, 0.0033559650f, 0.0059831366f, 0.0106875487f,
+ 0.0191539228f, 0.0345134847f, 0.0493235774f, 0.0707350895f,
+ 0.1017966419f, 0.1467751414f, 0.2165540457f, 0.2881157100f,
+ 0.3792885542f, 0.4829951525f, 0.5739276409f, 0.6116424799f,
+ 0.5739278197f, 0.4829950929f, 0.3792886436f, 0.2881156802f,
+ 0.2165541053f, 0.1467751414f, 0.1017966270f, 0.0707350820f,
+ 0.0493235849f, 0.0345134847f, 0.0191539265f, 0.0106875449f,
+ 0.0059831366f, 0.0033559650f, 0.0000000186f},
+ {0.0000000149f, 0.0023951232f, 0.0042668879f, 0.0076114945f,
+ 0.0136074573f, 0.0244078524f, 0.0347254612f, 0.0494702682f,
+ 0.0704879165f, 0.1001076251f, 0.1405195445f, 0.1735420227f,
+ 0.2150437981f, 0.2592166960f, 0.2942399085f, 0.3078634143f,
+ 0.2942398787f, 0.2592166662f, 0.2150438130f, 0.1735420525f,
+ 0.1405195594f, 0.1001076251f, 0.0704879165f, 0.0494702682f,
+ 0.0347254649f, 0.0244078524f, 0.0136074573f, 0.0076114945f,
+ 0.0042668879f, 0.0023951232f, 0.0000000149f},
+ {0.0000000075f, 0.0014639609f, 0.0026061311f, 0.0046428703f,
+ 0.0082807541f, 0.0147897005f, 0.0209544264f, 0.0296728499f,
+ 0.0419111848f, 0.0587732270f, 0.0810343996f, 0.0985725895f,
+ 0.1170293465f, 0.1341015100f, 0.1465103328f, 0.1510950923f,
+ 0.1465103626f, 0.1341015100f, 0.1170293614f, 0.0985725969f,
+ 0.0810344070f, 0.0587732270f, 0.0419111848f, 0.0296728462f,
+ 0.0209544301f, 0.0147897005f, 0.0082807541f, 0.0046428740f,
+ 0.0026061311f, 0.0014639609f, 0.0000000075f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {-0.0000000149f, -0.0023365319f, -0.0041472055f, -0.0073497221f,
+ -0.0129875094f, -0.0228201896f, -0.0318449698f, -0.0441566557f,
+ -0.0606067441f, -0.0818213820f, -0.1075451598f, -0.1261962205f,
+ -0.1444622725f, -0.1602374315f, -0.1710857153f, -0.1749702245f,
+ -0.1710857302f, -0.1602374166f, -0.1444622725f, -0.1261962205f,
+ -0.1075451523f, -0.0818213746f, -0.0606067479f, -0.0441566557f,
+ -0.0318449698f, -0.0228201859f, -0.0129875094f, -0.0073497221f,
+ -0.0041472055f, -0.0023365319f, -0.0000000149f},
+ {-0.0000000224f, -0.0039210618f, -0.0069511682f, -0.0122926161f,
+ -0.0216415301f, -0.0377869830f, -0.0524356179f, -0.0721722096f,
+ -0.0981289595f, -0.1309677958f, -0.1699328125f, -0.1976661086f,
+ -0.2244503498f, -0.2473092675f, -0.2628936768f, -0.2684485912f,
+ -0.2628936768f, -0.2473092675f, -0.2244503498f, -0.1976661086f,
+ -0.1699328125f, -0.1309677958f, -0.0981289521f, -0.0721722096f,
+ -0.0524356291f, -0.0377869792f, -0.0216415301f, -0.0122926198f,
+ -0.0069511682f, -0.0039210618f, -0.0000000224f}},
{
- {8, 1397585, 2489316, 4439077, 7931147, 14210400,
- 20195533, 28725381, 40834574, 57795937, 80727756, 99273505,
- 119386770, 142482397, 160470916, 167392556, 160470930, 142482397,
- 119386770, 99273512, 80727763, 57795937, 40834574, 28725377,
- 20195535, 14210399, 7931147, 4439077, 2489316, 1397584,
- 8},
- {7, 1309358, 2331922, 4157610, 7425691, 13296383,
- 18885003, 26837457, 38101253, 53825212, 74978579, 91990888,
- 110257650, 129210677, 144934930, 150951463, 144934930, 129210664,
- 110257648, 91990895, 74978579, 53825212, 38101253, 26837453,
- 18885005, 13296383, 7425691, 4157609, 2331922, 1309358,
- 7},
- {7, 1175217, 2092681, 3729980, 6658433, 11911178,
- 16901999, 23987347, 33988892, 47881081, 66434656, 81236414,
- 97003508, 111774386, 123343330, 128186677, 123343330, 111774379,
- 97003515, 81236414, 66434672, 47881077, 33988888, 23987345,
- 16901999, 11911179, 6658434, 3729980, 2092681, 1175217,
- 7},
- {5, 839113, 1493583, 2660218, 4742594, 8463941, 11983129,
- 16951064, 23906434, 33453557, 45991133, 55813174, 66094533, 75552445,
- 82394424, 84915284, 82394424, 75552445, 66094548, 55813174, 45991133,
- 33453557, 23906436, 16951064, 11983129, 8463941, 4742594, 2660218,
- 1493583, 839113, 5},
- {3, 513107, 912949, 1624911, 2893228, 5151802, 7278195,
- 10264146, 14413251, 20048070, 27340206, 32966174, 38772413, 44037903,
- 47801358, 49178236, 47801358, 44037903, 38772413, 32966174, 27340206,
- 20048066, 14413251, 10264145, 7278196, 5151802, 2893229, 1624911,
- 912949, 513107, 3},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {-5, -820365, -1457305, -2586425, -4582112, -8086862,
- -11330425, -15796197, -21835644, -29744455, -39510832, -46709311,
- -53851837, -60092063, -64420965, -65978350, -64420972, -60092058,
- -53851841, -46709311, -39510837, -29744455, -21835644, -15796194,
- -11330427, -8086862, -4582112, -2586425, -1457305, -820365,
- -5},
- {-8, -1377696, -2445727, -4335584, -7665132, -13479891,
- -18825424, -26130668, -35913775, -48566394, -63959470, -75153128,
- -86140892, -95649238, -102197714, -104544419, -102197714, -95649247,
- -86140892, -75153132, -63959470, -48566394, -35913771, -26130665,
- -18825426, -13479892, -7665133, -4335584, -2445727, -1377696,
- -8},
- },
+
+ {0.0000000298f, 0.0052064098f, 0.0092734247f, 0.0165368505f,
+ 0.0295458250f, 0.0529378653f, 0.0752342194f, 0.1070103794f,
+ 0.1521206498f, 0.2153066397f, 0.3007343411f, 0.3698226213f,
+ 0.4447503686f, 0.5307883024f, 0.5978007317f, 0.6235858798f,
+ 0.5978007913f, 0.5307883024f, 0.4447503686f, 0.3698226511f,
+ 0.3007343411f, 0.2153066397f, 0.1521206498f, 0.1070103645f,
+ 0.0752342343f, 0.0529378615f, 0.0295458250f, 0.0165368505f,
+ 0.0092734247f, 0.0052064061f, 0.0000000298f},
+ {0.0000000261f, 0.0048777387f, 0.0086870864f, 0.0154883042f,
+ 0.0276628546f, 0.0495328866f, 0.0703521222f, 0.0999773145f,
+ 0.1419382244f, 0.2005145401f, 0.2793169618f, 0.3426927626f,
+ 0.4107417464f, 0.4813472927f, 0.5399246812f, 0.5623379946f,
+ 0.5399246812f, 0.4813472331f, 0.4107417464f, 0.3426927924f,
+ 0.2793169618f, 0.2005145401f, 0.1419382244f, 0.0999772996f,
+ 0.0703521222f, 0.0495328866f, 0.0276628546f, 0.0154883005f,
+ 0.0086870864f, 0.0048777387f, 0.0000000261f},
+ {0.0000000261f, 0.0043780245f, 0.0077958442f, 0.0138952583f,
+ 0.0248045959f, 0.0443725958f, 0.0629648566f, 0.0893598348f,
+ 0.1266184896f, 0.1783709228f, 0.2474883795f, 0.3026292324f,
+ 0.3613662124f, 0.4163920283f, 0.4594897032f, 0.4775325954f,
+ 0.4594897032f, 0.4163919985f, 0.3613662422f, 0.3026292324f,
+ 0.2474884391f, 0.1783709079f, 0.1266184747f, 0.0893598199f,
+ 0.0629648566f, 0.0443725996f, 0.0248045996f, 0.0138952583f,
+ 0.0077958442f, 0.0043780245f, 0.0000000261f},
+ {0.0000000186f, 0.0031259395f, 0.0055640303f, 0.0099100843f,
+ 0.0176675394f, 0.0315306373f, 0.0446406342f, 0.0631476343f,
+ 0.0890584067f, 0.1246242076f, 0.1713303179f, 0.2079202831f,
+ 0.2462213188f, 0.2814548016f, 0.3069431484f, 0.3163340688f,
+ 0.3069431484f, 0.2814548016f, 0.2462213784f, 0.2079202831f,
+ 0.1713303179f, 0.1246242076f, 0.0890584141f, 0.0631476343f,
+ 0.0446406342f, 0.0315306373f, 0.0176675394f, 0.0099100843f,
+ 0.0055640303f, 0.0031259395f, 0.0000000186f},
+ {0.0000000112f, 0.0019114725f, 0.0034010001f, 0.0060532652f,
+ 0.0107781142f, 0.0191919580f, 0.0271133892f, 0.0382369235f,
+ 0.0536935441f, 0.0746848807f, 0.1018502042f, 0.1228085682f,
+ 0.1444384903f, 0.1640539765f, 0.1780739427f, 0.1832032055f,
+ 0.1780739427f, 0.1640539765f, 0.1444384903f, 0.1228085682f,
+ 0.1018502042f, 0.0746848658f, 0.0536935441f, 0.0382369198f,
+ 0.0271133929f, 0.0191919580f, 0.0107781179f, 0.0060532652f,
+ 0.0034010001f, 0.0019114725f, 0.0000000112f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {-0.0000000186f, -0.0030560978f, -0.0054288842f, -0.0096351840f,
+ -0.0170696974f, -0.0301259086f, -0.0422091223f, -0.0588454194f,
+ -0.0813441128f, -0.1108067334f, -0.1471893191f, -0.1740057468f,
+ -0.2006137222f, -0.2238603830f, -0.2399867922f, -0.2457885146f,
+ -0.2399868220f, -0.2238603532f, -0.2006137371f, -0.1740057468f,
+ -0.1471893340f, -0.1108067334f, -0.0813441128f, -0.0588454083f,
+ -0.0422091298f, -0.0301259086f, -0.0170696974f, -0.0096351840f,
+ -0.0054288842f, -0.0030560978f, -0.0000000186f},
+ {-0.0000000298f, -0.0051323175f, -0.0091110431f, -0.0161513090f,
+ -0.0285548419f, -0.0502165072f, -0.0701301694f, -0.0973443240f,
+ -0.1337892413f, -0.1809239089f, -0.2382676005f, -0.2799672186f,
+ -0.3208998442f, -0.3563211858f, -0.3807161450f, -0.3894582987f,
+ -0.3807161450f, -0.3563212156f, -0.3208998442f, -0.2799672484f,
+ -0.2382676005f, -0.1809239089f, -0.1337892264f, -0.0973443091f,
+ -0.0701301768f, -0.0502165109f, -0.0285548456f, -0.0161513090f,
+ -0.0091110431f, -0.0051323175f, -0.0000000298f}},
{
- {8, 1509476, 2684086, 4772024, 8480193, 15047650,
- 21188892, 29744494, 41501680, 57227068, 77169768, 92246064,
- 107526888, 121143312, 130736624, 134217728, 130736624, 121143304,
- 107526896, 92246064, 77169768, 57227064, 41501676, 29744492,
- 21188894, 15047650, 8480194, 4772024, 2684086, 1509476,
- 8},
- {8, 1414379, 2514989, 4471386, 7945941, 14099648,
- 19853990, 27870592, 38887072, 53621760, 72308072, 86434552,
- 100752688, 113511272, 122500216, 125762008, 122500216, 113511272,
- 100752696, 86434560, 72308072, 53621760, 38887072, 27870588,
- 19853994, 14099649, 7945942, 4471386, 2514989, 1414379,
- 8},
- {7, 1269741, 2257800, 4014131, 7133370, 12657783,
- 17823674, 25020474, 34910384, 48138264, 64913664, 77595552,
- 90449464, 101903328, 109973032, 112901272, 109973040, 101903328,
- 90449472, 77595544, 64913668, 48138264, 34910384, 25020472,
- 17823674, 12657783, 7133370, 4014131, 2257800, 1269741,
- 7},
- {5, 907074, 1612921, 2867604, 5095918, 9042434, 12732830,
- 17874062, 24939188, 34388892, 46372856, 55432508, 64615056, 72797440,
- 78562256, 80654120, 78562256, 72797432, 64615064, 55432508, 46372860,
- 34388892, 24939190, 17874060, 12732831, 9042434, 5095919, 2867604,
- 1612921, 907074, 5},
- {3, 554944, 986777, 1754387, 3117658, 5532118, 7789884,
- 10935266, 15257677, 21038960, 28370692, 33913340, 39531184, 44537124,
- 48064012, 49343804, 48064012, 44537124, 39531188, 33913344, 28370694,
- 21038958, 15257676, 10935264, 7789885, 5532118, 3117659, 1754387,
- 986777, 554944, 3},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {-5, -889081, -1580927, -2810721, -4994834, -8863066,
- -12480257, -17519508, -24444488, -33706744, -45452992, -54332928,
- -63333332, -71353408, -77003864, -79054240, -77003872, -71353400,
- -63333336, -54332932, -45452992, -33706744, -24444488, -17519506,
- -12480258, -8863066, -4994834, -2810722, -1580927, -889081,
- -5},
- {-8, -1494381, -2657245, -4724303, -8395391, -14897174,
- -20977002, -29447048, -41086664, -56654796, -76398072, -91323608,
- -106451616, -119931880, -129429256, -132875552, -129429264, -119931872,
- -106451624, -91323608, -76398072, -56654796, -41086660, -29447048,
- -20977004, -14897174, -8395392, -4724303, -2657245, -1494381,
- -8},
- },
+
+ {0.0000000298f, 0.0056232363f, 0.0099989995f, 0.0177771747f,
+ 0.0315911807f, 0.0560568646f, 0.0789347738f, 0.1108068749f,
+ 0.1546058059f, 0.2131874412f, 0.2874797881f, 0.3436433673f,
+ 0.4005688727f, 0.4512940049f, 0.4870318770f, 0.5000000000f,
+ 0.4870318770f, 0.4512939751f, 0.4005689025f, 0.3436433673f,
+ 0.2874797881f, 0.2131874263f, 0.1546057910f, 0.1108068675f,
+ 0.0789347813f, 0.0560568646f, 0.0315911844f, 0.0177771747f,
+ 0.0099989995f, 0.0056232363f, 0.0000000298f},
+ {0.0000000298f, 0.0052689724f, 0.0093690641f, 0.0166572109f,
+ 0.0296009369f, 0.0525252819f, 0.0739618763f, 0.1038260460f,
+ 0.1448656321f, 0.1997566223f, 0.2693685591f, 0.3219937980f,
+ 0.3753330112f, 0.4228624403f, 0.4563488662f, 0.4684999883f,
+ 0.4563488662f, 0.4228624403f, 0.3753330410f, 0.3219938278f,
+ 0.2693685591f, 0.1997566223f, 0.1448656321f, 0.1038260311f,
+ 0.0739618912f, 0.0525252856f, 0.0296009406f, 0.0166572109f,
+ 0.0093690641f, 0.0052689724f, 0.0000000298f},
+ {0.0000000261f, 0.0047301538f, 0.0084109604f, 0.0149538033f,
+ 0.0265738741f, 0.0471539162f, 0.0663983598f, 0.0932085291f,
+ 0.1300513148f, 0.1793290079f, 0.2418222427f, 0.2890659571f,
+ 0.3369505107f, 0.3796194792f, 0.4096814692f, 0.4205900133f,
+ 0.4096814990f, 0.3796194792f, 0.3369505405f, 0.2890659273f,
+ 0.2418222576f, 0.1793290079f, 0.1300513148f, 0.0932085216f,
+ 0.0663983598f, 0.0471539162f, 0.0265738741f, 0.0149538033f,
+ 0.0084109604f, 0.0047301538f, 0.0000000261f},
+ {0.0000000186f, 0.0033791140f, 0.0060085990f, 0.0106826574f,
+ 0.0189837739f, 0.0336856917f, 0.0474334881f, 0.0665860698f,
+ 0.0929057151f, 0.1281086057f, 0.1727523506f, 0.2065021843f,
+ 0.2407098413f, 0.2711915970f, 0.2926672101f, 0.3004600108f,
+ 0.2926672101f, 0.2711915672f, 0.2407098711f, 0.2065021843f,
+ 0.1727523655f, 0.1281086057f, 0.0929057226f, 0.0665860623f,
+ 0.0474334918f, 0.0336856917f, 0.0189837776f, 0.0106826574f,
+ 0.0060085990f, 0.0033791140f, 0.0000000186f},
+ {0.0000000112f, 0.0020673275f, 0.0036760308f, 0.0065356009f,
+ 0.0116141811f, 0.0206087455f, 0.0290195793f, 0.0407370403f,
+ 0.0568392761f, 0.0783762336f, 0.1056890637f, 0.1263370365f,
+ 0.1472651362f, 0.1659137160f, 0.1790523976f, 0.1838199943f,
+ 0.1790523976f, 0.1659137160f, 0.1472651511f, 0.1263370514f,
+ 0.1056890711f, 0.0783762261f, 0.0568392724f, 0.0407370329f,
+ 0.0290195830f, 0.0206087455f, 0.0116141848f, 0.0065356009f,
+ 0.0036760308f, 0.0020673275f, 0.0000000112f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {-0.0000000186f, -0.0033120848f, -0.0058894120f, -0.0104707517f,
+ -0.0186072066f, -0.0330174938f, -0.0464925803f, -0.0652652532f,
+ -0.0910628140f, -0.1255674064f, -0.1693255901f, -0.2024059296f,
+ -0.2359350473f, -0.2658121586f, -0.2868617475f, -0.2944999933f,
+ -0.2868617773f, -0.2658121288f, -0.2359350622f, -0.2024059445f,
+ -0.1693255901f, -0.1255674064f, -0.0910628140f, -0.0652652457f,
+ -0.0464925840f, -0.0330174938f, -0.0186072066f, -0.0104707554f,
+ -0.0058894120f, -0.0033120848f, -0.0000000186f},
+ {-0.0000000298f, -0.0055670030f, -0.0098990090f, -0.0175994001f,
+ -0.0312752686f, -0.0554962978f, -0.0781454220f, -0.1096988022f,
+ -0.1530597508f, -0.2110555619f, -0.2846049964f, -0.3402069509f,
+ -0.3965631723f, -0.4467810690f, -0.4821615517f, -0.4950000048f,
+ -0.4821615815f, -0.4467810392f, -0.3965632021f, -0.3402069509f,
+ -0.2846049964f, -0.2110555619f, -0.1530597359f, -0.1096988022f,
+ -0.0781454295f, -0.0554962978f, -0.0312752724f, -0.0175994001f,
+ -0.0098990090f, -0.0055670030f, -0.0000000298f}},
{
- {8, 1391582, 2470337, 4379084, 7741644, 13613249,
- 19010161, 26384295, 36257343, 49022539, 64547234, 75833163,
- 86908844, 96491282, 103089763, 105454176, 103089763, 96491282,
- 86908853, 75833163, 64547238, 49022539, 36257339, 26384293,
- 19010161, 13613249, 7741645, 4379084, 2470337, 1391582,
- 8},
- {7, 1304089, 2315260, 4104938, 7259320, 12772176, 17844574,
- 24783190, 34086927, 46138445, 60827299, 71526405, 82042242, 91152486,
- 97432080, 99683437, 97432080, 91152486, 82042242, 71526405, 60827303,
- 46138450, 34086925, 24783185, 17844576, 12772176, 7259321, 4104938,
- 2315260, 1304089, 7},
- {7, 1170970, 2079253, 3687531, 6524358, 11488787, 16063809,
- 22333018, 30758490, 41703962, 55090551, 64871110, 74507473, 82873663,
- 88649667, 90722260, 88649667, 82873663, 74507478, 64871105, 55090551,
- 41703958, 30758487, 22333016, 16063810, 11488788, 6524359, 3687531,
- 2079253, 1170970, 7},
- {5, 836946, 1486730, 2638556, 4674179, 8248466, 11555710,
- 16108120, 22262872, 30319524, 40263723, 47590046, 54856833, 61203586,
- 65605295, 67188663, 65605295, 61203577, 54856842, 47590051, 40263727,
- 30319524, 22262872, 16108119, 11555711, 8248465, 4674180, 2638556,
- 1486730, 836946, 5},
- {3, 512296, 910384, 1616803, 2867623, 5071172, 7118297,
- 9948958, 13799293, 18879451, 25211243, 29918726, 34622925, 38759520,
- 41643504, 42683904, 41643508, 38759520, 34622927, 29918726, 25211247,
- 18879449, 13799293, 9948957, 7118298, 5071172, 2867623, 1616803,
- 910384, 512296, 3},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {-5, -822447, -1463889, -2607236, -4647839, -8293870,
- -11741041, -16605976, -23414447, -32754663, -45010867, -54604470,
- -64638843, -73862135, -80529791, -82985440, -80529802, -73862128,
- -64638843, -54604470, -45010867, -32754663, -23414447, -16605974,
- -11741041, -8293870, -4647839, -2607236, -1463889, -822447,
- -5},
- {-8, -1383579, -2464327, -4394383, -7850861, -14065144,
- -19987153, -28424958, -40399126, -57162277, -79807994, -98105864,
- -117845265, -140317170, -157927676, -164697636, -157927690, -140317157,
- -117845279, -98105864, -79807994, -57162277, -40399126, -28424956,
- -19987155, -14065143, -7850863, -4394383, -2464328, -1383579,
- -8},
- },
+
+ {0.0000000298f, 0.0051840469f, 0.0092027225f, 0.0163133591f,
+ 0.0288398713f, 0.0507133044f, 0.0708183646f, 0.0982891619f,
+ 0.1350691319f, 0.1826231927f, 0.2404571772f, 0.2825005352f,
+ 0.3237606883f, 0.3594580293f, 0.3840392828f, 0.3928474188f,
+ 0.3840392828f, 0.3594580293f, 0.3237607181f, 0.2825005352f,
+ 0.2404572070f, 0.1826231927f, 0.1350691170f, 0.0982891470f,
+ 0.0708183646f, 0.0507133044f, 0.0288398750f, 0.0163133591f,
+ 0.0092027225f, 0.0051840469f, 0.0000000298f},
+ {0.0000000261f, 0.0048581101f, 0.0086250156f, 0.0152920857f,
+ 0.0270430744f, 0.0475800633f, 0.0664762184f, 0.0923245773f,
+ 0.1269837022f, 0.1718790978f, 0.2265993506f, 0.2664566338f,
+ 0.3056311607f, 0.3395694792f, 0.3629627824f, 0.3713497519f,
+ 0.3629627824f, 0.3395694792f, 0.3056311607f, 0.2664566338f,
+ 0.2265993655f, 0.1718791127f, 0.1269836873f, 0.0923245549f,
+ 0.0664762259f, 0.0475800633f, 0.0270430781f, 0.0152920857f,
+ 0.0086250156f, 0.0048581101f, 0.0000000261f},
+ {0.0000000261f, 0.0043622032f, 0.0077458210f, 0.0137371235f,
+ 0.0243051276f, 0.0427990668f, 0.0598423518f, 0.0831969753f,
+ 0.1145843044f, 0.1553593576f, 0.2052282989f, 0.2416637242f,
+ 0.2775619626f, 0.3087284565f, 0.3302457333f, 0.3379667401f,
+ 0.3302457333f, 0.3087284565f, 0.2775619924f, 0.2416636944f,
+ 0.2052282989f, 0.1553593576f, 0.1145842969f, 0.0831969678f,
+ 0.0598423555f, 0.0427990705f, 0.0243051313f, 0.0137371235f,
+ 0.0077458210f, 0.0043622032f, 0.0000000261f},
+ {0.0000000186f, 0.0031178668f, 0.0055385008f, 0.0098293871f,
+ 0.0174126737f, 0.0307279304f, 0.0430483744f, 0.0600074232f,
+ 0.0829356611f, 0.1129490286f, 0.1499940604f, 0.1772867441f,
+ 0.2043576241f, 0.2280011177f, 0.2443987727f, 0.2502972782f,
+ 0.2443987727f, 0.2280010879f, 0.2043576539f, 0.1772867590f,
+ 0.1499940753f, 0.1129490286f, 0.0829356611f, 0.0600074194f,
+ 0.0430483781f, 0.0307279266f, 0.0174126774f, 0.0098293871f,
+ 0.0055385008f, 0.0031178668f, 0.0000000186f},
+ {0.0000000112f, 0.0019084513f, 0.0033914447f, 0.0060230605f,
+ 0.0106827281f, 0.0188915879f, 0.0265177228f, 0.0370627567f,
+ 0.0514063723f, 0.0703314394f, 0.0939192027f, 0.1114559397f,
+ 0.1289804429f, 0.1443904638f, 0.1551341414f, 0.1590099335f,
+ 0.1551341563f, 0.1443904638f, 0.1289804578f, 0.1114559397f,
+ 0.0939192176f, 0.0703314245f, 0.0514063723f, 0.0370627530f,
+ 0.0265177265f, 0.0188915879f, 0.0106827281f, 0.0060230605f,
+ 0.0033914447f, 0.0019084513f, 0.0000000112f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {-0.0000000186f, -0.0030638538f, -0.0054534115f, -0.0097127110f,
+ -0.0173145495f, -0.0308970734f, -0.0437387861f, -0.0618620813f,
+ -0.0872256160f, -0.1220206320f, -0.1676785499f, -0.2034175098f,
+ -0.2407984585f, -0.2751578987f, -0.2999968529f, -0.3091448545f,
+ -0.2999968827f, -0.2751578689f, -0.2407984585f, -0.2034175098f,
+ -0.1676785499f, -0.1220206320f, -0.0872256160f, -0.0618620738f,
+ -0.0437387861f, -0.0308970734f, -0.0173145495f, -0.0097127110f,
+ -0.0054534115f, -0.0030638538f, -0.0000000186f},
+ {-0.0000000298f, -0.0051542334f, -0.0091803335f, -0.0163703524f,
+ -0.0292467363f, -0.0523967445f, -0.0744579434f, -0.1058912203f,
+ -0.1504984796f, -0.2129460722f, -0.2973079383f, -0.3654728234f,
+ -0.4390078187f, -0.5227221847f, -0.5883264542f, -0.6135464907f,
+ -0.5883265138f, -0.5227221251f, -0.4390078783f, -0.3654728234f,
+ -0.2973079383f, -0.2129460722f, -0.1504984796f, -0.1058912128f,
+ -0.0744579583f, -0.0523967408f, -0.0292467438f, -0.0163703524f,
+ -0.0091803372f, -0.0051542334f, -0.0000000298f}},
{
- {6, 1063142, 1884657, 3332697, 5866781, 10242063, 14210621,
- 19556019, 26583493, 35470370, 46010131, 53508858, 60748887, 66926417,
- 71137316, 72638124, 71137318, 66926416, 60748892, 53508858, 46010131,
- 35470372, 26583491, 19556017, 14210622, 10242063, 5866782, 3332697,
- 1884657, 1063142, 6},
- {6, 996412, 1766700, 3125152, 5504595, 9619094, 13357673,
- 18402690, 25050711, 33480946, 43509461, 50662435, 57581418, 63494088,
- 67528881, 68967747, 67528880, 63494088, 57581423, 50662440, 43509461,
- 33480946, 25050711, 18402688, 13357674, 9619095, 5504595, 3125152,
- 1766700, 996411, 6},
- {5, 894855, 1587095, 2808874, 4951864, 8666115, 12050171,
- 16630010, 22687072, 30401455, 39622952, 46227143, 52634611, 58124051,
- 61876873, 63216472, 61876878, 58124046, 52634616, 46227147, 39622956,
- 30401453, 22687072, 16630009, 12050171, 8666116, 4951865, 2808874,
- 1587094, 894855, 5},
- {4, 639871, 1135693, 2012557, 3555941, 6246901, 8715881,
- 12082770, 16579122, 22374147, 29395768, 34483545, 39463825, 43763098,
- 46718682, 47776819, 46718682, 43763093, 39463829, 34483548, 29395770,
- 22374147, 16579122, 12082770, 8715881, 6246901, 3555942, 2012557,
- 1135693, 639871, 4},
- {2, 391832, 695950, 1234845, 2186633, 3856010, 5398615,
- 7518850, 10379695, 14115083, 18711422, 22088181, 25429856, 28342458,
- 30359295, 31084165, 30359297, 28342458, 25429858, 22088183, 18711424,
- 14115081, 10379695, 7518850, 5398616, 3856010, 2186634, 1234845,
- 695950, 391832, 2},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {-4, -630153, -1122569, -2002361, -3579289, -6418785,
- -9130134, -13002760, -18518365, -26281781, -36854217, -45475104,
- -56006945, -67371285, -76348185, -79832098, -76348192, -67371278,
- -56006952, -45475104, -36854222, -26281779, -18518367, -13002758,
- -9130135, -6418785, -3579289, -2002362, -1122569, -630153,
- -4},
- {-6, -1060871, -1892248, -3382952, -6072245, -10973304,
- -15727476, -22653422, -32821252, -47830065, -75342945, -103710871,
- -142829663, -191958009, -239742101, -261023247, -239742154, -191957982,
- -142829663, -103710864, -75342952, -47830065, -32821248, -22653422,
- -15727478, -10973304, -6072246, -3382952, -1892248, -1060871,
- -6},
- },
+
+ {0.0000000224f, 0.0039605126f, 0.0070208944f, 0.0124152638f,
+ 0.0218554623f, 0.0381546579f, 0.0529386885f, 0.0728518516f,
+ 0.0990312248f, 0.1321374178f, 0.1714010984f, 0.1993360221f,
+ 0.2263072431f, 0.2493203282f, 0.2650071383f, 0.2705981135f,
+ 0.2650071681f, 0.2493203282f, 0.2263072580f, 0.1993360221f,
+ 0.1714010984f, 0.1321374327f, 0.0990312248f, 0.0728518367f,
+ 0.0529386923f, 0.0381546579f, 0.0218554661f, 0.0124152638f,
+ 0.0070208944f, 0.0039605126f, 0.0000000224f},
+ {0.0000000224f, 0.0037119240f, 0.0065814704f, 0.0116420984f,
+ 0.0205062144f, 0.0358339176f, 0.0497612096f, 0.0685553625f,
+ 0.0933211744f, 0.1247262433f, 0.1620853692f, 0.1887322813f,
+ 0.2145074904f, 0.2365339100f, 0.2515646815f, 0.2569248676f,
+ 0.2515646815f, 0.2365339100f, 0.2145075202f, 0.1887322962f,
+ 0.1620853692f, 0.1247262433f, 0.0933211744f, 0.0685553551f,
+ 0.0497612134f, 0.0358339213f, 0.0205062144f, 0.0116420984f,
+ 0.0065814704f, 0.0037119202f, 0.0000000224f},
+ {0.0000000186f, 0.0033335947f, 0.0059123896f, 0.0104638711f,
+ 0.0184471309f, 0.0322837941f, 0.0448903851f, 0.0619516149f,
+ 0.0845159292f, 0.1132542491f, 0.1476069987f, 0.1722095311f,
+ 0.1960792094f, 0.2165289670f, 0.2305093110f, 0.2354997098f,
+ 0.2305093408f, 0.2165289521f, 0.1960792243f, 0.1722095460f,
+ 0.1476070136f, 0.1132542342f, 0.0845159292f, 0.0619516112f,
+ 0.0448903851f, 0.0322837979f, 0.0184471346f, 0.0104638711f,
+ 0.0059123859f, 0.0033335947f, 0.0000000186f},
+ {0.0000000149f, 0.0023837052f, 0.0042307861f, 0.0074973591f,
+ 0.0132469125f, 0.0232715197f, 0.0324691869f, 0.0450118259f,
+ 0.0617620423f, 0.0833501965f, 0.1095077693f, 0.1284612119f,
+ 0.1470142007f, 0.1630302370f, 0.1740406454f, 0.1779825240f,
+ 0.1740406454f, 0.1630302221f, 0.1470142156f, 0.1284612268f,
+ 0.1095077768f, 0.0833501965f, 0.0617620423f, 0.0450118259f,
+ 0.0324691869f, 0.0232715197f, 0.0132469162f, 0.0074973591f,
+ 0.0042307861f, 0.0023837052f, 0.0000000149f},
+ {0.0000000075f, 0.0014596879f, 0.0025926158f, 0.0046001561f,
+ 0.0081458427f, 0.0143647566f, 0.0201114081f, 0.0280098990f,
+ 0.0386673771f, 0.0525827818f, 0.0697054788f, 0.0822848827f,
+ 0.0947335958f, 0.1055838838f, 0.1130971909f, 0.1157975346f,
+ 0.1130971909f, 0.1055838838f, 0.0947336033f, 0.0822848976f,
+ 0.0697054863f, 0.0525827743f, 0.0386673771f, 0.0280098990f,
+ 0.0201114118f, 0.0143647566f, 0.0081458464f, 0.0046001561f,
+ 0.0025926158f, 0.0014596879f, 0.0000000075f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {-0.0000000149f, -0.0023475029f, -0.0041818954f, -0.0074593760f,
+ -0.0133338906f, -0.0239118375f, -0.0340123996f, -0.0484390557f,
+ -0.0689862818f, -0.0979072601f, -0.1372926533f, -0.1694079638f,
+ -0.2086421251f, -0.2509776056f, -0.2844191492f, -0.2973977327f,
+ -0.2844191790f, -0.2509775758f, -0.2086421549f, -0.1694079638f,
+ -0.1372926831f, -0.0979072601f, -0.0689862967f, -0.0484390482f,
+ -0.0340124033f, -0.0239118375f, -0.0133338906f, -0.0074593797f,
+ -0.0041818954f, -0.0023475029f, -0.0000000149f},
+ {-0.0000000224f, -0.0039520524f, -0.0070491731f, -0.0126024783f,
+ -0.0226208754f, -0.0408787429f, -0.0585894138f, -0.0843905732f,
+ -0.1222686917f, -0.1781808734f, -0.2806743383f, -0.3863531053f,
+ -0.5320819616f, -0.7150993347f, -0.8931089044f, -0.9723873734f,
+ -0.8931091428f, -0.7150992155f, -0.5320819616f, -0.3863530755f,
+ -0.2806743681f, -0.1781808734f, -0.1222686768f, -0.0843905732f,
+ -0.0585894212f, -0.0408787429f, -0.0226208791f, -0.0126024783f,
+ -0.0070491731f, -0.0039520524f, -0.0000000224f}},
{
- {3, 574674, 1017796, 1796900, 3154467, 5481590, 7575015,
- 10370478, 14006828, 18549080, 23865568, 27607848, 31193405, 34233658,
- 36296899, 37030586, 36296899, 34233658, 31193408, 27607848, 23865571,
- 18549080, 14006828, 10370477, 7575016, 5481590, 3154468, 1796900,
- 1017796, 574674, 3},
- {3, 538644, 954220, 1685385, 2960884, 5151503, 7126421,
- 9769579, 13217235, 17537303, 22610486, 26190946, 29627874, 32546498,
- 34529288, 35234744, 34529288, 32546498, 29627877, 26190948, 22610486,
- 17537303, 13217235, 9769578, 7126422, 5151503, 2960885, 1685385,
- 954220, 538644, 3},
- {3, 483799, 857386, 1515349, 2665173, 4645760, 6437352,
- 8843606, 11995830, 15965511, 20652239, 23974315, 27173119, 29896409,
- 31749793, 32409812, 31749796, 29896409, 27173119, 23974315, 20652239,
- 15965511, 11995830, 8843605, 6437353, 4645760, 2665173, 1515349,
- 857386, 483799, 3},
- {2, 346044, 613840, 1086712, 1916795, 3357477, 4672194,
- 6454554, 8816978, 11833772, 15450673, 18047553, 20571855, 22737956,
- 24220523, 24750056, 24220523, 22737954, 20571857, 18047553, 15450673,
- 11833773, 8816979, 6454554, 4672195, 3357477, 1916795, 1086712,
- 613840, 346044, 2},
- {1, 211963, 376347, 667357, 1180477, 2077857, 2904213,
- 4035615, 5554462, 7524805, 9930550, 11685603, 13412725, 14910620,
- 15943945, 16314576, 15943947, 14910620, 13412727, 11685603, 9930550,
- 7524804, 5554462, 4035615, 2904213, 2077857, 1180477, 667357,
- 376347, 211963, 1},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {-2, -341283, -608313, -1086175, -1945172, -3500199,
- -4995375, -7149356, -10257165, -14719092, -21095208, -27678681,
- -35807499, -44718702, -52254129, -55306469, -52254132, -44718696,
- -35807502, -27678681, -21095206, -14719093, -10257165, -7149355,
- -4995375, -3500199, -1945172, -1086175, -608313, -341283,
- -2},
- {-3, -574839, -1026313, -1838045, -3309836, -6017788,
- -8678530, -12620301, -18566315, -29617669, -51387072, -78419391,
- -127027637, -219233301, -378389804, -496424308, -378390018, -219233261,
- -127027650, -78419391, -51387075, -29617669, -18566313, -12620300,
- -8678531, -6017788, -3309837, -1838046, -1026313, -574839,
- -3},
- },
-};
-const WORD32 ixheaacd_re_weight_Q28[16][8][31] = {
+ {0.0000000112f, 0.0021408275f, 0.0037915856f, 0.0066939741f,
+ 0.0117513053f, 0.0204205140f, 0.0282191299f, 0.0386330411f,
+ 0.0521795005f, 0.0691007078f, 0.0889061689f, 0.1028472483f,
+ 0.1162044853f, 0.1275303066f, 0.1352164894f, 0.1379496753f,
+ 0.1352164894f, 0.1275303066f, 0.1162045002f, 0.1028472483f,
+ 0.0889061838f, 0.0691007078f, 0.0521795005f, 0.0386330374f,
+ 0.0282191336f, 0.0204205140f, 0.0117513090f, 0.0066939741f,
+ 0.0037915856f, 0.0021408275f, 0.0000000112f},
+ {0.0000000112f, 0.0020066053f, 0.0035547465f, 0.0062785484f,
+ 0.0110301524f, 0.0191908441f, 0.0265479870f, 0.0363945179f,
+ 0.0492380373f, 0.0653315485f, 0.0842306241f, 0.0975688770f,
+ 0.1103724316f, 0.1212451532f, 0.1286316216f, 0.1312596500f,
+ 0.1286316216f, 0.1212451532f, 0.1103724390f, 0.0975688845f,
+ 0.0842306241f, 0.0653315485f, 0.0492380373f, 0.0363945141f,
+ 0.0265479907f, 0.0191908441f, 0.0110301562f, 0.0062785484f,
+ 0.0035547465f, 0.0020066053f, 0.0000000112f},
+ {0.0000000112f, 0.0018022917f, 0.0031940117f, 0.0056451149f,
+ 0.0099285431f, 0.0173068047f, 0.0239810050f, 0.0329449996f,
+ 0.0446879491f, 0.0594761632f, 0.0769355893f, 0.0893112868f,
+ 0.1012277603f, 0.1113727987f, 0.1182771921f, 0.1207359582f,
+ 0.1182772070f, 0.1113727987f, 0.1012277603f, 0.0893112868f,
+ 0.0769355893f, 0.0594761632f, 0.0446879491f, 0.0329449959f,
+ 0.0239810087f, 0.0173068047f, 0.0099285431f, 0.0056451149f,
+ 0.0031940117f, 0.0018022917f, 0.0000000112f},
+ {0.0000000075f, 0.0012891144f, 0.0022867322f, 0.0040483177f,
+ 0.0071406178f, 0.0125075765f, 0.0174052790f, 0.0240450874f,
+ 0.0328458026f, 0.0440842360f, 0.0575582422f, 0.0672323704f,
+ 0.0766361356f, 0.0847054869f, 0.0902284831f, 0.0922011435f,
+ 0.0902284831f, 0.0847054794f, 0.0766361356f, 0.0672323704f,
+ 0.0575582422f, 0.0440842398f, 0.0328458063f, 0.0240450874f,
+ 0.0174052827f, 0.0125075765f, 0.0071406178f, 0.0040483177f,
+ 0.0022867322f, 0.0012891144f, 0.0000000075f},
+ {0.0000000037f, 0.0007896237f, 0.0014020018f, 0.0024860986f,
+ 0.0043976195f, 0.0077406205f, 0.0108190365f, 0.0150338374f,
+ 0.0206919834f, 0.0280320831f, 0.0369941816f, 0.0435322635f,
+ 0.0499662943f, 0.0555463880f, 0.0593958236f, 0.0607765317f,
+ 0.0593958311f, 0.0555463880f, 0.0499663018f, 0.0435322635f,
+ 0.0369941816f, 0.0280320793f, 0.0206919834f, 0.0150338374f,
+ 0.0108190365f, 0.0077406205f, 0.0043976195f, 0.0024860986f,
+ 0.0014020018f, 0.0007896237f, 0.0000000037f},
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {-0.0000000075f, -0.0012713782f, -0.0022661425f, -0.0040463172f,
+ -0.0072463304f, -0.0130392574f, -0.0186092220f, -0.0266334265f,
+ -0.0382109173f, -0.0548328906f, -0.0785857737f, -0.1031111181f,
+ -0.1333933324f, -0.1665901542f, -0.1946617961f, -0.2060326487f,
+ -0.1946618110f, -0.1665901244f, -0.1333933473f, -0.1031111181f,
+ -0.0785857663f, -0.0548328944f, -0.0382109173f, -0.0266334228f,
+ -0.0186092220f, -0.0130392574f, -0.0072463304f, -0.0040463172f,
+ -0.0022661425f, -0.0012713782f, -0.0000000075f},
+ {-0.0000000112f, -0.0021414421f, -0.0038233139f, -0.0068472512f,
+ -0.0123300999f, -0.0224180073f, -0.0323300436f, -0.0470142849f,
+ -0.0691649169f, -0.1103344113f, -0.1914317608f, -0.2921350002f,
+ -0.4732148349f, -0.8167076707f, -1.4096118212f, -1.8493247032f,
+ -1.4096126556f, -0.8167075515f, -0.4732148647f, -0.2921350002f,
+ -0.1914317757f, -0.1103344113f, -0.0691649020f, -0.0470142812f,
+ -0.0323300473f, -0.0224180073f, -0.0123301037f, -0.0068472549f,
+ -0.0038233139f, -0.0021414421f, -0.0000000112f}}};
+
+const FLOAT32 ixheaacd_re_weight[16][8][31] = {
+
{
- {134217728, 133460863, 132868901, 131810111, 129908442, 126470291,
- 123168465, 118415202, 111553289, 101653880, 87503416, 75055587,
- 59853017, 41890564, 21615401, 0, -21615400, -41890567,
- -59853022, -75055592, -87503416, -101653880, -111553289, -118415202,
- -123168474, -126470291, -129908442, -131810119, -132868916, -133460855,
- -134217736},
- {134217728, 133507641, 132951036, 131952906, 130152305, 126873835,
- 123700894, 119097743, 112392608, 102624793, 88527346, 76037569,
- 60709668, 42530952, 21959413, 0, -21959412, -42530956,
- -60709668, -76037567, -88527354, -102624793, -112392608, -119097743,
- -123700897, -126873843, -130152314, -131952906, -132951044, -133507625,
- -134217736},
- {134217728, 133578889, 133076245, 132170971, 130525880, 127495076,
- 124524084, 120158840, 113706267, 104156340, 90156022, 77607879,
- 62086135, 43563841, 22515636, 0, -22515635, -43563843,
- -62086140, -77607874, -90156032, -104156349, -113706267, -120158844,
- -124524084, -127495076, -130525880, -132170971, -133076253, -133578881,
- -134217736},
- {134217728, 133758012, 133391773, 132722523, 131476888, 129093806,
- 126662688, 122949415, 117214012, 108319953, 94671025, 82017354,
- 65996439, 46525651, 24120340, 0, -24120340, -46525655,
- -65996434, -82017354, -94671025, -108319953, -117214003, -122949415,
- -126662696, -129093806, -131476888, -132722531, -133391781, -133758012,
- -134217736},
- {134217728, 133932649, 133700308, 133264733, 132420429, 130705061,
- 128848242, 125853808, 120950424, 112880929, 99774559, 87108077,
- 70599795, 50068507, 26060170, 0, -26060170, -50068507,
- -70599792, -87108068, -99774568, -112880929, -120950424, -125853814,
- -128848243, -130705069, -132420430, -133264733, -133700308, -133932641,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217744, 134655979, 134988239, 135559790, 136513776, 138005964,
- 139162482, 140361258, 141138020, 140293965, 138371877, 136502930,
- 126746944, 102804704, 59370579, 0, -59370579, -102804704,
- -126746957, -136502930, -138371890, -140293970, -141138020, -140361258,
- -139162497, -138005964, -136513792, -135559805, -134988239, -134655979,
- -134217744},
- {134217744, 134962683, 135539295, 136557732, 138346233, 141452453,
- 144288910, 148135620, 153292676, 175071409, 212428515, 254219167,
- 323573619, 452387989, 709374650, 0, -709375876, -452387936,
- -323573672, -254219167, -212428528, -175071409, -153292663, -148135606,
- -144288924, -141452453, -138346233, -136557732, -135539295, -134962683,
- -134217744},
- },
+
+ {0.5000000000f, 0.4971804619f, 0.4949752390f, 0.4910309315f,
+ 0.4839466512f, 0.4711385369f, 0.4588382840f, 0.4411309958f,
+ 0.4155683815f, 0.3786902130f, 0.3259756267f, 0.2796038389f,
+ 0.2229698598f, 0.1560545117f, 0.0805236399f, 0.0000000000f,
+ -0.0805236399f, -0.1560545266f, -0.2229698896f, -0.2796038687f,
+ -0.3259756267f, -0.3786902130f, -0.4155683815f, -0.4411309958f,
+ -0.4588383138f, -0.4711385369f, -0.4839466512f, -0.4910309613f,
+ -0.4949752688f, -0.4971804321f, -0.5000000000f},
+ {0.5000000000f, 0.4973547161f, 0.4952812195f, 0.4915628731f,
+ 0.4848551154f, 0.4726418555f, 0.4608217478f, 0.4436736703f,
+ 0.4186950922f, 0.3823071420f, 0.3297900558f, 0.2832620144f,
+ 0.2261611372f, 0.1584401429f, 0.0818051845f, 0.0000000000f,
+ -0.0818051845f, -0.1584401578f, -0.2261611372f, -0.2832620144f,
+ -0.3297900856f, -0.3823071420f, -0.4186950922f, -0.4436736703f,
+ -0.4608217478f, -0.4726418853f, -0.4848551452f, -0.4915628731f,
+ -0.4952812195f, -0.4973546565f, -0.5000000000f},
+ {0.5000000000f, 0.4976201355f, 0.4957476556f, 0.4923752248f,
+ 0.4862467945f, 0.4749561548f, 0.4638883471f, 0.4476265609f,
+ 0.4235888422f, 0.3880125880f, 0.3358573616f, 0.2891118824f,
+ 0.2312888801f, 0.1622879505f, 0.0838772804f, 0.0000000000f,
+ -0.0838772804f, -0.1622879654f, -0.2312888950f, -0.2891118526f,
+ -0.3358573914f, -0.3880126476f, -0.4235888422f, -0.4476265907f,
+ -0.4638883471f, -0.4749561548f, -0.4862467945f, -0.4923752248f,
+ -0.4957476854f, -0.4976201057f, -0.5000000000f},
+ {0.5000000000f, 0.4982874393f, 0.4969230890f, 0.4944299161f,
+ 0.4897895753f, 0.4809119105f, 0.4718552828f, 0.4580222666f,
+ 0.4366562366f, 0.4035232663f, 0.3526770473f, 0.3055384457f,
+ 0.2458558977f, 0.1733215600f, 0.0898552686f, 0.0000000000f,
+ -0.0898552686f, -0.1733215749f, -0.2458558679f, -0.3055384457f,
+ -0.3526770473f, -0.4035232663f, -0.4366561770f, -0.4580222666f,
+ -0.4718553126f, -0.4809119105f, -0.4897895753f, -0.4944299459f,
+ -0.4969231188f, -0.4982874393f, -0.5000000000f},
+ {0.5000000000f, 0.4989379942f, 0.4980724454f, 0.4964498281f,
+ 0.4933045506f, 0.4869143069f, 0.4799970984f, 0.4688419700f,
+ 0.4505754411f, 0.4205142260f, 0.3716892004f, 0.3245028853f,
+ 0.2630047202f, 0.1865197271f, 0.0970816985f, 0.0000000000f,
+ -0.0970816985f, -0.1865197271f, -0.2630047202f, -0.3245028257f,
+ -0.3716892302f, -0.4205142260f, -0.4505754411f, -0.4688419998f,
+ -0.4799970984f, -0.4869143367f, -0.4933045506f, -0.4964498281f,
+ -0.4980724454f, -0.4989379644f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000596f, 0.5016326308f, 0.5028703809f, 0.5049995780f,
+ 0.5085534453f, 0.5141122937f, 0.5184206367f, 0.5228864551f,
+ 0.5257800817f, 0.5226357579f, 0.5154753923f, 0.5085130334f,
+ 0.4721691608f, 0.3829773664f, 0.2211726457f, 0.0000000000f,
+ -0.2211726457f, -0.3829773664f, -0.4721692204f, -0.5085130334f,
+ -0.5154754519f, -0.5226357579f, -0.5257800817f, -0.5228864551f,
+ -0.5184206963f, -0.5141122937f, -0.5085535049f, -0.5049996376f,
+ -0.5028703809f, -0.5016326308f, -0.5000000596f},
+ {0.5000000596f, 0.5027751923f, 0.5049232244f, 0.5087171793f,
+ 0.5153799057f, 0.5269514322f, 0.5375180840f, 0.5518481731f,
+ 0.5710597038f, 0.6521918178f, 0.7913578749f, 0.9470402002f,
+ 1.2054057121f, 1.6852766275f, 2.6426265240f, 0.0000000000f,
+ -2.6426310539f, -1.6852763891f, -1.2054058313f, -0.9470402002f,
+ -0.7913579345f, -0.6521918178f, -0.5710596442f, -0.5518481135f,
+ -0.5375181437f, -0.5269514322f, -0.5153799057f, -0.5087171793f,
+ -0.5049232244f, -0.5027751923f, -0.5000000596f}},
{
- {134217728, 133517388, 132968168, 131982689, 130203271, 126958371,
- 123812646, 119241372, 112569794, 102830521, 88745164, 76246965,
- 60892748, 42668052, 22033146, 0, -22033144, -42668057,
- -60892753, -76246965, -88745164, -102830531, -112569785, -119241363,
- -123812654, -126958371, -130203280, -131982697, -132968160, -133517380,
- -134217736},
- {134217728, 133560667, 133044207, 132115111, 130430074, 127335394,
- 124312090, 119884885, 113366063, 103758318, 89731143, 77197214,
- 61725371, 43292653, 22369435, 0, -22369434, -43292655,
- -61725371, -77197209, -89731143, -103758309, -113366063, -119884894,
- -124312098, -127335394, -130430074, -132115119, -133044215, -133560651,
- -134217736},
- {134217728, 133626556, 133160120, 132317284, 130777308, 127915335,
- 125083431, 120883935, 114610226, 105218864, 91295851, 78713132,
- 63059915, 44297538, 22911785, 0, -22911782, -44297538,
- -63059910, -78713137, -91295851, -105218855, -114610226, -120883935,
- -125083440, -127915335, -130777308, -132317293, -133160128, -133626540,
- -134217736},
- {134217728, 133792202, 133452102, 132828323, 131660297, 129405046,
- 127082463, 123503081, 117919375, 109170723, 95610055, 82945267,
- 66828178, 47161136, 24466610, 0, -24466610, -47161136,
- -66828178, -82945267, -95610064, -109170725, -117919366, -123503090,
- -127082486, -129405039, -131660312, -132828331, -133452110, -133792210,
- -134217736},
- {134217728, 133953625, 133737455, 133330222, 132534982, 130902453,
- 129118100, 126216242, 121423078, 113467678, 100443871, 87784612,
- 71219199, 50550149, 26325706, 0, -26325706, -50550154,
- -71219202, -87784612, -100443871, -113467678, -121423078, -126216226,
- -129118109, -130902453, -132534997, -133330214, -133737456, -133953625,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217744, 134621813, 134927051, 135449572, 136313400, 137636071,
- 138622650, 139566056, 139956832, 138536878, 133180717, 129783677,
- 118675624, 94628804, 53853292, 0, -53853295, -94628804,
- -118675637, -129783677, -133180717, -138536864, -139956832, -139566056,
- -138622666, -137636071, -136313400, -135449556, -134927051, -134621813,
- -134217744},
- {134217744, 134904883, 135435203, 136368502, 137996233, 140785045,
- 143282261, 146575942, 150720567, 165849956, 193015182, 218765195,
- 250475781, 276007380, 232012261, 0, -232012394, -276007380,
- -250475807, -218765195, -193015209, -165849956, -150720553, -146575942,
- -143282270, -140785029, -137996233, -136368502, -135435219, -134904883,
- -134217744},
- },
+
+ {0.5000000000f, 0.4973910451f, 0.4953450263f, 0.4916738272f,
+ 0.4850449860f, 0.4729567766f, 0.4612380564f, 0.4442087412f,
+ 0.4193551540f, 0.3830735385f, 0.3306015134f, 0.2840420902f,
+ 0.2268431634f, 0.1589508802f, 0.0820798650f, 0.0000000000f,
+ -0.0820798576f, -0.1589508951f, -0.2268431783f, -0.2840420902f,
+ -0.3306015134f, -0.3830735683f, -0.4193551242f, -0.4442086816f,
+ -0.4612380862f, -0.4729567766f, -0.4850450158f, -0.4916738570f,
+ -0.4953449965f, -0.4973909855f, -0.5000000000f},
+ {0.5000000000f, 0.4975522459f, 0.4956282973f, 0.4921671450f,
+ 0.4858898818f, 0.4743613005f, 0.4630986154f, 0.4466060102f,
+ 0.4223214984f, 0.3865298629f, 0.3342745602f, 0.2875820398f,
+ 0.2299449295f, 0.1612776965f, 0.0833326429f, 0.0000000000f,
+ -0.0833326355f, -0.1612777114f, -0.2299449295f, -0.2875820100f,
+ -0.3342745602f, -0.3865298331f, -0.4223214984f, -0.4466060400f,
+ -0.4630986452f, -0.4743613005f, -0.4858898818f, -0.4921671748f,
+ -0.4956283271f, -0.4975521863f, -0.5000000000f},
+ {0.5000000000f, 0.4977977276f, 0.4960601032f, 0.4929202795f,
+ 0.4871834517f, 0.4765217602f, 0.4659720957f, 0.4503277540f,
+ 0.4269563556f, 0.3919708133f, 0.3401035368f, 0.2932292819f,
+ 0.2349164933f, 0.1650211811f, 0.0853530467f, 0.0000000000f,
+ -0.0853530392f, -0.1650211811f, -0.2349164784f, -0.2932292819f,
+ -0.3401035368f, -0.3919707835f, -0.4269563556f, -0.4503277540f,
+ -0.4659721255f, -0.4765217602f, -0.4871834517f, -0.4929203391f,
+ -0.4960601330f, -0.4977976680f, -0.5000000000f},
+ {0.5000000000f, 0.4984147847f, 0.4971478283f, 0.4948240519f,
+ 0.4904728234f, 0.4820713699f, 0.4734190702f, 0.4600848258f,
+ 0.4392839074f, 0.4066926241f, 0.3561752141f, 0.3089951873f,
+ 0.2489543557f, 0.1756889224f, 0.0911452249f, 0.0000000000f,
+ -0.0911452249f, -0.1756889224f, -0.2489543557f, -0.3089951873f,
+ -0.3561752439f, -0.4066926539f, -0.4392838776f, -0.4600848556f,
+ -0.4734191597f, -0.4820713401f, -0.4904728830f, -0.4948240817f,
+ -0.4971478581f, -0.4984148145f, -0.5000000000f},
+ {0.5000000000f, 0.4990161359f, 0.4982108474f, 0.4966937900f,
+ 0.4937312901f, 0.4876496494f, 0.4810023904f, 0.4701921344f,
+ 0.4523362219f, 0.4227000475f, 0.3741825819f, 0.3270231485f,
+ 0.2653121948f, 0.1883139759f, 0.0980708972f, 0.0000000000f,
+ -0.0980708972f, -0.1883139908f, -0.2653121948f, -0.3270231485f,
+ -0.3741825819f, -0.4227000475f, -0.4523362219f, -0.4701920748f,
+ -0.4810024500f, -0.4876496494f, -0.4937313497f, -0.4966937602f,
+ -0.4982108474f, -0.4990161359f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000596f, 0.5015053153f, 0.5026424527f, 0.5045889616f,
+ 0.5078070164f, 0.5127342939f, 0.5164096355f, 0.5199240446f,
+ 0.5213798285f, 0.5160900950f, 0.4961368442f, 0.4834818840f,
+ 0.4421011508f, 0.3525197506f, 0.2006191462f, 0.0000000000f,
+ -0.2006191611f, -0.3525197506f, -0.4421012104f, -0.4834818840f,
+ -0.4961368442f, -0.5160900354f, -0.5213798285f, -0.5199240446f,
+ -0.5164096951f, -0.5127342939f, -0.5078070164f, -0.5045889020f,
+ -0.5026424527f, -0.5015053153f, -0.5000000596f},
+ {0.5000000596f, 0.5025598407f, 0.5045354366f, 0.5080122352f,
+ 0.5140760541f, 0.5244651437f, 0.5337679982f, 0.5460379124f,
+ 0.5614778399f, 0.6178392172f, 0.7190375924f, 0.8149638772f,
+ 0.9330949783f, 1.0282076597f, 0.8643130064f, 0.0000000000f,
+ -0.8643135428f, -1.0282076597f, -0.9330950975f, -0.8149638772f,
+ -0.7190377116f, -0.6178392172f, -0.5614778399f, -0.5460379124f,
+ -0.5337680578f, -0.5244650841f, -0.5140760541f, -0.5080122352f,
+ -0.5045354962f, -0.5025598407f, -0.5000000596f}},
{
- {134217728, 133678764, 133252044, 132477911, 131054012, 128379841,
- 125703998, 121692333, 115624163, 106419205, 92593586, 79977946,
- 64179408, 45144170, 23370016, 0, -23370016, -45144175,
- -64179408, -79977946, -92593586, -106419196, -115624163, -121692324,
- -125704006, -128379848, -131054020, -132477902, -133252052, -133678756,
- -134217736},
- {134217728, 133712005, 133310620, 132580354, 131230923, 128677921,
- 126103542, 122214988, 116283221, 107204353, 93448326, 80814826,
- 64923233, 45708586, 23676171, 0, -23676171, -45708586,
- -64923233, -80814831, -93448326, -107204344, -116283221, -122214988,
- -126103542, -128677921, -131230923, -132580362, -133310620, -133711997,
- -134217736},
- {134217728, 133762594, 133399847, 132736656, 131501355, 129135285,
- 126718571, 123023009, 117307580, 108432548, 94794977, 82139614,
- 66105841, 46609132, 24165789, 0, -24165786, -46609132,
- -66105847, -82139614, -94794987, -108432548, -117307580, -123023009,
- -126718574, -129135283, -131501371, -132736656, -133399839, -133762594,
- -134217736},
- {134217728, 133889704, 133624356, 133130995, 132186884, 130303885,
- 128301191, 125121697, 120000061, 111707953, 98445440, 85770865,
- 69380893, 49124191, 25540859, 0, -25540857, -49124196,
- -69380888, -85770874, -98445440, -111707944, -120000061, -125121697,
- -128301191, -130303893, -132186900, -133130995, -133624356, -133889712,
- -134217728},
- {134217728, 134013488, 133843425, 133517257, 132862879, 131469447,
- 129895964, 127265729, 122800030, 115190043, 102426301, 89801131,
- 73076637, 52001860, 27128796, 0, -27128794, -52001864,
- -73076641, -89801131, -102426301, -115190039, -122800030, -127265729,
- -129895972, -131469447, -132862879, -133517265, -133843441, -134013480,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 134524667, 134753225, 135137152, 135747532, 136598811,
- 137119080, 137373516, 136748951, 133873231, 125921352, 115399244,
- 100457884, 77154931, 42583862, 0, -42583862, -77154938,
- -100457891, -115399244, -125921369, -133873231, -136748936, -137373501,
- -137119096, -136598811, -135747548, -135137152, -134753241, -134524667,
- -134217728},
- {134217744, 134740697, 135140165, 135833916, 137013874, 138934982,
- 140527025, 142390637, 144197099, 144950624, 153156303, 156579063,
- 152419543, 130790210, 79555611, 0, -79555625, -130790210,
- -152419556, -156579063, -153156316, -144950610, -144197089, -142390622,
- -140527040, -138934982, -137013890, -135833916, -135140150, -134740697,
- -134217744},
- },
+
+ {0.5000000000f, 0.4979922175f, 0.4964025617f, 0.4935186803f,
+ 0.4882142544f, 0.4782521725f, 0.4682838917f, 0.4533392787f,
+ 0.4307335615f, 0.3964424431f, 0.3449379802f, 0.2979410589f,
+ 0.2390869260f, 0.1681751311f, 0.0870600939f, 0.0000000000f,
+ -0.0870600939f, -0.1681751609f, -0.2390869260f, -0.2979410589f,
+ -0.3449379802f, -0.3964424133f, -0.4307335615f, -0.4533392191f,
+ -0.4682839215f, -0.4782522023f, -0.4882142544f, -0.4935186505f,
+ -0.4964025617f, -0.4979921579f, -0.5000000000f},
+ {0.5000000000f, 0.4981160462f, 0.4966207743f, 0.4939002991f,
+ 0.4888732731f, 0.4793626070f, 0.4697723091f, 0.4552863240f,
+ 0.4331887662f, 0.3993673325f, 0.3481221497f, 0.3010586798f,
+ 0.2418578863f, 0.1702777445f, 0.0882006139f, 0.0000000000f,
+ -0.0882006139f, -0.1702777445f, -0.2418578863f, -0.3010587096f,
+ -0.3481221497f, -0.3993673027f, -0.4331887662f, -0.4552863240f,
+ -0.4697723091f, -0.4793626070f, -0.4888732731f, -0.4939003289f,
+ -0.4966207743f, -0.4981160164f, -0.5000000000f},
+ {0.5000000000f, 0.4983044863f, 0.4969531596f, 0.4944825768f,
+ 0.4898807108f, 0.4810664356f, 0.4720634520f, 0.4582964182f,
+ 0.4370048046f, 0.4039427042f, 0.3531388044f, 0.3059939146f,
+ 0.2462634444f, 0.1736325473f, 0.0900245756f, 0.0000000000f,
+ -0.0900245681f, -0.1736325473f, -0.2462634742f, -0.3059939146f,
+ -0.3531388342f, -0.4039427042f, -0.4370048046f, -0.4582964182f,
+ -0.4720634818f, -0.4810664058f, -0.4898807704f, -0.4944825768f,
+ -0.4969531298f, -0.4983044863f, -0.5000000000f},
+ {0.5000000000f, 0.4987780154f, 0.4977895021f, 0.4959515929f,
+ 0.4924345016f, 0.4854198098f, 0.4779591858f, 0.4661146402f,
+ 0.4470350742f, 0.4161445498f, 0.3667378426f, 0.3195213675f,
+ 0.2584639788f, 0.1830018759f, 0.0951471180f, 0.0000000000f,
+ -0.0951471031f, -0.1830018908f, -0.2584639490f, -0.3195213974f,
+ -0.3667378426f, -0.4161445200f, -0.4470350742f, -0.4661146402f,
+ -0.4779591858f, -0.4854198396f, -0.4924345613f, -0.4959515929f,
+ -0.4977895021f, -0.4987780452f, -0.5000000000f},
+ {0.5000000000f, 0.4992391467f, 0.4986056089f, 0.4973905385f,
+ 0.4949527979f, 0.4897618592f, 0.4839001894f, 0.4741017818f,
+ 0.4574657679f, 0.4291163385f, 0.3815677166f, 0.3345352709f,
+ 0.2722316980f, 0.1937220246f, 0.1010626405f, 0.0000000000f,
+ -0.1010626331f, -0.1937220395f, -0.2722316980f, -0.3345352709f,
+ -0.3815677166f, -0.4291163385f, -0.4574657679f, -0.4741017818f,
+ -0.4839001894f, -0.4897618592f, -0.4949527979f, -0.4973905683f,
+ -0.4986056685f, -0.4992391169f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.5011434555f, 0.5019949079f, 0.5034251213f,
+ 0.5056989789f, 0.5088702440f, 0.5108083487f, 0.5117562413f,
+ 0.5094295144f, 0.4987166524f, 0.4690935910f, 0.4298956990f,
+ 0.3742347956f, 0.2874245048f, 0.1586372554f, 0.0000000000f,
+ -0.1586372554f, -0.2874245346f, -0.3742347956f, -0.4298956990f,
+ -0.4690936506f, -0.4987166524f, -0.5094294548f, -0.5117561817f,
+ -0.5108084679f, -0.5088702440f, -0.5056990385f, -0.5034251213f,
+ -0.5019949675f, -0.5011434555f, -0.5000000000f},
+ {0.5000000596f, 0.5019482374f, 0.5034363270f, 0.5060207844f,
+ 0.5104164481f, 0.5175731182f, 0.5235039592f, 0.5304464698f,
+ 0.5371760726f, 0.5399831533f, 0.5705516934f, 0.5833024383f,
+ 0.5678070188f, 0.4872314930f, 0.2963677347f, 0.0000000000f,
+ -0.2963677943f, -0.4872314930f, -0.5678070784f, -0.5833024383f,
+ -0.5705517530f, -0.5399830937f, -0.5371760130f, -0.5304464102f,
+ -0.5235040188f, -0.5175731182f, -0.5104165077f, -0.5060207844f,
+ -0.5034362674f, -0.5019482374f, -0.5000000596f}},
{
- {134217728, 133921369, 133680325, 133229561, 132358967, 130599331,
- 128703866, 125660282, 120698624, 112569282, 99420258, 86750815,
- 70273432, 49815216, 25920711, 0, -25920711, -49815221,
- -70273437, -86750806, -99420256, -112569274, -120698624, -125660282,
- -128703883, -130599348, -132358983, -133229561, -133680325, -133921361,
- -134217728},
- {134217728, 133939441, 133712333, 133285932, 132457505, 130768900,
- 128935466, 125970874, 121102931, 113070012, 99989913, 87325519,
- 70798672, 50223025, 26145310, 0, -26145308, -50223025,
- -70798677, -87325519, -99989913, -113070003, -121102931, -125970860,
- -128935481, -130768908, -132457513, -133285932, -133712341, -133939433,
- -134217728},
- {134217728, 133966965, 133761027, 133371807, 132607806, 131028081,
- 129290134, 126447733, 121725737, 113844587, 100875426, 88221963,
- 71620613, 50862941, 26498391, 0, -26498388, -50862946,
- -71620620, -88221963, -100875417, -113844587, -121725728, -126447716,
- -129290134, -131028089, -132607807, -133371815, -133761036, -133966957,
- -134217728},
- {134217728, 134036022, 133883399, 133587872, 132986916, 131684800,
- 130192440, 127667609, 123330628, 115859003, 103203522, 90597004,
- 73814421, 52581631, 27450709, 0, -27450709, -52581635,
- -73814421, -90597004, -103203522, -115858986, -123330612, -127667609,
- -130192441, -131684792, -132986917, -133587864, -133883399, -134036014,
- -134217728},
- {134217728, 134103202, 134002513, 133798640, 133358145, 132331971,
- 131086862, 128886498, 124951227, 117920856, 105625498, 93096793,
- 76149690, 54428903, 28481041, 0, -28481039, -54428903,
- -76149698, -93096793, -105625498, -117920856, -124951227, -128886489,
- -131086879, -132331963, -133358153, -133798640, -134002521, -134103194,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 134379666, 134494354, 134673574, 134913679, 135089351,
- 134957528, 134277005, 132335084, 127697337, 117706196, 106054041,
- 88737129, 64741142, 34377364, 0, -34377364, -64741149,
- -88737144, -106054041, -117706196, -127697337, -132335084, -134276990,
- -134957528, -135089351, -134913679, -134673590, -134494354, -134379666,
- -134217728},
- {134217728, 134496089, 134702142, 135045469, 135582090, 136297572,
- 136685209, 136746798, 135844838, 132586209, 124167611, 113363711,
- 96250730, 73172752, 40110146, 0, -40110146, -73172752,
- -96250737, -113363711, -124167625, -132586192, -135844823, -136746798,
- -136685224, -136297557, -135582122, -135045469, -134702142, -134496073,
- -134217728},
- },
+
+ {0.5000000000f, 0.4988959730f, 0.4979980290f, 0.4963187873f,
+ 0.4930755794f, 0.4865204096f, 0.4794592559f, 0.4681210220f,
+ 0.4496374130f, 0.4193532467f, 0.3703693151f, 0.3231719732f,
+ 0.2617889345f, 0.1855761409f, 0.0965621769f, 0.0000000000f,
+ -0.0965621769f, -0.1855761558f, -0.2617889643f, -0.3231719434f,
+ -0.3703693151f, -0.4193532169f, -0.4496374130f, -0.4681210220f,
+ -0.4794593155f, -0.4865204692f, -0.4930756390f, -0.4963187873f,
+ -0.4979980290f, -0.4988959432f, -0.5000000000f},
+ {0.5000000000f, 0.4989632964f, 0.4981172681f, 0.4965288043f,
+ 0.4934426546f, 0.4871520996f, 0.4803220332f, 0.4692780674f,
+ 0.4511435628f, 0.4212186337f, 0.3724914491f, 0.3253129125f,
+ 0.2637456059f, 0.1870953441f, 0.0973988697f, 0.0000000000f,
+ -0.0973988622f, -0.1870953441f, -0.2637456357f, -0.3253129125f,
+ -0.3724914491f, -0.4212185740f, -0.4511435628f, -0.4692780375f,
+ -0.4803220928f, -0.4871521592f, -0.4934426844f, -0.4965288043f,
+ -0.4981172979f, -0.4989632666f, -0.5000000000f},
+ {0.5000000000f, 0.4990658462f, 0.4982986450f, 0.4968487024f,
+ 0.4940025806f, 0.4881176353f, 0.4816432893f, 0.4710545242f,
+ 0.4534637034f, 0.4241041243f, 0.3757902384f, 0.3286524117f,
+ 0.2668075860f, 0.1894792169f, 0.0987142026f, 0.0000000000f,
+ -0.0987141877f, -0.1894792318f, -0.2668076158f, -0.3286524117f,
+ -0.3757902086f, -0.4241041243f, -0.4534636736f, -0.4710544348f,
+ -0.4816432893f, -0.4881176651f, -0.4940025806f, -0.4968487322f,
+ -0.4982987046f, -0.4990658164f, -0.5000000000f},
+ {0.5000000000f, 0.4993230999f, 0.4987545311f, 0.4976536036f,
+ 0.4954148531f, 0.4905641079f, 0.4850046337f, 0.4755989015f,
+ 0.4594423771f, 0.4316084087f, 0.3844630718f, 0.3375001550f,
+ 0.2749801576f, 0.1958818436f, 0.1022618562f, 0.0000000000f,
+ -0.1022618562f, -0.1958818585f, -0.2749801576f, -0.3375001550f,
+ -0.3844630718f, -0.4316083491f, -0.4594423175f, -0.4755989015f,
+ -0.4850046337f, -0.4905640781f, -0.4954148829f, -0.4976535738f,
+ -0.4987545311f, -0.4993230700f, -0.5000000000f},
+ {0.5000000000f, 0.4995733500f, 0.4991982579f, 0.4984387755f,
+ 0.4967978001f, 0.4929749966f, 0.4883366227f, 0.4801396132f,
+ 0.4654795825f, 0.4392894208f, 0.3934856355f, 0.3468125761f,
+ 0.2836796939f, 0.2027634680f, 0.1061001420f, 0.0000000000f,
+ -0.1061001420f, -0.2027634680f, -0.2836797237f, -0.3468125761f,
+ -0.3934856355f, -0.4392894208f, -0.4654795825f, -0.4801395833f,
+ -0.4883366823f, -0.4929749668f, -0.4967978299f, -0.4984387755f,
+ -0.4991982877f, -0.4995733202f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.5006032586f, 0.5010305047f, 0.5016981363f,
+ 0.5025926232f, 0.5032470226f, 0.5027559996f, 0.5002208352f,
+ 0.4929866195f, 0.4757096469f, 0.4384897351f, 0.3950820863f,
+ 0.3305715621f, 0.2411795557f, 0.1280656606f, 0.0000000000f,
+ -0.1280656606f, -0.2411795706f, -0.3305716217f, -0.3950820863f,
+ -0.4384897351f, -0.4757096469f, -0.4929866195f, -0.5002207756f,
+ -0.5027559996f, -0.5032470226f, -0.5025926232f, -0.5016981959f,
+ -0.5010305047f, -0.5006032586f, -0.5000000000f},
+ {0.5000000000f, 0.5010370016f, 0.5018045902f, 0.5030835867f,
+ 0.5050826669f, 0.5077480078f, 0.5091921091f, 0.5094215274f,
+ 0.5060614347f, 0.4939221144f, 0.4625603855f, 0.4223127365f,
+ 0.3585619032f, 0.2725897431f, 0.1494219303f, 0.0000000000f,
+ -0.1494219303f, -0.2725897431f, -0.3585619330f, -0.4223127365f,
+ -0.4625604451f, -0.4939220548f, -0.5060613751f, -0.5094215274f,
+ -0.5091921091f, -0.5077479482f, -0.5050827861f, -0.5030835867f,
+ -0.5018045902f, -0.5010369420f, -0.5000000000f}},
{
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369938, 0, -30369936, -57781476,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369938, 0, -30369936, -57781476,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369938, 0, -30369936, -57781479,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- },
+
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368354f, 0.0000000000f,
+ -0.1131368279f, -0.2152527720f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368354f, 0.0000000000f,
+ -0.1131368279f, -0.2152527720f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368354f, 0.0000000000f,
+ -0.1131368279f, -0.2152527869f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f}},
{
- {134217728, 134498993, 134707335, 135054789, 135598900, 136328115,
- 136729141, 136810142, 135935959, 132715402, 124342638, 113565820,
- 96534651, 73558852, 40348512, 0, -40348509, -73558852,
- -96534651, -113565820, -124342622, -132715402, -135935959, -136810127,
- -136729141, -136328115, -135598916, -135054789, -134707335, -134498977,
- -134217728},
- {134217728, 134480680, 134674623, 134996162, 135493192, 136136017,
- 136453048, 136412541, 135364880, 131907703, 123252219, 112310293,
- 95147250, 71192218, 38892389, 0, -38892389, -71192225,
- -95147244, -112310293, -123252233, -131907703, -135364880, -136412525,
- -136453064, -136136017, -135493192, -134996162, -134674623, -134480664,
- -134217728},
- {134217728, 134452852, 134624907, 134907111, 135332868, 135845392,
- 136036318, 135814387, 134509950, 130707034, 121647428, 110478072,
- 93245003, 68600479, 36868706, 0, -36868706, -68600486,
- -93245010, -110478072, -121647428, -130707019, -134509933, -135814387,
- -136036318, -135845392, -135332868, -134907111, -134624907, -134452836,
- -134217728},
- {134217728, 134383129, 134500515, 134684594, 134933403, 135124815,
- 135007943, 134348491, 132435517, 127834944, 117883926, 106251314,
- 88935676, 64909118, 34475644, 0, -34475641, -64909118,
- -88935672, -106251314, -117883941, -127834944, -132435502, -134348484,
- -135007943, -135124799, -134933403, -134684610, -134500515, -134383113,
- -134217728},
- {134217728, 134315558, 134380057, 134469604, 134548899, 134436000,
- 134031448, 132969665, 130510521, 125220021, 114545007, 102579384,
- 85276062, 61841165, 32692547, 0, -32692543, -61841172,
- -85276062, -102579384, -114545015, -125220021, -130510514, -132969665,
- -134031463, -134436000, -134548899, -134469604, -134380057, -134315558,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 134039455, 133889472, 133598612, 133005816, 131717634,
- 130237695, 127729079, 123411911, 115961736, 103323251, 90719885,
- 73928581, 52671501, 27500671, 0, -27500669, -52671505,
- -73928581, -90719885, -103323259, -115961741, -123411903, -127729055,
- -130237711, -131717634, -133005816, -133598612, -133889472, -134039447,
- -134217728},
- {134217728, 133924242, 133685411, 133238504, 132374593, 130626201,
- 128740547, 125709420, 120762534, 112648312, 99510030, 86841272,
- 70356024, 49879283, 25955974, 0, -25955971, -49879287,
- -70356024, -86841272, -99510039, -112648312, -120762526, -125709412,
- -128740555, -130626209, -132374601, -133238504, -133685403, -133924234,
- -134217728},
- },
+
+ {0.5000000000f, 0.5010477901f, 0.5018239021f, 0.5031182766f,
+ 0.5051452518f, 0.5078617930f, 0.5093557239f, 0.5096575022f,
+ 0.5064008832f, 0.4944033921f, 0.4632124305f, 0.4230656624f,
+ 0.3596195877f, 0.2740280628f, 0.1503099203f, 0.0000000000f,
+ -0.1503099054f, -0.2740280628f, -0.3596195877f, -0.4230656624f,
+ -0.4632123709f, -0.4944033921f, -0.5064008832f, -0.5096574426f,
+ -0.5093557239f, -0.5078617930f, -0.5051453114f, -0.5031182766f,
+ -0.5018239021f, -0.5010477304f, -0.5000000000f},
+ {0.5000000000f, 0.5009795427f, 0.5017020702f, 0.5028998852f,
+ 0.5047514439f, 0.5071461797f, 0.5083272457f, 0.5081763268f,
+ 0.5042734742f, 0.4913944900f, 0.4591502845f, 0.4183884561f,
+ 0.3544511199f, 0.2652116716f, 0.1448854357f, 0.0000000000f,
+ -0.1448854357f, -0.2652117014f, -0.3544511199f, -0.4183884561f,
+ -0.4591503441f, -0.4913944900f, -0.5042734742f, -0.5081762671f,
+ -0.5083272457f, -0.5071461797f, -0.5047514439f, -0.5028998852f,
+ -0.5017020702f, -0.5009795427f, -0.5000000000f},
+ {0.5000000000f, 0.5008758903f, 0.5015168786f, 0.5025681257f,
+ 0.5041542053f, 0.5060635209f, 0.5067747831f, 0.5059480071f,
+ 0.5010886192f, 0.4869216383f, 0.4531719685f, 0.4115628898f,
+ 0.3473646939f, 0.2555567026f, 0.1373466253f, 0.0000000000f,
+ -0.1373466253f, -0.2555567324f, -0.3473647237f, -0.4115628898f,
+ -0.4531719685f, -0.4869215786f, -0.5010885596f, -0.5059480071f,
+ -0.5067747831f, -0.5060635209f, -0.5041542053f, -0.5025681257f,
+ -0.5015168786f, -0.5008758307f, -0.5000000000f},
+ {0.5000000000f, 0.5006161928f, 0.5010534525f, 0.5017392039f,
+ 0.5026661158f, 0.5033791661f, 0.5029437542f, 0.5004871488f,
+ 0.4933607578f, 0.4762222767f, 0.4391518533f, 0.3958169818f,
+ 0.3313112259f, 0.2418053150f, 0.1284317821f, 0.0000000000f,
+ -0.1284317672f, -0.2418053150f, -0.3313111961f, -0.3958169818f,
+ -0.4391519129f, -0.4762222767f, -0.4933606982f, -0.5004870892f,
+ -0.5029437542f, -0.5033791065f, -0.5026661158f, -0.5017392635f,
+ -0.5010534525f, -0.5006161332f, -0.5000000000f},
+ {0.5000000000f, 0.5003644228f, 0.5006047487f, 0.5009382963f,
+ 0.5012336969f, 0.5008131266f, 0.4993060529f, 0.4953505993f,
+ 0.4861895740f, 0.4664809406f, 0.4267134070f, 0.3821379840f,
+ 0.3176780939f, 0.2303762883f, 0.1217892319f, 0.0000000000f,
+ -0.1217892170f, -0.2303763181f, -0.3176780939f, -0.3821379840f,
+ -0.4267134368f, -0.4664809406f, -0.4861895442f, -0.4953505993f,
+ -0.4993061125f, -0.5008131266f, -0.5012336969f, -0.5009382963f,
+ -0.5006047487f, -0.5003644228f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.4993358850f, 0.4987771511f, 0.4976935983f,
+ 0.4954852760f, 0.4906864166f, 0.4851732254f, 0.4758279026f,
+ 0.4597451985f, 0.4319911301f, 0.3849090934f, 0.3379579186f,
+ 0.2754054368f, 0.1962166280f, 0.1024479866f, 0.0000000000f,
+ -0.1024479717f, -0.1962166429f, -0.2754054368f, -0.3379579186f,
+ -0.3849091232f, -0.4319911599f, -0.4597451687f, -0.4758278131f,
+ -0.4851732850f, -0.4906864166f, -0.4954852760f, -0.4976935983f,
+ -0.4987771511f, -0.4993358552f, -0.5000000000f},
+ {0.5000000000f, 0.4989066720f, 0.4980169535f, 0.4963521063f,
+ 0.4931337833f, 0.4866205156f, 0.4795958996f, 0.4683040977f,
+ 0.4498755038f, 0.4196476638f, 0.3707037568f, 0.3235089481f,
+ 0.2620966136f, 0.1858148128f, 0.0966935381f, 0.0000000000f,
+ -0.0966935307f, -0.1858148277f, -0.2620966136f, -0.3235089481f,
+ -0.3707037866f, -0.4196476638f, -0.4498754740f, -0.4683040380f,
+ -0.4795959294f, -0.4866205454f, -0.4931338131f, -0.4963521063f,
+ -0.4980169237f, -0.4989066422f, -0.5000000000f}},
{
- {134217744, 134746091, 135149853, 135851434, 137045902, 138994799,
- 140615296, 142522879, 144398695, 145263100, 154205556, 158059463,
- 154411290, 133097557, 81316205, 0, -81316205, -133097543,
- -154411303, -158059463, -154205556, -145263100, -144398695, -142522879,
- -140615296, -138994799, -137045918, -135851434, -135149837, -134746091,
- -134217744},
- {134217744, 134712087, 135088825, 135741208, 136844475, 138619336,
- 140061990, 141695888, 143142475, 143327466, 147825370, 149173983,
- 142666223, 119784477, 71366265, 0, -71366265, -119784477,
- -142666263, -149173983, -147825383, -143327466, -143142475, -141695873,
- -140062006, -138619320, -136844467, -135741224, -135088825, -134712087,
- -134217744},
- {134217744, 134660400, 134996180, 135574064, 136539790, 138054064,
- 139232828, 140465192, 141293136, 140526367, 139073637, 137423970,
- 127872797, 103967564, 60168572, 0, -60168579, -103967564,
- -127872810, -137423970, -139073650, -140526353, -141293121, -140465192,
- -139232828, -138054064, -136539805, -135574064, -134996180, -134660400,
- -134217744},
- {134217728, 134531071, 134764682, 135157698, 135784674, 136666568,
- 137216832, 137515087, 136953956, 134166704, 126324479, 115870417,
- 101486338, 78107065, 43180376, 0, -43180372, -78107065,
- -101486344, -115870417, -126324479, -134166690, -136953956, -137515087,
- -137216847, -136666568, -135784674, -135157698, -134764682, -134531071,
- -134217728},
- {134217728, 134405853, 134541061, 134757061, 135063333, 135358653,
- 135340907, 134821548, 133101766, 128751135, 119073216, 107576641,
- 90275394, 66047286, 35143667, 0, -35143664, -66047286,
- -90275401, -107576641, -119073231, -128751120, -133101751, -134821548,
- -135340923, -135358653, -135063349, -134757077, -134541061, -134405853,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 133896028, 133635530, 133150648, 132221176, 130362696,
- 128381245, 125228644, 120138520, 111878277, 98637718, 85963798,
- 69556315, 49259814, 25615335, 0, -25615335, -49259818,
- -69556315, -85963798, -98637718, -111878269, -120138520, -125228635,
- -128381253, -130362689, -132221184, -133150656, -133635522, -133896020,
- -134217728},
- {134217728, 133684024, 133261330, 132494150, 131082043, 128427016,
- 125767162, 121774846, 115728035, 106542671, 92727700, 80109047,
- 64295775, 45232367, 23417819, 0, -23417819, -45232367,
- -64295774, -80109052, -92727700, -106542671, -115728027, -121774851,
- -125767170, -128427016, -131082043, -132494166, -133261346, -133684032,
- -134217736},
- },
+
+ {0.5000000596f, 0.5019683242f, 0.5034724474f, 0.5060860515f,
+ 0.5105357766f, 0.5177959800f, 0.5238327980f, 0.5309391022f,
+ 0.5379270315f, 0.5411472321f, 0.5744604468f, 0.5888173580f,
+ 0.5752269030f, 0.4958270490f, 0.3029264808f, 0.0000000000f,
+ -0.3029264808f, -0.4958269894f, -0.5752269030f, -0.5888173580f,
+ -0.5744604468f, -0.5411472321f, -0.5379270315f, -0.5309391022f,
+ -0.5238327980f, -0.5177959800f, -0.5105358362f, -0.5060860515f,
+ -0.5034723878f, -0.5019683242f, -0.5000000596f},
+ {0.5000000596f, 0.5018416047f, 0.5032451153f, 0.5056754351f,
+ 0.5097854137f, 0.5163972378f, 0.5217715502f, 0.5278583169f,
+ 0.5332472920f, 0.5339364409f, 0.5506924391f, 0.5557163954f,
+ 0.5314731002f, 0.4462319613f, 0.2658600509f, 0.0000000000f,
+ -0.2658600509f, -0.4462319613f, -0.5314732194f, -0.5557163954f,
+ -0.5506924391f, -0.5339364409f, -0.5332472920f, -0.5278582573f,
+ -0.5217716098f, -0.5163972378f, -0.5097853541f, -0.5056754351f,
+ -0.5032451153f, -0.5018416047f, -0.5000000596f},
+ {0.5000000596f, 0.5016490817f, 0.5028999448f, 0.5050527453f,
+ 0.5086503625f, 0.5142914653f, 0.5186827183f, 0.5232735872f,
+ 0.5263579488f, 0.5235015154f, 0.5180896521f, 0.5119441748f,
+ 0.4763633013f, 0.3873093724f, 0.2241453975f, 0.0000000000f,
+ -0.2241454273f, -0.3873093724f, -0.4763633311f, -0.5119441748f,
+ -0.5180897117f, -0.5235014558f, -0.5263578892f, -0.5232735872f,
+ -0.5186827183f, -0.5142914653f, -0.5086504221f, -0.5050527453f,
+ -0.5028999448f, -0.5016490817f, -0.5000000596f},
+ {0.5000000000f, 0.5011672974f, 0.5020375848f, 0.5035016537f,
+ 0.5058373213f, 0.5091226101f, 0.5111725330f, 0.5122836232f,
+ 0.5101932287f, 0.4998099208f, 0.4705953598f, 0.4316509366f,
+ 0.3780660629f, 0.2909714878f, 0.1608594358f, 0.0000000000f,
+ -0.1608594209f, -0.2909714878f, -0.3780660927f, -0.4316509366f,
+ -0.4705953598f, -0.4998098612f, -0.5101932287f, -0.5122836232f,
+ -0.5111725926f, -0.5091226101f, -0.5058373213f, -0.5035016537f,
+ -0.5020375848f, -0.5011672974f, -0.5000000000f},
+ {0.5000000000f, 0.5007008314f, 0.5012044907f, 0.5020091534f,
+ 0.5031501055f, 0.5042502880f, 0.5041841865f, 0.5022494197f,
+ 0.4958427250f, 0.4796353579f, 0.4435822964f, 0.4007542133f,
+ 0.3363020420f, 0.2460453212f, 0.1309203655f, 0.0000000000f,
+ -0.1309203506f, -0.2460453212f, -0.3363020718f, -0.4007542133f,
+ -0.4435823560f, -0.4796352983f, -0.4958426654f, -0.5022494197f,
+ -0.5041842461f, -0.5042502880f, -0.5031501651f, -0.5020092130f,
+ -0.5012044907f, -0.5007008314f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.4988015890f, 0.4978311360f, 0.4960248172f,
+ 0.4925622642f, 0.4856388867f, 0.4782574177f, 0.4665130377f,
+ 0.4475508630f, 0.4167790711f, 0.3674541414f, 0.3202401102f,
+ 0.2591174543f, 0.1835071146f, 0.0954245627f, 0.0000000000f,
+ -0.0954245627f, -0.1835071146f, -0.2591174543f, -0.3202401102f,
+ -0.3674541414f, -0.4167790413f, -0.4475508630f, -0.4665130079f,
+ -0.4782574475f, -0.4856388569f, -0.4925622940f, -0.4960248470f,
+ -0.4978311062f, -0.4988015294f, -0.5000000000f},
+ {0.5000000000f, 0.4980117977f, 0.4964371324f, 0.4935791790f,
+ 0.4883186519f, 0.4784279168f, 0.4685191810f, 0.4536466599f,
+ 0.4311205149f, 0.3969023824f, 0.3454375863f, 0.2984294593f,
+ 0.2395204306f, 0.1685037017f, 0.0872381777f, 0.0000000000f,
+ -0.0872381777f, -0.1685037017f, -0.2395204306f, -0.2984294891f,
+ -0.3454375863f, -0.3969023824f, -0.4311204851f, -0.4536466599f,
+ -0.4685192108f, -0.4784279168f, -0.4883186519f, -0.4935792387f,
+ -0.4964371920f, -0.4980118275f, -0.5000000000f}},
{
- {134217744, 134911968, 135447966, 136391663, 138039000, 140866367,
- 143404554, 146764521, 151021632, 166927889, 195202182, 222570595,
- 257610421, 289862500, 252874234, 0, -252874341, -289862420,
- -257610501, -222570621, -195202209, -166927876, -151021632, -146764507,
- -143404554, -140866352, -138039000, -136391663, -135447966, -134911968,
- -134217744},
- {134217744, 134867355, 135367738, 136245965, 137770239, 140356424,
- 142639355, 145588557, 149154344, 160361636, 182196342, 200588382,
- 218415341, 220218448, 161428236, 0, -161428263, -220218448,
- -218415395, -200588409, -182196329, -160361623, -149154344, -145588542,
- -142639355, -140356409, -137770238, -136245981, -135367738, -134867355,
- -134217744},
- {134217744, 134799630, 135245963, 136025282, 137364449, 139591338,
- 141498666, 143852961, 146442545, 151309130, 165431889, 174391809,
- 177370022, 161281089, 104146144, 0, -104146171, -161281089,
- -177370049, -174391796, -165431903, -151309116, -146442531, -143852947,
- -141498681, -139591338, -137364449, -136025297, -135245963, -134799614,
- -134217744},
- {134217744, 134630198, 134942075, 135476620, 136362516, 137726655,
- 138754657, 139760139, 140244217, 138962344, 134419383, 131372064,
- 120561410, 96514144, 55111265, 0, -55111262, -96514144,
- -120561424, -131372064, -134419383, -138962344, -140244217, -139760124,
- -138754673, -137726655, -136362532, -135476604, -134942075, -134630198,
- -134217744},
- {134217728, 134466320, 134648961, 134950176, 135410401, 135985835,
- 136237563, 136102933, 134921759, 131284100, 122416352, 111353663,
- 94151405, 69439052, 37821289, 0, -37821289, -69439058,
- -94151405, -111353655, -122416359, -131284100, -134921744, -136102933,
- -136237563, -135985836, -135410401, -134950176, -134648961, -134466304,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 133800456, 133466639, 132853833, 131704577, 129480322,
- 127184162, 123637500, 118091100, 109378569, 95840339, 83173415,
- 67033158, 47318062, 24552229, 0, -24552227, -47318062,
- -67033165, -83173405, -95840348, -109378569, -118091100, -123637492,
- -127184170, -129480322, -131704577, -132853833, -133466647, -133800448,
- -134217736},
- {134217728, 133524250, 132980227, 132003691, 130239201, 127017985,
- 123891524, 119342831, 112695071, 102976138, 88899495, 76395462,
- 61022664, 42765392, 22085513, 0, -22085512, -42765395,
- -61022669, -76395462, -88899495, -102976129, -112695062, -119342822,
- -123891527, -127017985, -130239210, -132003691, -132980227, -133524250,
- -134217736},
- },
+
+ {0.5000000596f, 0.5025862455f, 0.5045830011f, 0.5080985427f,
+ 0.5142353773f, 0.5247681141f, 0.5342236161f, 0.5467404723f,
+ 0.5625994205f, 0.6218548417f, 0.7271847725f, 0.8291400671f,
+ 0.9596735835f, 1.0798219442f, 0.9420299530f, 0.0000000000f,
+ -0.9420303106f, -1.0798217058f, -0.9596738815f, -0.8291401863f,
+ -0.7271848917f, -0.6218547821f, -0.5625994205f, -0.5467404127f,
+ -0.5342236161f, -0.5247680545f, -0.5142353773f, -0.5080985427f,
+ -0.5045830011f, -0.5025862455f, -0.5000000596f},
+ {0.5000000596f, 0.5024200678f, 0.5042841434f, 0.5075557828f,
+ 0.5132341385f, 0.5228683949f, 0.5313730240f, 0.5423596501f,
+ 0.5556432009f, 0.5973936319f, 0.6787342429f, 0.7472499609f,
+ 0.8136605620f, 0.8203776479f, 0.6013670564f, 0.0000000000f,
+ -0.6013671160f, -0.8203776479f, -0.8136607409f, -0.7472500801f,
+ -0.6787342429f, -0.5973935723f, -0.5556432009f, -0.5423595905f,
+ -0.5313730240f, -0.5228683949f, -0.5132341385f, -0.5075558424f,
+ -0.5042841434f, -0.5024200678f, -0.5000000596f},
+ {0.5000000596f, 0.5021677613f, 0.5038304925f, 0.5067336559f,
+ 0.5117224455f, 0.5200182796f, 0.5271236300f, 0.5358940363f,
+ 0.5455409884f, 0.5636704564f, 0.6162818074f, 0.6496601105f,
+ 0.6607547998f, 0.6008188725f, 0.3879746199f, 0.0000000000f,
+ -0.3879747093f, -0.6008188725f, -0.6607549191f, -0.6496600509f,
+ -0.6162818670f, -0.5636703968f, -0.5455409288f, -0.5358939767f,
+ -0.5271236897f, -0.5200182796f, -0.5117224455f, -0.5067337155f,
+ -0.5038304925f, -0.5021677017f, -0.5000000596f},
+ {0.5000000596f, 0.5015365481f, 0.5026984215f, 0.5046897531f,
+ 0.5079899430f, 0.5130717754f, 0.5169013739f, 0.5206471086f,
+ 0.5224504471f, 0.5176750422f, 0.5007511973f, 0.4893990755f,
+ 0.4491262436f, 0.3595432043f, 0.2053054571f, 0.0000000000f,
+ -0.2053054571f, -0.3595432043f, -0.4491263032f, -0.4893990755f,
+ -0.5007511973f, -0.5176750422f, -0.5224504471f, -0.5206470490f,
+ -0.5169014335f, -0.5130717754f, -0.5079900026f, -0.5046896935f,
+ -0.5026984215f, -0.5015365481f, -0.5000000596f},
+ {0.5000000000f, 0.5009260774f, 0.5016064644f, 0.5027285814f,
+ 0.5044430494f, 0.5065867305f, 0.5075244904f, 0.5070229173f,
+ 0.5026227236f, 0.4890713692f, 0.4560364485f, 0.4148247242f,
+ 0.3507413268f, 0.2586806417f, 0.1408952773f, 0.0000000000f,
+ -0.1408952773f, -0.2586806417f, -0.3507413268f, -0.4148246944f,
+ -0.4560364783f, -0.4890713692f, -0.5026226640f, -0.5070229173f,
+ -0.5075244904f, -0.5065867305f, -0.5044430494f, -0.5027285814f,
+ -0.5016064644f, -0.5009260178f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.4984455407f, 0.4972019792f, 0.4949190915f,
+ 0.4906377792f, 0.4823517799f, 0.4737979174f, 0.4605855942f,
+ 0.4399236441f, 0.4074669182f, 0.3570330739f, 0.3098451197f,
+ 0.2497179806f, 0.1762735248f, 0.0914641768f, 0.0000000000f,
+ -0.0914641768f, -0.1762735248f, -0.2497179955f, -0.3098450899f,
+ -0.3570331335f, -0.4074669182f, -0.4399236441f, -0.4605855346f,
+ -0.4737979472f, -0.4823517799f, -0.4906377792f, -0.4949190915f,
+ -0.4972020090f, -0.4984455109f, -0.5000000000f},
+ {0.5000000000f, 0.4974165857f, 0.4953899384f, 0.4917520583f,
+ 0.4851788282f, 0.4731788635f, 0.4615318775f, 0.4445866942f,
+ 0.4198218584f, 0.3836160004f, 0.3311764300f, 0.2845952809f,
+ 0.2273271382f, 0.1593134999f, 0.0822749436f, 0.0000000000f,
+ -0.0822749436f, -0.1593135148f, -0.2273271531f, -0.2845952809f,
+ -0.3311764300f, -0.3836159706f, -0.4198218286f, -0.4445866644f,
+ -0.4615319073f, -0.4731788635f, -0.4851788580f, -0.4917520583f,
+ -0.4953899384f, -0.4974165857f, -0.5000000000f}},
{
- {134217744, 134970359, 135553135, 136582894, 138392877, 141541743,
- 144424094, 148346340, 153978836, 176372729, 215302062, 259806420,
- 336609085, 494304735, 975787497, -858993460, -975789097, -494304522,
- -336609192, -259806447, -215302075, -176372702, -153978836, -148346340,
- -144424109, -141541728, -138392877, -136582894, -135553135, -134970359,
- -134217744},
- {134217744, 134922022, 135466091, 136424566, 138099800, 140982070,
- 143578731, 147033572, 151452343, 168483023, 198394635, 228208128,
- 268470634, 312112739, 289892500, 0, -289892633, -312112739,
- -268470714, -228208155, -198394649, -168483009, -151452340, -147033558,
- -143578731, -140982070, -138099815, -136424566, -135466075, -134922022,
- -134217744},
- {134217744, 134848627, 135333994, 136184803, 137657591, 140143456,
- 142320970, 145102040, 148388972, 157750196, 177226889, 192583689,
- 205271595, 199995929, 140105690, 0, -140105757, -199995915,
- -205271635, -192583689, -177226916, -157750183, -148388958, -145102025,
- -142320985, -140143456, -137657591, -136184803, -135334009, -134848611,
- -134217744},
- {134217744, 134665058, 135004509, 135589124, 136567188, 138104822,
- 139307072, 140574980, 141457125, 140772491, 139820837, 138408050,
- 129080970, 105221711, 61032985, 0, -61032985, -105221711,
- -129080997, -138408050, -139820850, -140772477, -141457125, -140574962,
- -139307072, -138104806, -136567205, -135589140, -135004525, -134665058,
- -134217744},
- {134217728, 134487552, 134686918, 135018188, 135532903, 136208162,
- 136556685, 136561648, 135578778, 132209698, 123658874, 112777500,
- 95635765, 72064052, 39427432, 0, -39427432, -72064065,
- -95635772, -112777498, -123658874, -132209683, -135578762, -136561648,
- -136556685, -136208146, -135532903, -135018204, -134686918, -134487552,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 133766932, 133407501, 132750065, 131524599, 129174690,
- 126771678, 123092977, 117396601, 108539737, 94913060, 82256151,
- 66210183, 46688771, 24209158, 0, -24209156, -46688776,
- -66210179, -82256150, -94913060, -108539737, -117396605, -123092969,
- -126771680, -129174690, -131524607, -132750073, -133407493, -133766932,
- -134217736},
- {134217728, 133468277, 132881938, 131832762, 129947063, 126534099,
- 123252524, 118522767, 111685262, 101806166, 87663578, 75208916,
- 59986579, 41990286, 21668928, 0, -21668926, -41990288,
- -59986579, -75208922, -87663568, -101806156, -111685259, -118522767,
- -123252524, -126534093, -129947064, -131832762, -132881938, -133468277,
- -134217736},
- },
+
+ {0.5000000596f, 0.5028037429f, 0.5049747825f, 0.5088109374f,
+ 0.5155536532f, 0.5272840858f, 0.5380216837f, 0.5526331663f,
+ 0.5736158490f, 0.6570396423f, 0.8020626903f, 0.9678543210f,
+ 1.2539665699f, 1.8414286375f, 3.6350917816f, -3.2000000477f,
+ -3.6350977421f, -1.8414278030f, -1.2539669275f, -0.9678544402f,
+ -0.8020627499f, -0.6570395231f, -0.5736158490f, -0.5526331663f,
+ -0.5380217433f, -0.5272840261f, -0.5155536532f, -0.5088109374f,
+ -0.5049747825f, -0.5028037429f, -0.5000000596f},
+ {0.5000000596f, 0.5026236773f, 0.5046505332f, 0.5082210898f,
+ 0.5144618750f, 0.5251991153f, 0.5348724723f, 0.5477427244f,
+ 0.5642039180f, 0.6276481748f, 0.7390776277f, 0.8501415253f,
+ 1.0001310110f, 1.1627105474f, 1.0799337626f, 0.0000000000f,
+ -1.0799342394f, -1.1627105474f, -1.0001313686f, -0.8501416445f,
+ -0.7390776873f, -0.6276481152f, -0.5642039180f, -0.5477426648f,
+ -0.5348724723f, -0.5251991153f, -0.5144618750f, -0.5082210898f,
+ -0.5046504736f, -0.5026236773f, -0.5000000596f},
+ {0.5000000596f, 0.5023502707f, 0.5041584373f, 0.5073279142f,
+ 0.5128144622f, 0.5220750570f, 0.5301869512f, 0.5405472517f,
+ 0.5527920127f, 0.5876652598f, 0.6602216363f, 0.7174301744f,
+ 0.7646963000f, 0.7450429201f, 0.5219343901f, 0.0000000000f,
+ -0.5219346285f, -0.7450428605f, -0.7646964192f, -0.7174301744f,
+ -0.6602216959f, -0.5876652002f, -0.5527919531f, -0.5405471921f,
+ -0.5301870108f, -0.5220750570f, -0.5128144622f, -0.5073279142f,
+ -0.5041584969f, -0.5023502111f, -0.5000000596f},
+ {0.5000000596f, 0.5016664267f, 0.5029309988f, 0.5051088333f,
+ 0.5087524056f, 0.5144805312f, 0.5189592838f, 0.5236825943f,
+ 0.5269688368f, 0.5244184136f, 0.5208731890f, 0.5156101584f,
+ 0.4808640778f, 0.3919814229f, 0.2273655832f, 0.0000000000f,
+ -0.2273655832f, -0.3919814229f, -0.4808641970f, -0.5156101584f,
+ -0.5208732486f, -0.5244183540f, -0.5269688368f, -0.5236825347f,
+ -0.5189592838f, -0.5144804716f, -0.5087524652f, -0.5051088929f,
+ -0.5029310584f, -0.5016664267f, -0.5000000596f},
+ {0.5000000000f, 0.5010051727f, 0.5017478466f, 0.5029819608f,
+ 0.5048993826f, 0.5074149370f, 0.5087133050f, 0.5087317824f,
+ 0.5050703287f, 0.4925194979f, 0.4606651962f, 0.4201289415f,
+ 0.3562709987f, 0.2684594989f, 0.1468786299f, 0.0000000000f,
+ -0.1468786299f, -0.2684595585f, -0.3562710285f, -0.4201289117f,
+ -0.4606651962f, -0.4925194383f, -0.5050702691f, -0.5087317824f,
+ -0.5087133050f, -0.5074148774f, -0.5048993826f, -0.5029820204f,
+ -0.5017478466f, -0.5010051727f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.4983206391f, 0.4969816804f, 0.4945325255f,
+ 0.4899673164f, 0.4812132120f, 0.4722613096f, 0.4585570693f,
+ 0.4373364151f, 0.4043420255f, 0.3535786867f, 0.3064280450f,
+ 0.2466521561f, 0.1739292294f, 0.0901861414f, 0.0000000000f,
+ -0.0901861340f, -0.1739292443f, -0.2466521412f, -0.3064280450f,
+ -0.3535786867f, -0.4043420255f, -0.4373364449f, -0.4585570395f,
+ -0.4722613096f, -0.4812132120f, -0.4899673462f, -0.4945325553f,
+ -0.4969816506f, -0.4983206391f, -0.5000000000f},
+ {0.5000000000f, 0.4972080886f, 0.4950237870f, 0.4911153018f,
+ 0.4840905368f, 0.4713762403f, 0.4591514468f, 0.4415317178f,
+ 0.4160600305f, 0.3792575300f, 0.3265722692f, 0.2801750302f,
+ 0.2234674245f, 0.1564260125f, 0.0807230473f, 0.0000000000f,
+ -0.0807230398f, -0.1564260125f, -0.2234674245f, -0.2801750600f,
+ -0.3265722394f, -0.3792575002f, -0.4160600007f, -0.4415317178f,
+ -0.4591514468f, -0.4713762403f, -0.4840905368f, -0.4911153018f,
+ -0.4950237870f, -0.4972080886f, -0.5000000000f}},
{
- {134217744, 134911968, 135447966, 136391663, 138039000, 140866367,
- 143404554, 146764521, 151021632, 166927889, 195202182, 222570595,
- 257610421, 289862500, 252874234, 0, -252874341, -289862420,
- -257610501, -222570621, -195202209, -166927876, -151021632, -146764507,
- -143404554, -140866352, -138039000, -136391663, -135447966, -134911968,
- -134217744},
- {134217744, 134867355, 135367738, 136245965, 137770239, 140356424,
- 142639355, 145588557, 149154344, 160361636, 182196342, 200588382,
- 218415341, 220218448, 161428236, 0, -161428263, -220218448,
- -218415395, -200588409, -182196329, -160361623, -149154344, -145588542,
- -142639355, -140356409, -137770238, -136245981, -135367738, -134867355,
- -134217744},
- {134217744, 134799630, 135245963, 136025282, 137364449, 139591338,
- 141498666, 143852961, 146442545, 151309130, 165431889, 174391809,
- 177370022, 161281089, 104146144, 0, -104146171, -161281089,
- -177370049, -174391796, -165431903, -151309116, -146442531, -143852947,
- -141498681, -139591338, -137364449, -136025297, -135245963, -134799614,
- -134217744},
- {134217744, 134630198, 134942075, 135476620, 136362516, 137726655,
- 138754657, 139760139, 140244217, 138962344, 134419383, 131372064,
- 120561410, 96514144, 55111265, 0, -55111262, -96514144,
- -120561424, -131372064, -134419383, -138962344, -140244217, -139760124,
- -138754673, -137726655, -136362532, -135476604, -134942075, -134630198,
- -134217744},
- {134217728, 134466320, 134648961, 134950176, 135410401, 135985835,
- 136237563, 136102933, 134921759, 131284100, 122416352, 111353663,
- 94151405, 69439052, 37821289, 0, -37821289, -69439058,
- -94151405, -111353655, -122416359, -131284100, -134921744, -136102933,
- -136237563, -135985836, -135410401, -134950176, -134648961, -134466304,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 133800456, 133466639, 132853833, 131704577, 129480322,
- 127184162, 123637500, 118091100, 109378569, 95840339, 83173415,
- 67033158, 47318062, 24552229, 0, -24552227, -47318062,
- -67033165, -83173405, -95840348, -109378569, -118091100, -123637492,
- -127184170, -129480322, -131704577, -132853833, -133466647, -133800448,
- -134217736},
- {134217728, 133524250, 132980227, 132003691, 130239201, 127017985,
- 123891524, 119342831, 112695071, 102976138, 88899495, 76395462,
- 61022664, 42765392, 22085513, 0, -22085512, -42765395,
- -61022669, -76395462, -88899495, -102976129, -112695062, -119342822,
- -123891527, -127017985, -130239210, -132003691, -132980227, -133524250,
- -134217736},
- },
+
+ {0.5000000596f, 0.5025862455f, 0.5045830011f, 0.5080985427f,
+ 0.5142353773f, 0.5247681141f, 0.5342236161f, 0.5467404723f,
+ 0.5625994205f, 0.6218548417f, 0.7271847725f, 0.8291400671f,
+ 0.9596735835f, 1.0798219442f, 0.9420299530f, 0.0000000000f,
+ -0.9420303106f, -1.0798217058f, -0.9596738815f, -0.8291401863f,
+ -0.7271848917f, -0.6218547821f, -0.5625994205f, -0.5467404127f,
+ -0.5342236161f, -0.5247680545f, -0.5142353773f, -0.5080985427f,
+ -0.5045830011f, -0.5025862455f, -0.5000000596f},
+ {0.5000000596f, 0.5024200678f, 0.5042841434f, 0.5075557828f,
+ 0.5132341385f, 0.5228683949f, 0.5313730240f, 0.5423596501f,
+ 0.5556432009f, 0.5973936319f, 0.6787342429f, 0.7472499609f,
+ 0.8136605620f, 0.8203776479f, 0.6013670564f, 0.0000000000f,
+ -0.6013671160f, -0.8203776479f, -0.8136607409f, -0.7472500801f,
+ -0.6787342429f, -0.5973935723f, -0.5556432009f, -0.5423595905f,
+ -0.5313730240f, -0.5228683949f, -0.5132341385f, -0.5075558424f,
+ -0.5042841434f, -0.5024200678f, -0.5000000596f},
+ {0.5000000596f, 0.5021677613f, 0.5038304925f, 0.5067336559f,
+ 0.5117224455f, 0.5200182796f, 0.5271236300f, 0.5358940363f,
+ 0.5455409884f, 0.5636704564f, 0.6162818074f, 0.6496601105f,
+ 0.6607547998f, 0.6008188725f, 0.3879746199f, 0.0000000000f,
+ -0.3879747093f, -0.6008188725f, -0.6607549191f, -0.6496600509f,
+ -0.6162818670f, -0.5636703968f, -0.5455409288f, -0.5358939767f,
+ -0.5271236897f, -0.5200182796f, -0.5117224455f, -0.5067337155f,
+ -0.5038304925f, -0.5021677017f, -0.5000000596f},
+ {0.5000000596f, 0.5015365481f, 0.5026984215f, 0.5046897531f,
+ 0.5079899430f, 0.5130717754f, 0.5169013739f, 0.5206471086f,
+ 0.5224504471f, 0.5176750422f, 0.5007511973f, 0.4893990755f,
+ 0.4491262436f, 0.3595432043f, 0.2053054571f, 0.0000000000f,
+ -0.2053054571f, -0.3595432043f, -0.4491263032f, -0.4893990755f,
+ -0.5007511973f, -0.5176750422f, -0.5224504471f, -0.5206470490f,
+ -0.5169014335f, -0.5130717754f, -0.5079900026f, -0.5046896935f,
+ -0.5026984215f, -0.5015365481f, -0.5000000596f},
+ {0.5000000000f, 0.5009260774f, 0.5016064644f, 0.5027285814f,
+ 0.5044430494f, 0.5065867305f, 0.5075244904f, 0.5070229173f,
+ 0.5026227236f, 0.4890713692f, 0.4560364485f, 0.4148247242f,
+ 0.3507413268f, 0.2586806417f, 0.1408952773f, 0.0000000000f,
+ -0.1408952773f, -0.2586806417f, -0.3507413268f, -0.4148246944f,
+ -0.4560364783f, -0.4890713692f, -0.5026226640f, -0.5070229173f,
+ -0.5075244904f, -0.5065867305f, -0.5044430494f, -0.5027285814f,
+ -0.5016064644f, -0.5009260178f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.4984455407f, 0.4972019792f, 0.4949190915f,
+ 0.4906377792f, 0.4823517799f, 0.4737979174f, 0.4605855942f,
+ 0.4399236441f, 0.4074669182f, 0.3570330739f, 0.3098451197f,
+ 0.2497179806f, 0.1762735248f, 0.0914641768f, 0.0000000000f,
+ -0.0914641768f, -0.1762735248f, -0.2497179955f, -0.3098450899f,
+ -0.3570331335f, -0.4074669182f, -0.4399236441f, -0.4605855346f,
+ -0.4737979472f, -0.4823517799f, -0.4906377792f, -0.4949190915f,
+ -0.4972020090f, -0.4984455109f, -0.5000000000f},
+ {0.5000000000f, 0.4974165857f, 0.4953899384f, 0.4917520583f,
+ 0.4851788282f, 0.4731788635f, 0.4615318775f, 0.4445866942f,
+ 0.4198218584f, 0.3836160004f, 0.3311764300f, 0.2845952809f,
+ 0.2273271382f, 0.1593134999f, 0.0822749436f, 0.0000000000f,
+ -0.0822749436f, -0.1593135148f, -0.2273271531f, -0.2845952809f,
+ -0.3311764300f, -0.3836159706f, -0.4198218286f, -0.4445866644f,
+ -0.4615319073f, -0.4731788635f, -0.4851788580f, -0.4917520583f,
+ -0.4953899384f, -0.4974165857f, -0.5000000000f}},
{
- {134217744, 134746091, 135149853, 135851434, 137045902, 138994799,
- 140615296, 142522879, 144398709, 145263103, 154205570, 158059476,
- 154411303, 133097570, 81316211, 0, -81316218, -133097557,
- -154411316, -158059490, -154205570, -145263103, -144398709, -142522879,
- -140615296, -138994799, -137045918, -135851434, -135149837, -134746091,
- -134217744},
- {134217744, 134712087, 135088825, 135741208, 136844475, 138619336,
- 140061990, 141695888, 143142475, 143327470, 147825383, 149173983,
- 142666250, 119784490, 71366272, 0, -71366278, -119784490,
- -142666277, -149173996, -147825383, -143327466, -143142475, -141695873,
- -140062006, -138619320, -136844467, -135741224, -135088825, -134712087,
- -134217744},
- {134217744, 134660400, 134996180, 135574064, 136539790, 138054064,
- 139232828, 140465192, 141293136, 140526367, 139073637, 137423983,
- 127872810, 103967578, 60168579, 0, -60168585, -103967578,
- -127872810, -137423970, -139073650, -140526353, -141293121, -140465192,
- -139232843, -138054064, -136539805, -135574064, -134996180, -134660400,
- -134217744},
- {134217728, 134531071, 134764682, 135157698, 135784674, 136666568,
- 137216832, 137515087, 136953956, 134166704, 126324470, 115870417,
- 101486344, 78107071, 43180379, 0, -43180376, -78107078,
- -101486351, -115870417, -126324479, -134166695, -136953956, -137515087,
- -137216847, -136666568, -135784674, -135157698, -134764682, -134531071,
- -134217728},
- {134217728, 134405853, 134541061, 134757061, 135063333, 135358653,
- 135340907, 134821548, 133101766, 128751127, 119073224, 107576641,
- 90275401, 66047293, 35143667, 0, -35143667, -66047293,
- -90275401, -107576641, -119073231, -128751127, -133101751, -134821548,
- -135340923, -135358653, -135063349, -134757077, -134541061, -134405853,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 133896028, 133635530, 133150648, 132221176, 130362696,
- 128381245, 125228635, 120138520, 111878281, 98637718, 85963798,
- 69556315, 49259814, 25615335, 0, -25615335, -49259818,
- -69556310, -85963798, -98637709, -111878269, -120138520, -125228635,
- -128381253, -130362689, -132221184, -133150656, -133635522, -133896020,
- -134217728},
- {134217728, 133684024, 133261330, 132494150, 131082043, 128427016,
- 125767162, 121774843, 115728035, 106542671, 92727700, 80109047,
- 64295775, 45232366, 23417819, 0, -23417819, -45232366,
- -64295775, -80109047, -92727700, -106542662, -115728027, -121774851,
- -125767170, -128427016, -131082043, -132494166, -133261346, -133684032,
- -134217736},
- },
+
+ {0.5000000596f, 0.5019683242f, 0.5034724474f, 0.5060860515f,
+ 0.5105357766f, 0.5177959800f, 0.5238327980f, 0.5309391022f,
+ 0.5379270911f, 0.5411472321f, 0.5744605064f, 0.5888174176f,
+ 0.5752269030f, 0.4958270788f, 0.3029264808f, 0.0000000000f,
+ -0.3029265106f, -0.4958270490f, -0.5752269626f, -0.5888174772f,
+ -0.5744605064f, -0.5411472321f, -0.5379270911f, -0.5309391022f,
+ -0.5238327980f, -0.5177959800f, -0.5105358362f, -0.5060860515f,
+ -0.5034723878f, -0.5019683242f, -0.5000000596f},
+ {0.5000000596f, 0.5018416047f, 0.5032451153f, 0.5056754351f,
+ 0.5097854137f, 0.5163972378f, 0.5217715502f, 0.5278583169f,
+ 0.5332472920f, 0.5339364409f, 0.5506924391f, 0.5557163954f,
+ 0.5314732194f, 0.4462319911f, 0.2658600807f, 0.0000000000f,
+ -0.2658601105f, -0.4462319911f, -0.5314732790f, -0.5557164550f,
+ -0.5506924391f, -0.5339364409f, -0.5332472920f, -0.5278582573f,
+ -0.5217716098f, -0.5163972378f, -0.5097853541f, -0.5056754351f,
+ -0.5032451153f, -0.5018416047f, -0.5000000596f},
+ {0.5000000596f, 0.5016490817f, 0.5028999448f, 0.5050527453f,
+ 0.5086503625f, 0.5142914653f, 0.5186827183f, 0.5232735872f,
+ 0.5263579488f, 0.5235015154f, 0.5180896521f, 0.5119442344f,
+ 0.4763633311f, 0.3873094022f, 0.2241454273f, 0.0000000000f,
+ -0.2241454422f, -0.3873094022f, -0.4763633311f, -0.5119441748f,
+ -0.5180897117f, -0.5235014558f, -0.5263578892f, -0.5232735872f,
+ -0.5186827779f, -0.5142914653f, -0.5086504221f, -0.5050527453f,
+ -0.5028999448f, -0.5016490817f, -0.5000000596f},
+ {0.5000000000f, 0.5011672974f, 0.5020375848f, 0.5035016537f,
+ 0.5058373213f, 0.5091226101f, 0.5111725330f, 0.5122836232f,
+ 0.5101932287f, 0.4998099208f, 0.4705953300f, 0.4316509366f,
+ 0.3780660927f, 0.2909715176f, 0.1608594507f, 0.0000000000f,
+ -0.1608594358f, -0.2909715474f, -0.3780661225f, -0.4316509366f,
+ -0.4705953598f, -0.4998098910f, -0.5101932287f, -0.5122836232f,
+ -0.5111725926f, -0.5091226101f, -0.5058373213f, -0.5035016537f,
+ -0.5020375848f, -0.5011672974f, -0.5000000000f},
+ {0.5000000000f, 0.5007008314f, 0.5012044907f, 0.5020091534f,
+ 0.5031501055f, 0.5042502880f, 0.5041841865f, 0.5022494197f,
+ 0.4958427250f, 0.4796353281f, 0.4435823262f, 0.4007542133f,
+ 0.3363020718f, 0.2460453361f, 0.1309203655f, 0.0000000000f,
+ -0.1309203655f, -0.2460453361f, -0.3363020718f, -0.4007542133f,
+ -0.4435823560f, -0.4796353281f, -0.4958426654f, -0.5022494197f,
+ -0.5041842461f, -0.5042502880f, -0.5031501651f, -0.5020092130f,
+ -0.5012044907f, -0.5007008314f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.4988015890f, 0.4978311360f, 0.4960248172f,
+ 0.4925622642f, 0.4856388867f, 0.4782574177f, 0.4665130079f,
+ 0.4475508630f, 0.4167790711f, 0.3674541414f, 0.3202401102f,
+ 0.2591174543f, 0.1835071146f, 0.0954245627f, 0.0000000000f,
+ -0.0954245627f, -0.1835071146f, -0.2591174543f, -0.3202401102f,
+ -0.3674541116f, -0.4167790413f, -0.4475508630f, -0.4665130079f,
+ -0.4782574475f, -0.4856388569f, -0.4925622940f, -0.4960248470f,
+ -0.4978311062f, -0.4988015294f, -0.5000000000f},
+ {0.5000000000f, 0.4980117977f, 0.4964371324f, 0.4935791790f,
+ 0.4883186519f, 0.4784279168f, 0.4685191810f, 0.4536466300f,
+ 0.4311205149f, 0.3969023824f, 0.3454375863f, 0.2984294593f,
+ 0.2395204306f, 0.1685037017f, 0.0872381777f, 0.0000000000f,
+ -0.0872381777f, -0.1685037017f, -0.2395204306f, -0.2984294593f,
+ -0.3454375863f, -0.3969023526f, -0.4311204851f, -0.4536466599f,
+ -0.4685192108f, -0.4784279168f, -0.4883186519f, -0.4935792387f,
+ -0.4964371920f, -0.4980118275f, -0.5000000000f}},
{
- {134217728, 134498993, 134707335, 135054789, 135598916, 136328115,
- 136729141, 136810142, 135935974, 132715400, 124342636, 113565825,
- 96534671, 73558872, 40348522, 0, -40348522, -73558878,
- -96534671, -113565825, -124342636, -132715400, -135935959, -136810142,
- -136729157, -136328114, -135598899, -135054789, -134707335, -134498977,
- -134217728},
- {134217728, 134480680, 134674623, 134996162, 135493192, 136136017,
- 136453048, 136412541, 135364880, 131907703, 123252239, 112310291,
- 95147257, 71192238, 38892402, 0, -38892399, -71192238,
- -95147250, -112310298, -123252239, -131907703, -135364895, -136412525,
- -136453064, -136136017, -135493192, -134996146, -134674623, -134480664,
- -134217728},
- {134217728, 134452852, 134624907, 134907111, 135332868, 135845392,
- 136036318, 135814387, 134509933, 130707049, 121647427, 110478071,
- 93245017, 68600483, 36868716, 0, -36868712, -68600489,
- -93245017, -110478064, -121647443, -130707034, -134509933, -135814387,
- -136036318, -135845392, -135332883, -134907111, -134624907, -134452836,
- -134217728},
- {134217728, 134383129, 134500499, 134684594, 134933403, 135124815,
- 135007943, 134348507, 132435517, 127834959, 117883933, 106251321,
- 88935672, 64909116, 34475648, 0, -34475644, -64909116,
- -88935679, -106251321, -117883933, -127834944, -132435517, -134348491,
- -135007943, -135124799, -134933403, -134684610, -134500515, -134383113,
- -134217728},
- {134217728, 134315558, 134380057, 134469604, 134548899, 134436000,
- 134031448, 132969681, 130510521, 125220028, 114545015, 102579384,
- 85276069, 61841172, 32692547, 0, -32692547, -61841176,
- -85276077, -102579384, -114545015, -125220021, -130510521, -132969665,
- -134031463, -134436000, -134548899, -134469604, -134380057, -134315558,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 134039455, 133889472, 133598612, 133005800, 131717634,
- 130237695, 127729079, 123411911, 115961741, 103323251, 90719885,
- 73928580, 52671496, 27500669, 0, -27500669, -52671501,
- -73928580, -90719885, -103323262, -115961741, -123411903, -127729055,
- -130237711, -131717634, -133005808, -133598612, -133889472, -134039455,
- -134217728},
- {134217728, 133924242, 133685411, 133238504, 132374593, 130626201,
- 128740547, 125709420, 120762531, 112648312, 99510021, 86841264,
- 70356022, 49879278, 25955971, 0, -25955969, -49879283,
- -70356027, -86841273, -99510021, -112648303, -120762517, -125709412,
- -128740555, -130626208, -132374601, -133238504, -133685403, -133924234,
- -134217728},
- },
+
+ {0.5000000000f, 0.5010477901f, 0.5018239021f, 0.5031182766f,
+ 0.5051453114f, 0.5078617930f, 0.5093557239f, 0.5096575022f,
+ 0.5064009428f, 0.4944033921f, 0.4632124305f, 0.4230656624f,
+ 0.3596196771f, 0.2740281522f, 0.1503099501f, 0.0000000000f,
+ -0.1503099501f, -0.2740281820f, -0.3596196771f, -0.4230656624f,
+ -0.4632124305f, -0.4944033921f, -0.5064008832f, -0.5096575022f,
+ -0.5093557835f, -0.5078617930f, -0.5051452518f, -0.5031182766f,
+ -0.5018239021f, -0.5010477304f, -0.5000000000f},
+ {0.5000000000f, 0.5009795427f, 0.5017020702f, 0.5028998852f,
+ 0.5047514439f, 0.5071461797f, 0.5083272457f, 0.5081763268f,
+ 0.5042734742f, 0.4913944900f, 0.4591503739f, 0.4183884263f,
+ 0.3544511497f, 0.2652117610f, 0.1448854804f, 0.0000000000f,
+ -0.1448854804f, -0.2652117610f, -0.3544511199f, -0.4183884561f,
+ -0.4591503739f, -0.4913944900f, -0.5042735338f, -0.5081762671f,
+ -0.5083272457f, -0.5071461797f, -0.5047514439f, -0.5028998256f,
+ -0.5017020702f, -0.5009795427f, -0.5000000000f},
+ {0.5000000000f, 0.5008758903f, 0.5015168786f, 0.5025681257f,
+ 0.5041542053f, 0.5060635209f, 0.5067747831f, 0.5059480071f,
+ 0.5010885596f, 0.4869216979f, 0.4531719685f, 0.4115628898f,
+ 0.3473647535f, 0.2555567026f, 0.1373466700f, 0.0000000000f,
+ -0.1373466551f, -0.2555567324f, -0.3473647535f, -0.4115628600f,
+ -0.4531720281f, -0.4869216383f, -0.5010885596f, -0.5059480071f,
+ -0.5067747831f, -0.5060635209f, -0.5041542649f, -0.5025681257f,
+ -0.5015168786f, -0.5008758307f, -0.5000000000f},
+ {0.5000000000f, 0.5006161928f, 0.5010533929f, 0.5017392039f,
+ 0.5026661158f, 0.5033791661f, 0.5029437542f, 0.5004872084f,
+ 0.4933607578f, 0.4762223363f, 0.4391518831f, 0.3958170116f,
+ 0.3313111961f, 0.2418053001f, 0.1284317970f, 0.0000000000f,
+ -0.1284317821f, -0.2418053001f, -0.3313112259f, -0.3958170116f,
+ -0.4391518831f, -0.4762222767f, -0.4933607578f, -0.5004871488f,
+ -0.5029437542f, -0.5033791065f, -0.5026661158f, -0.5017392635f,
+ -0.5010534525f, -0.5006161332f, -0.5000000000f},
+ {0.5000000000f, 0.5003644228f, 0.5006047487f, 0.5009382963f,
+ 0.5012336969f, 0.5008131266f, 0.4993060529f, 0.4953506589f,
+ 0.4861895740f, 0.4664809704f, 0.4267134368f, 0.3821379840f,
+ 0.3176781237f, 0.2303763181f, 0.1217892319f, 0.0000000000f,
+ -0.1217892319f, -0.2303763330f, -0.3176781535f, -0.3821379840f,
+ -0.4267134368f, -0.4664809406f, -0.4861895740f, -0.4953505993f,
+ -0.4993061125f, -0.5008131266f, -0.5012336969f, -0.5009382963f,
+ -0.5006047487f, -0.5003644228f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.4993358850f, 0.4987771511f, 0.4976935983f,
+ 0.4954852164f, 0.4906864166f, 0.4851732254f, 0.4758279026f,
+ 0.4597451985f, 0.4319911599f, 0.3849090934f, 0.3379579186f,
+ 0.2754054070f, 0.1962166131f, 0.1024479717f, 0.0000000000f,
+ -0.1024479717f, -0.1962166280f, -0.2754054070f, -0.3379579186f,
+ -0.3849091530f, -0.4319911599f, -0.4597451687f, -0.4758278131f,
+ -0.4851732850f, -0.4906864166f, -0.4954852462f, -0.4976935983f,
+ -0.4987771511f, -0.4993358850f, -0.5000000000f},
+ {0.5000000000f, 0.4989066720f, 0.4980169535f, 0.4963521063f,
+ 0.4931337833f, 0.4866205156f, 0.4795958996f, 0.4683040977f,
+ 0.4498754740f, 0.4196476638f, 0.3707037270f, 0.3235089183f,
+ 0.2620966136f, 0.1858147979f, 0.0966935307f, 0.0000000000f,
+ -0.0966935158f, -0.1858148128f, -0.2620966136f, -0.3235089481f,
+ -0.3707037270f, -0.4196476340f, -0.4498754442f, -0.4683040380f,
+ -0.4795959294f, -0.4866205454f, -0.4931338131f, -0.4963521063f,
+ -0.4980169237f, -0.4989066422f, -0.5000000000f}},
{
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- },
+
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f}},
{
- {134217728, 133921369, 133680325, 133229561, 132358967, 130599331,
- 128703866, 125660282, 120698624, 112569265, 99420249, 86750797,
- 70273427, 49815207, 25920708, 0, -25920706, -49815216,
- -70273432, -86750797, -99420258, -112569265, -120698624, -125660282,
- -128703874, -130599331, -132358983, -133229561, -133680325, -133921361,
- -134217728},
- {134217728, 133939441, 133712333, 133285932, 132457505, 130768900,
- 128935465, 125970874, 121102931, 113070012, 99989904, 87325519,
- 70798668, 50223016, 26145306, 0, -26145303, -50223020,
- -70798668, -87325510, -99989904, -113070007, -121102923, -125970860,
- -128935481, -130768900, -132457513, -133285939, -133712341, -133939433,
- -134217728},
- {134217728, 133966965, 133761027, 133371807, 132607806, 131028081,
- 129290132, 126447716, 121725742, 113844587, 100875428, 88221954,
- 71620616, 50862942, 26498391, 0, -26498387, -50862942,
- -71620616, -88221954, -100875420, -113844579, -121725728, -126447716,
- -129290134, -131028089, -132607814, -133371815, -133761036, -133966957,
- -134217728},
- {134217728, 134036022, 133883399, 133587872, 132986916, 131684800,
- 130192440, 127667609, 123330612, 115858986, 103203513, 90596996,
- 73814421, 52581631, 27450707, 0, -27450704, -52581631,
- -73814421, -90596996, -103203522, -115858986, -123330612, -127667609,
- -130192441, -131684792, -132986917, -133587864, -133883399, -134036014,
- -134217728},
- {134217728, 134103202, 134002513, 133798640, 133358145, 132331971,
- 131086862, 128886498, 124951211, 117920856, 105625489, 93096793,
- 76149699, 54428898, 28481041, 0, -28481039, -54428898,
- -76149699, -93096785, -105625498, -117920856, -124951211, -128886489,
- -131086879, -132331963, -133358153, -133798640, -134002521, -134103194,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 134379666, 134494354, 134673574, 134913679, 135089351,
- 134957528, 134277005, 132335084, 127697337, 117706188, 106054041,
- 88737144, 64741149, 34377366, 0, -34377367, -64741156,
- -88737144, -106054041, -117706196, -127697337, -132335084, -134276990,
- -134957528, -135089351, -134913695, -134673590, -134494354, -134379666,
- -134217728},
- {134217728, 134496089, 134702142, 135045469, 135582090, 136297572,
- 136685224, 136746798, 135844838, 132586207, 124167625, 113363717,
- 96250743, 73172765, 40110159, 0, -40110156, -73172772,
- -96250750, -113363724, -124167639, -132586207, -135844838, -136746798,
- -136685224, -136297572, -135582122, -135045469, -134702142, -134496073,
- -134217728},
- },
+
+ {0.5000000000f, 0.4988959730f, 0.4979980290f, 0.4963187873f,
+ 0.4930755794f, 0.4865204096f, 0.4794592559f, 0.4681210220f,
+ 0.4496374130f, 0.4193531871f, 0.3703692853f, 0.3231719136f,
+ 0.2617889047f, 0.1855761111f, 0.0965621620f, 0.0000000000f,
+ -0.0965621546f, -0.1855761409f, -0.2617889345f, -0.3231719136f,
+ -0.3703693151f, -0.4193531871f, -0.4496374130f, -0.4681210220f,
+ -0.4794592857f, -0.4865204096f, -0.4930756390f, -0.4963187873f,
+ -0.4979980290f, -0.4988959432f, -0.5000000000f},
+ {0.5000000000f, 0.4989632964f, 0.4981172681f, 0.4965288043f,
+ 0.4934426546f, 0.4871520996f, 0.4803220332f, 0.4692780674f,
+ 0.4511435628f, 0.4212186337f, 0.3724914193f, 0.3253129125f,
+ 0.2637456059f, 0.1870953143f, 0.0973988548f, 0.0000000000f,
+ -0.0973988473f, -0.1870953292f, -0.2637456059f, -0.3253128827f,
+ -0.3724914193f, -0.4212186038f, -0.4511435330f, -0.4692780375f,
+ -0.4803220928f, -0.4871520996f, -0.4934426844f, -0.4965288043f,
+ -0.4981172979f, -0.4989632666f, -0.5000000000f},
+ {0.5000000000f, 0.4990658462f, 0.4982986450f, 0.4968487024f,
+ 0.4940025806f, 0.4881176353f, 0.4816432595f, 0.4710544348f,
+ 0.4534637332f, 0.4241041243f, 0.3757902384f, 0.3286523819f,
+ 0.2668075860f, 0.1894792318f, 0.0987142026f, 0.0000000000f,
+ -0.0987141877f, -0.1894792318f, -0.2668075860f, -0.3286523819f,
+ -0.3757902384f, -0.4241040945f, -0.4534636736f, -0.4710544348f,
+ -0.4816432893f, -0.4881176651f, -0.4940026104f, -0.4968487322f,
+ -0.4982987046f, -0.4990658164f, -0.5000000000f},
+ {0.5000000000f, 0.4993230999f, 0.4987545311f, 0.4976536036f,
+ 0.4954148531f, 0.4905641079f, 0.4850046337f, 0.4755989015f,
+ 0.4594423175f, 0.4316083491f, 0.3844630420f, 0.3375000954f,
+ 0.2749801576f, 0.1958818436f, 0.1022618562f, 0.0000000000f,
+ -0.1022618413f, -0.1958818436f, -0.2749801576f, -0.3375000954f,
+ -0.3844630718f, -0.4316083491f, -0.4594423175f, -0.4755989015f,
+ -0.4850046337f, -0.4905640781f, -0.4954148829f, -0.4976535738f,
+ -0.4987545311f, -0.4993230700f, -0.5000000000f},
+ {0.5000000000f, 0.4995733500f, 0.4991982579f, 0.4984387755f,
+ 0.4967978001f, 0.4929749966f, 0.4883366227f, 0.4801396132f,
+ 0.4654795229f, 0.4392894208f, 0.3934856057f, 0.3468125761f,
+ 0.2836797237f, 0.2027634382f, 0.1061001420f, 0.0000000000f,
+ -0.1061001420f, -0.2027634382f, -0.2836797237f, -0.3468125463f,
+ -0.3934856355f, -0.4392894208f, -0.4654795229f, -0.4801395833f,
+ -0.4883366823f, -0.4929749668f, -0.4967978299f, -0.4984387755f,
+ -0.4991982877f, -0.4995733202f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.5006032586f, 0.5010305047f, 0.5016981363f,
+ 0.5025926232f, 0.5032470226f, 0.5027559996f, 0.5002208352f,
+ 0.4929866195f, 0.4757096469f, 0.4384897351f, 0.3950820863f,
+ 0.3305716217f, 0.2411795706f, 0.1280656755f, 0.0000000000f,
+ -0.1280656755f, -0.2411796004f, -0.3305716217f, -0.3950820863f,
+ -0.4384897351f, -0.4757096469f, -0.4929866195f, -0.5002207756f,
+ -0.5027559996f, -0.5032470226f, -0.5025926828f, -0.5016981959f,
+ -0.5010305047f, -0.5006032586f, -0.5000000000f},
+ {0.5000000000f, 0.5010370016f, 0.5018045902f, 0.5030835867f,
+ 0.5050826669f, 0.5077480078f, 0.5091921091f, 0.5094215274f,
+ 0.5060614347f, 0.4939221144f, 0.4625604451f, 0.4223127663f,
+ 0.3585619628f, 0.2725898027f, 0.1494219899f, 0.0000000000f,
+ -0.1494219750f, -0.2725898027f, -0.3585619926f, -0.4223127961f,
+ -0.4625605047f, -0.4939221144f, -0.5060614347f, -0.5094215274f,
+ -0.5091921091f, -0.5077480078f, -0.5050827861f, -0.5030835867f,
+ -0.5018045902f, -0.5010369420f, -0.5000000000f}},
{
- {134217728, 133678764, 133252044, 132477911, 131054012, 128379841,
- 125703998, 121692333, 115624181, 106419205, 92593586, 79977943,
- 64179408, 45144170, 23370016, 0, -23370016, -45144171,
- -64179414, -79977946, -92593586, -106419205, -115624163, -121692333,
- -125704006, -128379841, -131054020, -132477902, -133252052, -133678756,
- -134217736},
- {134217728, 133712005, 133310620, 132580354, 131230923, 128677921,
- 126103542, 122214988, 116283239, 107204353, 93448335, 80814831,
- 64923238, 45708586, 23676173, 0, -23676171, -45708591,
- -64923238, -80814831, -93448335, -107204344, -116283230, -122214988,
- -126103542, -128677921, -131230923, -132580362, -133310620, -133711997,
- -134217736},
- {134217728, 133762594, 133399847, 132736656, 131501355, 129135285,
- 126718565, 123023009, 117307580, 108432557, 94794977, 82139615,
- 66105845, 46609132, 24165789, 0, -24165786, -46609132,
- -66105845, -82139614, -94794987, -108432548, -117307580, -123023009,
- -126718574, -129135285, -131501371, -132736656, -133399839, -133762594,
- -134217736},
- {134217728, 133889704, 133624356, 133130995, 132186884, 130303885,
- 128301191, 125121697, 120000061, 111707953, 98445440, 85770865,
- 69380893, 49124196, 25540859, 0, -25540856, -49124196,
- -69380893, -85770874, -98445449, -111707944, -120000061, -125121697,
- -128301191, -130303893, -132186900, -133130995, -133624357, -133889712,
- -134217728},
- {134217728, 134013488, 133843425, 133517257, 132862879, 131469448,
- 129895964, 127265729, 122800030, 115190043, 102426301, 89801131,
- 73076634, 52001860, 27128796, 0, -27128794, -52001864,
- -73076638, -89801131, -102426301, -115190039, -122800030, -127265729,
- -129895972, -131469447, -132862879, -133517265, -133843441, -134013480,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217728, 134524667, 134753225, 135137152, 135747532, 136598811,
- 137119081, 137373516, 136748951, 133873234, 125921352, 115399246,
- 100457878, 77154925, 42583859, 0, -42583859, -77154925,
- -100457884, -115399246, -125921369, -133873234, -136748936, -137373501,
- -137119096, -136598811, -135747548, -135137152, -134753241, -134524667,
- -134217728},
- {134217744, 134740697, 135140165, 135833916, 137013874, 138934982,
- 140527025, 142390622, 144197099, 144950610, 153156290, 156579036,
- 152419516, 130790170, 79555585, 0, -79555598, -130790170,
- -152419516, -156579036, -153156290, -144950597, -144197099, -142390622,
- -140527040, -138934982, -137013891, -135833916, -135140150, -134740697,
- -134217744},
- },
+
+ {0.5000000000f, 0.4979922175f, 0.4964025617f, 0.4935186803f,
+ 0.4882142544f, 0.4782521725f, 0.4682838917f, 0.4533392787f,
+ 0.4307336509f, 0.3964424431f, 0.3449379802f, 0.2979410589f,
+ 0.2390869260f, 0.1681751311f, 0.0870600939f, 0.0000000000f,
+ -0.0870600939f, -0.1681751460f, -0.2390869558f, -0.2979410589f,
+ -0.3449379802f, -0.3964424431f, -0.4307335615f, -0.4533392787f,
+ -0.4682839215f, -0.4782521725f, -0.4882142544f, -0.4935186505f,
+ -0.4964025617f, -0.4979921579f, -0.5000000000f},
+ {0.5000000000f, 0.4981160462f, 0.4966207743f, 0.4939002991f,
+ 0.4888732731f, 0.4793626070f, 0.4697723091f, 0.4552863240f,
+ 0.4331888258f, 0.3993673325f, 0.3481221795f, 0.3010587096f,
+ 0.2418579161f, 0.1702777445f, 0.0882006139f, 0.0000000000f,
+ -0.0882006139f, -0.1702777743f, -0.2418579161f, -0.3010587096f,
+ -0.3481221795f, -0.3993673027f, -0.4331887960f, -0.4552863240f,
+ -0.4697723091f, -0.4793626070f, -0.4888732731f, -0.4939003289f,
+ -0.4966207743f, -0.4981160164f, -0.5000000000f},
+ {0.5000000000f, 0.4983044863f, 0.4969531596f, 0.4944825768f,
+ 0.4898807108f, 0.4810664356f, 0.4720634520f, 0.4582964182f,
+ 0.4370048046f, 0.4039427638f, 0.3531388044f, 0.3059939146f,
+ 0.2462634593f, 0.1736325473f, 0.0900245756f, 0.0000000000f,
+ -0.0900245681f, -0.1736325473f, -0.2462634593f, -0.3059939146f,
+ -0.3531388342f, -0.4039427042f, -0.4370048046f, -0.4582964182f,
+ -0.4720634818f, -0.4810664356f, -0.4898807704f, -0.4944825768f,
+ -0.4969531298f, -0.4983044863f, -0.5000000000f},
+ {0.5000000000f, 0.4987780154f, 0.4977895021f, 0.4959515929f,
+ 0.4924345016f, 0.4854198098f, 0.4779591858f, 0.4661146402f,
+ 0.4470350742f, 0.4161445498f, 0.3667378426f, 0.3195213675f,
+ 0.2584639788f, 0.1830018908f, 0.0951471180f, 0.0000000000f,
+ -0.0951471031f, -0.1830018908f, -0.2584639788f, -0.3195213974f,
+ -0.3667378724f, -0.4161445200f, -0.4470350742f, -0.4661146402f,
+ -0.4779591858f, -0.4854198396f, -0.4924345613f, -0.4959515929f,
+ -0.4977895319f, -0.4987780452f, -0.5000000000f},
+ {0.5000000000f, 0.4992391467f, 0.4986056089f, 0.4973905385f,
+ 0.4949527979f, 0.4897618592f, 0.4839001894f, 0.4741017818f,
+ 0.4574657679f, 0.4291163385f, 0.3815677166f, 0.3345352709f,
+ 0.2722316682f, 0.1937220246f, 0.1010626405f, 0.0000000000f,
+ -0.1010626331f, -0.1937220395f, -0.2722316980f, -0.3345352709f,
+ -0.3815677166f, -0.4291163385f, -0.4574657679f, -0.4741017818f,
+ -0.4839001894f, -0.4897618592f, -0.4949527979f, -0.4973905683f,
+ -0.4986056685f, -0.4992391169f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000000f, 0.5011434555f, 0.5019949079f, 0.5034251213f,
+ 0.5056989789f, 0.5088702440f, 0.5108084083f, 0.5117562413f,
+ 0.5094295144f, 0.4987166524f, 0.4690935910f, 0.4298956990f,
+ 0.3742347658f, 0.2874245048f, 0.1586372405f, 0.0000000000f,
+ -0.1586372405f, -0.2874245048f, -0.3742347956f, -0.4298956990f,
+ -0.4690936506f, -0.4987166524f, -0.5094294548f, -0.5117561817f,
+ -0.5108084679f, -0.5088702440f, -0.5056990385f, -0.5034251213f,
+ -0.5019949675f, -0.5011434555f, -0.5000000000f},
+ {0.5000000596f, 0.5019482374f, 0.5034363270f, 0.5060207844f,
+ 0.5104164481f, 0.5175731182f, 0.5235039592f, 0.5304464102f,
+ 0.5371760726f, 0.5399830937f, 0.5705516338f, 0.5833023787f,
+ 0.5678069592f, 0.4872313440f, 0.2963676453f, 0.0000000000f,
+ -0.2963677049f, -0.4872313440f, -0.5678069592f, -0.5833023787f,
+ -0.5705516338f, -0.5399830341f, -0.5371760726f, -0.5304464102f,
+ -0.5235040188f, -0.5175731182f, -0.5104165077f, -0.5060207844f,
+ -0.5034362674f, -0.5019482374f, -0.5000000596f}},
{
- {134217728, 133517388, 132968168, 131982689, 130203271, 126958371,
- 123812646, 119241372, 112569785, 102830521, 88745154, 76246960,
- 60892748, 42668052, 22033146, 0, -22033144, -42668058,
- -60892753, -76246960, -88745154, -102830531, -112569785, -119241363,
- -123812646, -126958371, -130203280, -131982697, -132968160, -133517380,
- -134217736},
- {134217728, 133560667, 133044207, 132115111, 130430074, 127335394,
- 124312090, 119884885, 113366063, 103758318, 89731133, 77197209,
- 61725371, 43292651, 22369435, 0, -22369434, -43292655,
- -61725371, -77197209, -89731143, -103758309, -113366066, -119884894,
- -124312098, -127335394, -130430074, -132115119, -133044215, -133560651,
- -134217736},
- {134217728, 133626556, 133160120, 132317284, 130777308, 127915335,
- 125083431, 120883935, 114610226, 105218855, 91295851, 78713135,
- 63059915, 44297538, 22911785, 0, -22911782, -44297538,
- -63059910, -78713135, -91295851, -105218855, -114610226, -120883926,
- -125083440, -127915335, -130777308, -132317293, -133160128, -133626540,
- -134217736},
- {134217728, 133792202, 133452102, 132828323, 131660297, 129405046,
- 127082463, 123503081, 117919375, 109170723, 95610055, 82945267,
- 66828178, 47161136, 24466610, 0, -24466610, -47161136,
- -66828178, -82945267, -95610064, -109170725, -117919366, -123503090,
- -127082486, -129405039, -131660312, -132828331, -133452110, -133792210,
- -134217736},
- {134217728, 133953625, 133737455, 133330222, 132534982, 130902453,
- 129118100, 126216242, 121423078, 113467678, 100443871, 87784612,
- 71219202, 50550149, 26325706, 0, -26325706, -50550154,
- -71219202, -87784603, -100443871, -113467678, -121423078, -126216226,
- -129118109, -130902436, -132534997, -133330214, -133737456, -133953625,
- -134217728},
- {134217728, 134209240, 134190888, 134132864, 133949552, 133371536,
- 132534624, 130880344, 127640160, 121406192, 109814504, 97493904,
- 80326624, 57781472, 30369936, 0, -30369936, -57781472,
- -80326624, -97493904, -109814504, -121406184, -127640152, -130880344,
- -132534632, -133371536, -133949560, -134132872, -134190888, -134209240,
- -134217728},
- {134217744, 134621813, 134927051, 135449572, 136313400, 137636071,
- 138622650, 139566056, 139956832, 138536878, 133180717, 129783677,
- 118675624, 94628818, 53853299, 0, -53853295, -94628811,
- -118675637, -129783677, -133180717, -138536882, -139956832, -139566056,
- -138622666, -137636071, -136313400, -135449572, -134927051, -134621813,
- -134217744},
- {134217744, 134904883, 135435219, 136368502, 137996233, 140785045,
- 143282261, 146575942, 150720567, 165849956, 193015195, 218765208,
- 250475834, 276007487, 232012394, 0, -232012528, -276007460,
- -250475861, -218765208, -193015222, -165849956, -150720553, -146575942,
- -143282275, -140785029, -137996233, -136368502, -135435219, -134904883,
- -134217744},
- },
+
+ {0.5000000000f, 0.4973910451f, 0.4953450263f, 0.4916738272f,
+ 0.4850449860f, 0.4729567766f, 0.4612380564f, 0.4442087412f,
+ 0.4193551242f, 0.3830735385f, 0.3306014538f, 0.2840420604f,
+ 0.2268431634f, 0.1589508802f, 0.0820798650f, 0.0000000000f,
+ -0.0820798576f, -0.1589508951f, -0.2268431783f, -0.2840420604f,
+ -0.3306014538f, -0.3830735683f, -0.4193551242f, -0.4442086816f,
+ -0.4612380564f, -0.4729567766f, -0.4850450158f, -0.4916738570f,
+ -0.4953449965f, -0.4973909855f, -0.5000000000f},
+ {0.5000000000f, 0.4975522459f, 0.4956282973f, 0.4921671450f,
+ 0.4858898818f, 0.4743613005f, 0.4630986154f, 0.4466060102f,
+ 0.4223214984f, 0.3865298629f, 0.3342745304f, 0.2875820100f,
+ 0.2299449295f, 0.1612776965f, 0.0833326429f, 0.0000000000f,
+ -0.0833326355f, -0.1612777114f, -0.2299449295f, -0.2875820100f,
+ -0.3342745602f, -0.3865298331f, -0.4223214984f, -0.4466060400f,
+ -0.4630986452f, -0.4743613005f, -0.4858898818f, -0.4921671748f,
+ -0.4956283271f, -0.4975521863f, -0.5000000000f},
+ {0.5000000000f, 0.4977977276f, 0.4960601032f, 0.4929202795f,
+ 0.4871834517f, 0.4765217602f, 0.4659720957f, 0.4503277540f,
+ 0.4269563556f, 0.3919707835f, 0.3401035368f, 0.2932292819f,
+ 0.2349164933f, 0.1650211811f, 0.0853530467f, 0.0000000000f,
+ -0.0853530392f, -0.1650211811f, -0.2349164784f, -0.2932292819f,
+ -0.3401035368f, -0.3919707835f, -0.4269563556f, -0.4503277242f,
+ -0.4659721255f, -0.4765217602f, -0.4871834517f, -0.4929203391f,
+ -0.4960601330f, -0.4977976680f, -0.5000000000f},
+ {0.5000000000f, 0.4984147847f, 0.4971478283f, 0.4948240519f,
+ 0.4904728234f, 0.4820713699f, 0.4734190702f, 0.4600848258f,
+ 0.4392839074f, 0.4066926241f, 0.3561752141f, 0.3089951873f,
+ 0.2489543557f, 0.1756889224f, 0.0911452249f, 0.0000000000f,
+ -0.0911452249f, -0.1756889224f, -0.2489543557f, -0.3089951873f,
+ -0.3561752439f, -0.4066926539f, -0.4392838776f, -0.4600848556f,
+ -0.4734191597f, -0.4820713401f, -0.4904728830f, -0.4948240817f,
+ -0.4971478581f, -0.4984148145f, -0.5000000000f},
+ {0.5000000000f, 0.4990161359f, 0.4982108474f, 0.4966937900f,
+ 0.4937312901f, 0.4876496494f, 0.4810023904f, 0.4701921344f,
+ 0.4523362219f, 0.4227000475f, 0.3741825819f, 0.3270231485f,
+ 0.2653121948f, 0.1883139759f, 0.0980708972f, 0.0000000000f,
+ -0.0980708972f, -0.1883139908f, -0.2653121948f, -0.3270231187f,
+ -0.3741825819f, -0.4227000475f, -0.4523362219f, -0.4701920748f,
+ -0.4810024500f, -0.4876495600f, -0.4937313497f, -0.4966937602f,
+ -0.4982108474f, -0.4990161359f, -0.5000000000f},
+ {0.5000000000f, 0.4999683797f, 0.4999000132f, 0.4996838570f,
+ 0.4990009665f, 0.4968476892f, 0.4937299490f, 0.4875672758f,
+ 0.4754966497f, 0.4522733092f, 0.4090909064f, 0.3631930947f,
+ 0.2992399931f, 0.2152527571f, 0.1131368279f, 0.0000000000f,
+ -0.1131368279f, -0.2152527571f, -0.2992399931f, -0.3631930947f,
+ -0.4090909064f, -0.4522732794f, -0.4754966199f, -0.4875672758f,
+ -0.4937299788f, -0.4968476892f, -0.4990009964f, -0.4996838868f,
+ -0.4999000132f, -0.4999683797f, -0.5000000000f},
+ {0.5000000596f, 0.5015053153f, 0.5026424527f, 0.5045889616f,
+ 0.5078070164f, 0.5127342939f, 0.5164096355f, 0.5199240446f,
+ 0.5213798285f, 0.5160900950f, 0.4961368442f, 0.4834818840f,
+ 0.4421011508f, 0.3525198102f, 0.2006191760f, 0.0000000000f,
+ -0.2006191611f, -0.3525197804f, -0.4421012104f, -0.4834818840f,
+ -0.4961368442f, -0.5160900950f, -0.5213798285f, -0.5199240446f,
+ -0.5164096951f, -0.5127342939f, -0.5078070164f, -0.5045889616f,
+ -0.5026424527f, -0.5015053153f, -0.5000000596f},
+ {0.5000000596f, 0.5025598407f, 0.5045354962f, 0.5080122352f,
+ 0.5140760541f, 0.5244651437f, 0.5337679982f, 0.5460379124f,
+ 0.5614778399f, 0.6178392172f, 0.7190376520f, 0.8149639368f,
+ 0.9330952168f, 1.0282080173f, 0.8643135428f, 0.0000000000f,
+ -0.8643140197f, -1.0282078981f, -0.9330952764f, -0.8149639368f,
+ -0.7190377116f, -0.6178392172f, -0.5614778399f, -0.5460379124f,
+ -0.5337680578f, -0.5244650841f, -0.5140760541f, -0.5080122352f,
+ -0.5045354962f, -0.5025598407f, -0.5000000596f}}
+
};
-const WORD32 ixheaacd_beta_Q28[16][8][31] = {
+const FLOAT32 ixheaacd_beta[16][8][31] = {
{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {3, 524548, 928967, 1639916, 2878403, 5000493, 6908550,
- 9455203, 12765894, 16898498, 21732020, 25132388, 28389032, 31149502,
- 33022448, 33688388, 33022450, 31149502, 28389032, 25132388, 21732022,
- 16898498, 12765894, 9455202, 6908550, 5000493, 2878403, 1639916,
- 928967, 524548, 3},
- {5, 812423, 1439377, 2542753, 4468501, 7778568, 10765468,
- 14766874, 19992330, 26548934, 34259648, 39707896, 44942048, 49389848,
- 52412912, 53488748, 52412912, 49389844, 44942052, 39707896, 34259652,
- 26548934, 19992330, 14766874, 10765469, 7778568, 4468501, 2542753,
- 1439377, 812423, 5},
- {7, 1202481, 2132639, 3774216, 6653171, 11641950, 16186106,
- 22334354, 30462996, 40811628, 53176452, 62028444, 70614328, 77968304,
- 82994936, 84789064, 82994936, 77968304, 70614328, 62028448, 53176452,
- 40811628, 30462996, 22334354, 16186107, 11641950, 6653172, 3774216,
- 2132639, 1202481, 7},
- {8, 1400871, 2486989, 4409108, 7796283, 13714060,
- 19156910, 26599080, 36572432, 49482236, 65204176, 76647304,
- 87887896, 97621072, 104327480, 106731360, 104327488, 97621064,
- 87887896, 76647304, 65204180, 49482240, 36572432, 26599080,
- 19156912, 13714061, 7796283, 4409108, 2486989, 1400871,
- 8},
- {8, 1509476, 2684086, 4772024, 8480193, 15047650,
- 21188892, 29744494, 41501680, 57227068, 77169768, 92246064,
- 107526888, 121143312, 130736624, 134217728, 130736624, 121143304,
- 107526896, 92246064, 77169768, 57227064, 41501676, 29744492,
- 21188894, 15047650, 8480194, 4772024, 2684086, 1509476,
- 8},
- {7, 1223918, 2181987, 3897455, 6984316, 12583060,
- 17979762, 25778776, 37085592, 53441976, 78581112, 104374688,
- 137112768, 174183376, 206541584, 219922496, 206541600, 174183344,
- 137112784, 104374688, 78581120, 53441980, 37085592, 25778774,
- 17979764, 12583059, 6984316, 3897455, 2181987, 1223918,
- 7},
- {1, 214133, 382441, 685346, 1235544, 2251347,
- 3254155, 4749173, 7031145, 11641319, 21058462, 33931652,
- 61102220, 133797576, 430779840, 1577812480, 430780608, 133797536,
- 61102232, 33931652, 21058464, 11641320, 7031145, 4749173,
- 3254155, 2251347, 1235544, 685346, 382441, 214133,
- 1},
- },
+
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000112f, 0.0019540936f, 0.0034606718f, 0.0061091632f,
+ 0.0107228868f, 0.0186282881f, 0.0257363543f, 0.0352233760f,
+ 0.0475566611f, 0.0629518107f, 0.0809580833f, 0.0936254412f,
+ 0.1057573855f, 0.1160409376f, 0.1230182052f, 0.1254990250f,
+ 0.1230182126f, 0.1160409376f, 0.1057573855f, 0.0936254412f,
+ 0.0809580907f, 0.0629518107f, 0.0475566611f, 0.0352233723f,
+ 0.0257363543f, 0.0186282881f, 0.0107228868f, 0.0061091632f,
+ 0.0034606718f, 0.0019540936f, 0.0000000112f},
+ {0.0000000186f, 0.0030265115f, 0.0053620972f, 0.0094724931f,
+ 0.0166464634f, 0.0289774239f, 0.0401044935f, 0.0550108925f,
+ 0.0744772330f, 0.0989024863f, 0.1276271343f, 0.1479234397f,
+ 0.1674221754f, 0.1839915216f, 0.1952533126f, 0.1992611140f,
+ 0.1952533126f, 0.1839915067f, 0.1674221903f, 0.1479234397f,
+ 0.1276271492f, 0.0989024863f, 0.0744772330f, 0.0550108925f,
+ 0.0401044972f, 0.0289774239f, 0.0166464634f, 0.0094724931f,
+ 0.0053620972f, 0.0030265115f, 0.0000000186f},
+ {0.0000000261f, 0.0044795908f, 0.0079446994f, 0.0140600502f,
+ 0.0247849934f, 0.0433696434f, 0.0602979437f, 0.0832019523f,
+ 0.1134835035f, 0.1520351619f, 0.1980977207f, 0.2310739607f,
+ 0.2630588710f, 0.2904545665f, 0.3091802299f, 0.3158638775f,
+ 0.3091802299f, 0.2904545665f, 0.2630588710f, 0.2310739756f,
+ 0.1980977207f, 0.1520351619f, 0.1134835035f, 0.0832019523f,
+ 0.0602979474f, 0.0433696434f, 0.0247849971f, 0.0140600502f,
+ 0.0079446994f, 0.0044795908f, 0.0000000261f},
+ {0.0000000298f, 0.0052186511f, 0.0092647560f, 0.0164252073f,
+ 0.0290434174f, 0.0510888547f, 0.0713650510f, 0.0990892947f,
+ 0.1362429261f, 0.1843356937f, 0.2429044843f, 0.2855334580f,
+ 0.3274079263f, 0.3636668324f, 0.3886501491f, 0.3976052999f,
+ 0.3886501789f, 0.3636668026f, 0.3274079263f, 0.2855334580f,
+ 0.2429044992f, 0.1843357086f, 0.1362429261f, 0.0990892947f,
+ 0.0713650584f, 0.0510888584f, 0.0290434174f, 0.0164252073f,
+ 0.0092647560f, 0.0052186511f, 0.0000000298f},
+ {0.0000000298f, 0.0056232363f, 0.0099989995f, 0.0177771747f,
+ 0.0315911807f, 0.0560568646f, 0.0789347738f, 0.1108068749f,
+ 0.1546058059f, 0.2131874412f, 0.2874797881f, 0.3436433673f,
+ 0.4005688727f, 0.4512940049f, 0.4870318770f, 0.5000000000f,
+ 0.4870318770f, 0.4512939751f, 0.4005689025f, 0.3436433673f,
+ 0.2874797881f, 0.2131874263f, 0.1546057910f, 0.1108068675f,
+ 0.0789347813f, 0.0560568646f, 0.0315911844f, 0.0177771747f,
+ 0.0099989995f, 0.0056232363f, 0.0000000298f},
+ {0.0000000261f, 0.0045594499f, 0.0081285350f, 0.0145191513f,
+ 0.0260186046f, 0.0468755513f, 0.0669798329f, 0.0960334241f,
+ 0.1381545961f, 0.1990868747f, 0.2927374542f, 0.3888260126f,
+ 0.5107848644f, 0.6488836408f, 0.7694273591f, 0.8192751408f,
+ 0.7694274187f, 0.6488835216f, 0.5107849240f, 0.3888260126f,
+ 0.2927374840f, 0.1990868896f, 0.1381545961f, 0.0960334167f,
+ 0.0669798404f, 0.0468755476f, 0.0260186046f, 0.0145191513f,
+ 0.0081285350f, 0.0045594499f, 0.0000000261f},
+ {0.0000000037f, 0.0007977076f, 0.0014247037f, 0.0025531128f,
+ 0.0046027601f, 0.0083869211f, 0.0121226721f, 0.0176920481f,
+ 0.0261930563f, 0.0433672927f, 0.0784488842f, 0.1264052540f,
+ 0.2276235074f, 0.4984348118f, 1.6047799587f, 5.8778095245f,
+ 1.6047828197f, 0.4984346628f, 0.2276235521f, 0.1264052540f,
+ 0.0784488916f, 0.0433672965f, 0.0261930563f, 0.0176920481f,
+ 0.0121226721f, 0.0083869211f, 0.0046027601f, 0.0025531128f,
+ 0.0014247037f, 0.0007977076f, 0.0000000037f}},
{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {3, 524756, 929618, 1641931, 2884546, 5018684, 6942684,
- 9517694, 12876462, 17085148, 22027532, 25515680, 28863994, 31707368,
- 33639036, 34326304, 33639036, 31707366, 28863996, 25515680, 22027532,
- 17085148, 12876462, 9517694, 6942685, 5018684, 2884546, 1641932,
- 929618, 524756, 3},
- {5, 812713, 1440285, 2545568, 4477108, 7804208, 10813826,
- 14855985, 20151268, 26819764, 34692788, 40273396, 45646932, 50221664,
- 53335084, 54443828, 53335084, 50221660, 45646932, 40273396, 34692788,
- 26819762, 20151268, 14855984, 10813826, 7804208, 4477108, 2545568,
- 1440285, 812713, 5},
- {7, 1202789, 2133603, 3777225, 6662453, 11670018, 16239749,
- 22434930, 30646316, 41132172, 53703904, 62730216, 71504264, 79033256,
- 84186408, 86026976, 84186408, 79033248, 71504272, 62730216, 53703904,
- 41132176, 30646314, 22434930, 16239752, 11670018, 6662454, 3777225,
- 2133603, 1202789, 7},
- {8, 1401091, 2487681, 4411274, 7803027, 13734770,
- 19197032, 26675680, 36715348, 49739444, 65641580, 77242592,
- 88658976, 98560160, 105390504, 107840400, 105390512, 98560152,
- 88658992, 77242592, 65641576, 49739444, 36715348, 26675674,
- 19197034, 13734770, 7803028, 4411274, 2487680, 1401091,
- 8},
- {8, 1509476, 2684086, 4772024, 8480193, 15047650,
- 21188892, 29744494, 41501680, 57227068, 77169768, 92246064,
- 107526888, 121143312, 130736624, 134217728, 130736624, 121143304,
- 107526896, 92246064, 77169768, 57227064, 41501676, 29744492,
- 21188894, 15047650, 8480194, 4772024, 2684086, 1509476,
- 8},
- {7, 1223607, 2180998, 3894286, 6974063, 12549334,
- 17910016, 25632730, 36775224, 52772652, 75633064, 99236928,
- 128381344, 160330848, 187347760, 198291376, 187347792, 160330816,
- 128381360, 99236928, 75633072, 52772648, 36775220, 25632728,
- 17910018, 12549334, 6974064, 3894286, 2180998, 1223607,
- 7},
- {1, 214041, 382148, 684396, 1232418, 2240724,
- 3231452, 4699171, 6913169, 11028142, 19133978, 29199466,
- 47298748, 81631520, 140893408, 184843504, 140893488, 81631504,
- 47298752, 29199468, 19133982, 11028142, 6913169, 4699170,
- 3231452, 2240724, 1232418, 684397, 382148, 214041,
- 1},
- },
+
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000112f, 0.0019548684f, 0.0034630969f, 0.0061166696f,
+ 0.0107457712f, 0.0186960548f, 0.0258635134f, 0.0354561731f,
+ 0.0479685590f, 0.0636471361f, 0.0820589513f, 0.0950533152f,
+ 0.1075267568f, 0.1181191504f, 0.1253151745f, 0.1278754473f,
+ 0.1253151745f, 0.1181191429f, 0.1075267643f, 0.0950533152f,
+ 0.0820589513f, 0.0636471361f, 0.0479685590f, 0.0354561731f,
+ 0.0258635171f, 0.0186960548f, 0.0107457712f, 0.0061166734f,
+ 0.0034630969f, 0.0019548684f, 0.0000000112f},
+ {0.0000000186f, 0.0030275919f, 0.0053654797f, 0.0094829798f,
+ 0.0166785270f, 0.0290729403f, 0.0402846411f, 0.0553428568f,
+ 0.0750693232f, 0.0999114066f, 0.1292407066f, 0.1500300914f,
+ 0.1700480729f, 0.1870902777f, 0.1986886710f, 0.2028190643f,
+ 0.1986886710f, 0.1870902628f, 0.1700480729f, 0.1500300914f,
+ 0.1292407066f, 0.0999113992f, 0.0750693232f, 0.0553428531f,
+ 0.0402846411f, 0.0290729403f, 0.0166785270f, 0.0094829798f,
+ 0.0053654797f, 0.0030275919f, 0.0000000186f},
+ {0.0000000261f, 0.0044807382f, 0.0079482906f, 0.0140712596f,
+ 0.0248195715f, 0.0434742048f, 0.0604977794f, 0.0835766271f,
+ 0.1141664237f, 0.1532292813f, 0.2000626326f, 0.2336882651f,
+ 0.2663741410f, 0.2944218218f, 0.3136188090f, 0.3204754591f,
+ 0.3136188090f, 0.2944217920f, 0.2663741708f, 0.2336882651f,
+ 0.2000626326f, 0.1532292962f, 0.1141664162f, 0.0835766271f,
+ 0.0604977906f, 0.0434742048f, 0.0248195753f, 0.0140712596f,
+ 0.0079482906f, 0.0044807382f, 0.0000000261f},
+ {0.0000000298f, 0.0052194707f, 0.0092673339f, 0.0164332762f,
+ 0.0290685408f, 0.0511660054f, 0.0715145171f, 0.0993746519f,
+ 0.1367753297f, 0.1852938682f, 0.2445339411f, 0.2877510786f,
+ 0.3302804232f, 0.3671652079f, 0.3926102221f, 0.4017367959f,
+ 0.3926102519f, 0.3671651781f, 0.3302804828f, 0.2877510786f,
+ 0.2445339262f, 0.1852938682f, 0.1367753297f, 0.0993746296f,
+ 0.0715145245f, 0.0511660054f, 0.0290685445f, 0.0164332762f,
+ 0.0092673302f, 0.0052194707f, 0.0000000298f},
+ {0.0000000298f, 0.0056232363f, 0.0099989995f, 0.0177771747f,
+ 0.0315911807f, 0.0560568646f, 0.0789347738f, 0.1108068749f,
+ 0.1546058059f, 0.2131874412f, 0.2874797881f, 0.3436433673f,
+ 0.4005688727f, 0.4512940049f, 0.4870318770f, 0.5000000000f,
+ 0.4870318770f, 0.4512939751f, 0.4005689025f, 0.3436433673f,
+ 0.2874797881f, 0.2131874263f, 0.1546057910f, 0.1108068675f,
+ 0.0789347813f, 0.0560568646f, 0.0315911844f, 0.0177771747f,
+ 0.0099989995f, 0.0056232363f, 0.0000000298f},
+ {0.0000000261f, 0.0045582913f, 0.0081248507f, 0.0145073459f,
+ 0.0259804092f, 0.0467499122f, 0.0667200089f, 0.0954893604f,
+ 0.1369983852f, 0.1965934485f, 0.2817551196f, 0.3696863651f,
+ 0.4782577753f, 0.5972789526f, 0.6979247928f, 0.7386929393f,
+ 0.6979249120f, 0.5972788334f, 0.4782578349f, 0.3696863651f,
+ 0.2817551494f, 0.1965934336f, 0.1369983703f, 0.0954893529f,
+ 0.0667200163f, 0.0467499122f, 0.0259804130f, 0.0145073459f,
+ 0.0081248507f, 0.0045582913f, 0.0000000261f},
+ {0.0000000037f, 0.0007973649f, 0.0014236122f, 0.0025495738f,
+ 0.0045911148f, 0.0083473474f, 0.0120380968f, 0.0175057761f,
+ 0.0257535614f, 0.0410830304f, 0.0712796226f, 0.1087764874f,
+ 0.1762015671f, 0.3041011095f, 0.5248688459f, 0.6885957122f,
+ 0.5248691440f, 0.3041010499f, 0.1762015820f, 0.1087764949f,
+ 0.0712796375f, 0.0410830304f, 0.0257535614f, 0.0175057724f,
+ 0.0120380968f, 0.0083473474f, 0.0045911148f, 0.0025495775f,
+ 0.0014236122f, 0.0007973649f, 0.0000000037f}},
{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {3, 525351, 931480, 1647714, 2902257, 5071597, 7042735,
- 9702682, 13207802, 17652582, 22940042, 26711396, 30359376, 33476790,
- 35604100, 36362732, 35604100, 33476786, 30359378, 26711396, 22940042,
- 17652582, 13207802, 9702681, 7042735, 5071597, 2902257, 1647714,
- 931480, 525351, 3},
- {5, 813540, 1442877, 2553636, 4501896, 7878638, 10955188,
- 15118865, 20625528, 27638916, 36022472, 42026548, 47851776, 52842400,
- 56254208, 57472080, 56254208, 52842396, 47851784, 42026548, 36022476,
- 27638918, 20625528, 15118864, 10955189, 7878638, 4501896, 2553636,
- 1442877, 813540, 5},
- {7, 1203665, 2136357, 3785832, 6689100, 11751078, 16395488,
- 22728960, 31187070, 42088120, 55296528, 64867172, 74235600, 82322976,
- 87882752, 89873216, 87882752, 82322968, 74235600, 64867176, 55296532,
- 42088120, 31187070, 22728958, 16395489, 11751078, 6689101, 3785832,
- 2136357, 1203665, 7},
- {8, 1401717, 2489652, 4417463, 7822332, 13794262,
- 19312684, 26897488, 37131704, 50494456, 66937128, 79016952,
- 90971256, 101390632, 108605536, 111198632, 108605544, 101390624,
- 90971264, 79016952, 66937124, 50494456, 37131704, 26897486,
- 19312686, 13794262, 7822333, 4417463, 2489652, 1401717,
- 8},
- {8, 1509476, 2684086, 4772024, 8480193, 15047650,
- 21188892, 29744494, 41501680, 57227068, 77169768, 92246064,
- 107526888, 121143312, 130736624, 134217728, 130736624, 121143304,
- 107526896, 92246064, 77169768, 57227064, 41501676, 29744492,
- 21188894, 15047650, 8480194, 4772024, 2684086, 1509476,
- 8},
- {7, 1222724, 2178188, 3885304, 6945113, 12454759,
- 17715754, 25230046, 35932316, 50996136, 71510480, 88238104,
- 108673696, 130724624, 148143056, 154903104, 148143056, 130724616,
- 108673712, 88238104, 71510496, 50996136, 35932312, 25230042,
- 17715758, 12454758, 6945114, 3885304, 2178189, 1222724,
- 7},
- {1, 213781, 381315, 681714, 1223645, 2211279, 3169313,
- 4564991, 6613954, 9638447, 15182689, 20899234, 28782236, 38682308,
- 48311500, 52599960, 48311512, 38682304, 28782238, 20899234, 15182691,
- 9638447, 6613954, 4564991, 3169313, 2211279, 1223645, 681714,
- 381315, 213781, 1},
- },
+
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000112f, 0.0019570850f, 0.0034700334f, 0.0061382130f,
+ 0.0108117498f, 0.0188931711f, 0.0262362324f, 0.0361453071f,
+ 0.0492028967f, 0.0657609925f, 0.0854583159f, 0.0995077044f,
+ 0.1130974889f, 0.1247107610f, 0.1326356083f, 0.1354617327f,
+ 0.1326356083f, 0.1247107461f, 0.1130974963f, 0.0995077044f,
+ 0.0854583159f, 0.0657609925f, 0.0492028967f, 0.0361453034f,
+ 0.0262362324f, 0.0188931711f, 0.0108117498f, 0.0061382130f,
+ 0.0034700334f, 0.0019570850f, 0.0000000112f},
+ {0.0000000186f, 0.0030306727f, 0.0053751357f, 0.0095130354f,
+ 0.0167708695f, 0.0293502137f, 0.0408112556f, 0.0563221611f,
+ 0.0768360794f, 0.1029629856f, 0.1341941655f, 0.1565610915f,
+ 0.1782617569f, 0.1968532801f, 0.2095632553f, 0.2141001821f,
+ 0.2095632553f, 0.1968532652f, 0.1782617867f, 0.1565610915f,
+ 0.1341941804f, 0.1029629931f, 0.0768360794f, 0.0563221574f,
+ 0.0408112593f, 0.0293502137f, 0.0167708695f, 0.0095130354f,
+ 0.0053751357f, 0.0030306727f, 0.0000000186f},
+ {0.0000000261f, 0.0044840015f, 0.0079585500f, 0.0141033232f,
+ 0.0249188393f, 0.0437761769f, 0.0610779524f, 0.0846719742f,
+ 0.1161808893f, 0.1567904651f, 0.2059956193f, 0.2416490465f,
+ 0.2765491605f, 0.3066769838f, 0.3273887634f, 0.3348038197f,
+ 0.3273887634f, 0.3066769540f, 0.2765491605f, 0.2416490614f,
+ 0.2059956342f, 0.1567904651f, 0.1161808893f, 0.0846719667f,
+ 0.0610779561f, 0.0437761769f, 0.0249188431f, 0.0141033232f,
+ 0.0079585500f, 0.0044840015f, 0.0000000261f},
+ {0.0000000298f, 0.0052218027f, 0.0092746764f, 0.0164563321f,
+ 0.0291404575f, 0.0513876304f, 0.0719453543f, 0.1002009511f,
+ 0.1383263767f, 0.1881065071f, 0.2493602335f, 0.2943610847f,
+ 0.3388943374f, 0.3777095377f, 0.4045871496f, 0.4142471850f,
+ 0.4045871794f, 0.3777095079f, 0.3388943672f, 0.2943610847f,
+ 0.2493602186f, 0.1881065071f, 0.1383263767f, 0.1002009436f,
+ 0.0719453618f, 0.0513876304f, 0.0291404612f, 0.0164563321f,
+ 0.0092746764f, 0.0052218027f, 0.0000000298f},
+ {0.0000000298f, 0.0056232363f, 0.0099989995f, 0.0177771747f,
+ 0.0315911807f, 0.0560568646f, 0.0789347738f, 0.1108068749f,
+ 0.1546058059f, 0.2131874412f, 0.2874797881f, 0.3436433673f,
+ 0.4005688727f, 0.4512940049f, 0.4870318770f, 0.5000000000f,
+ 0.4870318770f, 0.4512939751f, 0.4005689025f, 0.3436433673f,
+ 0.2874797881f, 0.2131874263f, 0.1546057910f, 0.1108068675f,
+ 0.0789347813f, 0.0560568646f, 0.0315911844f, 0.0177771747f,
+ 0.0099989995f, 0.0056232363f, 0.0000000298f},
+ {0.0000000261f, 0.0045550019f, 0.0081143826f, 0.0144738853f,
+ 0.0258725621f, 0.0463975929f, 0.0659963265f, 0.0939892456f,
+ 0.1338583082f, 0.1899754107f, 0.2663972974f, 0.3287125528f,
+ 0.4048410654f, 0.4869871736f, 0.5518758893f, 0.5770590305f,
+ 0.5518758893f, 0.4869871438f, 0.4048411250f, 0.3287125528f,
+ 0.2663973570f, 0.1899754107f, 0.1338582933f, 0.0939892307f,
+ 0.0659963414f, 0.0463975891f, 0.0258725658f, 0.0144738853f,
+ 0.0081143863f, 0.0045550019f, 0.0000000261f},
+ {0.0000000037f, 0.0007963963f, 0.0014205091f, 0.0025395826f,
+ 0.0045584328f, 0.0082376562f, 0.0118066110f, 0.0170059167f,
+ 0.0246388987f, 0.0359060131f, 0.0565599240f, 0.0778557137f,
+ 0.1072221845f, 0.1441028267f, 0.1799743623f, 0.1959501207f,
+ 0.1799744070f, 0.1441028118f, 0.1072221920f, 0.0778557137f,
+ 0.0565599315f, 0.0359060131f, 0.0246388987f, 0.0170059167f,
+ 0.0118066110f, 0.0082376562f, 0.0045584328f, 0.0025395826f,
+ 0.0014205091f, 0.0007963963f, 0.0000000037f}},
{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {3, 526244, 934286, 1656482, 2929383, 5154009, 7200895,
- 10000863, 13755239, 18618438, 24545894, 28863348, 33106848, 36783144,
- 39317176, 40225672, 39317176, 36783140, 33106852, 28863350, 24545894,
- 18618438, 13755239, 10000861, 7200896, 5154009, 2929384, 1656483,
- 934287, 526244, 3},
- {5, 814783, 1446784, 2565855, 4539774, 7994119, 11177507,
- 15539745, 21402348, 29018418, 38333064, 45138568, 51843732, 57665092,
- 61684144, 63126300, 61684144, 57665092, 51843740, 45138568, 38333064,
- 29018418, 21402346, 15539743, 11177508, 7994120, 4539775, 2565855,
- 1446784, 814783, 5},
- {7, 1204981, 2140499, 3798824, 6729584, 11875611, 16637170,
- 23191438, 32052658, 43652108, 57969132, 68517104, 78979352, 88117000,
- 94454304, 96733920, 94454304, 88116992, 78979352, 68517104, 57969132,
- 43652104, 32052654, 23191436, 16637170, 11875611, 6729584, 3798824,
- 2140499, 1204981, 7},
- {8, 1402655, 2492611, 4426772, 7851491, 13884761,
- 19489746, 27240036, 37782176, 51691532, 69027848, 81916832,
- 94796824, 106122752, 114019032, 116867632, 114019032, 106122744,
- 94796832, 81916840, 69027848, 51691532, 37782172, 27240034,
- 19489748, 13884760, 7851492, 4426772, 2492611, 1402655,
- 8},
- {8, 1509476, 2684086, 4772024, 8480193, 15047650,
- 21188892, 29744494, 41501680, 57227068, 77169768, 92246064,
- 107526888, 121143312, 130736624, 134217728, 130736624, 121143304,
- 107526896, 92246064, 77169768, 57227064, 41501676, 29744492,
- 21188894, 15047650, 8480194, 4772024, 2684086, 1509476,
- 8},
- {7, 1221406, 2174004, 3871976, 6902451, 12317130,
- 17436482, 24661340, 34772520, 48643564, 66845116, 81092456,
- 95994376, 109691784, 119593840, 123240696, 119593848, 109691776,
- 95994392, 81092456, 66845116, 48643564, 34772520, 24661336,
- 17436482, 12317130, 6902452, 3871976, 2174004, 1221406,
- 7},
- {1, 213393, 380079, 677757, 1210858, 2169302, 3082668,
- 4384052, 6230857, 8816279, 12308982, 15131108, 18175564, 21641460,
- 24357568, 25401718, 24357570, 21641458, 18175566, 15131109, 12308983,
- 8816278, 6230857, 4384051, 3082668, 2169302, 1210858, 677757,
- 380079, 213393, 1},
- },
+
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000112f, 0.0019604117f, 0.0034804866f, 0.0061708763f,
+ 0.0109128021f, 0.0192001797f, 0.0268254243f, 0.0372561179f,
+ 0.0512422584f, 0.0693590865f, 0.0914405808f, 0.1075243503f,
+ 0.1233326197f, 0.1370278895f, 0.1464678943f, 0.1498523057f,
+ 0.1464678943f, 0.1370278746f, 0.1233326346f, 0.1075243577f,
+ 0.0914405808f, 0.0693590865f, 0.0512422584f, 0.0372561105f,
+ 0.0268254280f, 0.0192001797f, 0.0109128058f, 0.0061708800f,
+ 0.0034804903f, 0.0019604117f, 0.0000000112f},
+ {0.0000000186f, 0.0030353032f, 0.0053896904f, 0.0095585547f,
+ 0.0169119760f, 0.0297804140f, 0.0416394584f, 0.0578900613f,
+ 0.0797299594f, 0.1081020311f, 0.1428017914f, 0.1681542695f,
+ 0.1931329519f, 0.2148192078f, 0.2297913432f, 0.2351637930f,
+ 0.2297913432f, 0.2148192078f, 0.1931329817f, 0.1681542695f,
+ 0.1428017914f, 0.1081020311f, 0.0797299519f, 0.0578900538f,
+ 0.0416394621f, 0.0297804177f, 0.0169119798f, 0.0095585547f,
+ 0.0053896904f, 0.0030353032f, 0.0000000186f},
+ {0.0000000261f, 0.0044889040f, 0.0079739802f, 0.0141517222f,
+ 0.0250696540f, 0.0442400984f, 0.0619782880f, 0.0863948390f,
+ 0.1194054559f, 0.1626167744f, 0.2159518450f, 0.2552461028f,
+ 0.2942210138f, 0.3282614052f, 0.3518697023f, 0.3603619337f,
+ 0.3518697023f, 0.3282613754f, 0.2942210138f, 0.2552461028f,
+ 0.2159518450f, 0.1626167595f, 0.1194054410f, 0.0863948315f,
+ 0.0619782880f, 0.0442400984f, 0.0250696540f, 0.0141517222f,
+ 0.0079739802f, 0.0044889040f, 0.0000000261f},
+ {0.0000000298f, 0.0052252971f, 0.0092856996f, 0.0164910108f,
+ 0.0292490833f, 0.0517247654f, 0.0726049617f, 0.1014770418f,
+ 0.1407495737f, 0.1925659627f, 0.2571487725f, 0.3051639795f,
+ 0.3531456888f, 0.3953380585f, 0.4247539937f, 0.4353658557f,
+ 0.4247539937f, 0.3953380287f, 0.3531457186f, 0.3051640093f,
+ 0.2571487725f, 0.1925659627f, 0.1407495588f, 0.1014770344f,
+ 0.0726049691f, 0.0517247617f, 0.0292490870f, 0.0164910108f,
+ 0.0092856996f, 0.0052252971f, 0.0000000298f},
+ {0.0000000298f, 0.0056232363f, 0.0099989995f, 0.0177771747f,
+ 0.0315911807f, 0.0560568646f, 0.0789347738f, 0.1108068749f,
+ 0.1546058059f, 0.2131874412f, 0.2874797881f, 0.3436433673f,
+ 0.4005688727f, 0.4512940049f, 0.4870318770f, 0.5000000000f,
+ 0.4870318770f, 0.4512939751f, 0.4005689025f, 0.3436433673f,
+ 0.2874797881f, 0.2131874263f, 0.1546057910f, 0.1108068675f,
+ 0.0789347813f, 0.0560568646f, 0.0315911844f, 0.0177771747f,
+ 0.0099989995f, 0.0056232363f, 0.0000000298f},
+ {0.0000000261f, 0.0045500919f, 0.0080987960f, 0.0144242346f,
+ 0.0257136337f, 0.0458848849f, 0.0649559572f, 0.0918706506f,
+ 0.1295377314f, 0.1812113971f, 0.2490174621f, 0.3020929396f,
+ 0.3576069176f, 0.4086337388f, 0.4455217719f, 0.4591073692f,
+ 0.4455218017f, 0.4086337090f, 0.3576069772f, 0.3020929396f,
+ 0.2490174621f, 0.1812113971f, 0.1295377314f, 0.0918706357f,
+ 0.0649559572f, 0.0458848849f, 0.0257136375f, 0.0144242346f,
+ 0.0080987960f, 0.0045500919f, 0.0000000261f},
+ {0.0000000037f, 0.0007949509f, 0.0014159046f, 0.0025248416f,
+ 0.0045107976f, 0.0080812797f, 0.0114838332f, 0.0163318664f,
+ 0.0232117511f, 0.0328431986f, 0.0458545312f, 0.0563677698f,
+ 0.0677092522f, 0.0806207210f, 0.0907390118f, 0.0946287736f,
+ 0.0907390192f, 0.0806207135f, 0.0677092597f, 0.0563677736f,
+ 0.0458545350f, 0.0328431949f, 0.0232117511f, 0.0163318627f,
+ 0.0114838332f, 0.0080812797f, 0.0045107976f, 0.0025248416f,
+ 0.0014159046f, 0.0007949509f, 0.0000000037f}},
{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {3, 527304, 937630, 1667008, 2962381, 5256587, 7401904,
- 10390627, 14497757, 19991098, 26957670, 32224264, 37562304, 42318920,
- 45670152, 46886204, 45670152, 42318924, 37562308, 32224264, 26957670,
- 19991098, 14497757, 10390626, 7401904, 5256587, 2962381, 1667008,
- 937630, 527304, 3},
- {5, 816257, 1451433, 2580496, 4585709, 8137095, 11458003,
- 16084489, 22442248, 30945832, 41729952, 49882536, 58145720, 65508872,
- 70696504, 72578936, 70696512, 65508868, 58145724, 49882536, 41729952,
- 30945832, 22442248, 16084488, 11458004, 8137095, 4585709, 2580496,
- 1451434, 816257, 5},
- {7, 1206538, 2145415, 3814322, 6778296, 12027725,
- 16936476, 23775046, 33172672, 45742120, 61682500, 73733120,
- 85947224, 96830952, 104498976, 107281456, 104498984, 96830952,
- 85947232, 73733128, 61682504, 45742116, 33172670, 23775044,
- 16936476, 12027724, 6778297, 3814322, 2145415, 1206538,
- 7},
- {8, 1403765, 2496115, 4437830, 7886310, 13993836,
- 19704996, 27661434, 38595240, 53219352, 71765424, 85785904,
- 99996584, 112659424, 121580896, 124818216, 121580904, 112659416,
- 99996592, 85785904, 71765432, 53219352, 38595240, 27661430,
- 19704998, 13993836, 7886311, 4437830, 2496115, 1403764,
- 8},
- {8, 1509476, 2684086, 4772024, 8480193, 15047650,
- 21188892, 29744494, 41501680, 57227068, 77169768, 92246064,
- 107526888, 121143312, 130736624, 134217728, 130736624, 121143304,
- 107526896, 92246064, 77169768, 57227064, 41501676, 29744492,
- 21188894, 15047650, 8480194, 4772024, 2684086, 1509476,
- 8},
- {7, 1219857, 2169099, 3856430, 6853125, 12160503,
- 17123444, 24037508, 33538878, 46247084, 62363436, 74547088,
- 86896032, 97899912, 105652584, 108465784, 105652592, 97899904,
- 86896032, 74547096, 62363440, 46247084, 33538876, 24037506,
- 17123446, 12160503, 6853125, 3856430, 2169099, 1219857,
- 7},
- {1, 212938, 378637, 673176, 1196278, 2122731, 2989060,
- 4195976, 5854530, 8072868, 10886130, 13012902, 15168527, 17089358,
- 18442662, 18933732, 18442662, 17089358, 15168528, 13012903, 10886130,
- 8072867, 5854530, 4195975, 2989060, 2122731, 1196278, 673176,
- 378637, 212938, 1},
- },
+
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000112f, 0.0019643605f, 0.0034929439f, 0.0062100887f,
+ 0.0110357292f, 0.0195823126f, 0.0275742412f, 0.0387081020f,
+ 0.0540083535f, 0.0744726434f, 0.1004251465f, 0.1200447381f,
+ 0.1399304867f, 0.1576502621f, 0.1701345742f, 0.1746647209f,
+ 0.1701345742f, 0.1576502770f, 0.1399305016f, 0.1200447381f,
+ 0.1004251465f, 0.0744726434f, 0.0540083535f, 0.0387080982f,
+ 0.0275742412f, 0.0195823126f, 0.0110357292f, 0.0062100887f,
+ 0.0034929439f, 0.0019643605f, 0.0000000112f},
+ {0.0000000186f, 0.0030407943f, 0.0054070093f, 0.0096130967f,
+ 0.0170830972f, 0.0303130411f, 0.0426843874f, 0.0599193908f,
+ 0.0836038888f, 0.1152822077f, 0.1554561853f, 0.1858269274f,
+ 0.2166096866f, 0.2440395653f, 0.2633650005f, 0.2703776062f,
+ 0.2633650303f, 0.2440395504f, 0.2166097015f, 0.1858269274f,
+ 0.1554561853f, 0.1152822077f, 0.0836038888f, 0.0599193871f,
+ 0.0426843911f, 0.0303130411f, 0.0170830972f, 0.0096130967f,
+ 0.0054070130f, 0.0030407943f, 0.0000000186f},
+ {0.0000000261f, 0.0044947043f, 0.0079922937f, 0.0142094567f,
+ 0.0252511203f, 0.0448067673f, 0.0630932897f, 0.0885689482f,
+ 0.1235778332f, 0.1704026759f, 0.2297852188f, 0.2746772766f,
+ 0.3201783597f, 0.3607234061f, 0.3892890215f, 0.3996545672f,
+ 0.3892890513f, 0.3607234061f, 0.3201783895f, 0.2746773064f,
+ 0.2297852337f, 0.1704026610f, 0.1235778257f, 0.0885689408f,
+ 0.0630932897f, 0.0448067635f, 0.0252511241f, 0.0142094567f,
+ 0.0079922937f, 0.0044947043f, 0.0000000261f},
+ {0.0000000298f, 0.0052294321f, 0.0092987530f, 0.0165322050f,
+ 0.0293787941f, 0.0521311015f, 0.0734068304f, 0.1030468717f,
+ 0.1437784731f, 0.1982575357f, 0.2673470378f, 0.3195773959f,
+ 0.3725163043f, 0.4196890593f, 0.4529241323f, 0.4649840891f,
+ 0.4529241621f, 0.4196890295f, 0.3725163341f, 0.3195773959f,
+ 0.2673470676f, 0.1982575357f, 0.1437784731f, 0.1030468568f,
+ 0.0734068379f, 0.0521311015f, 0.0293787979f, 0.0165322050f,
+ 0.0092987530f, 0.0052294284f, 0.0000000298f},
+ {0.0000000298f, 0.0056232363f, 0.0099989995f, 0.0177771747f,
+ 0.0315911807f, 0.0560568646f, 0.0789347738f, 0.1108068749f,
+ 0.1546058059f, 0.2131874412f, 0.2874797881f, 0.3436433673f,
+ 0.4005688727f, 0.4512940049f, 0.4870318770f, 0.5000000000f,
+ 0.4870318770f, 0.4512939751f, 0.4005689025f, 0.3436433673f,
+ 0.2874797881f, 0.2131874263f, 0.1546057910f, 0.1108068675f,
+ 0.0789347813f, 0.0560568646f, 0.0315911844f, 0.0177771747f,
+ 0.0099989995f, 0.0056232363f, 0.0000000298f},
+ {0.0000000261f, 0.0045443214f, 0.0080805235f, 0.0143663213f,
+ 0.0255298801f, 0.0453014039f, 0.0637897998f, 0.0895466954f,
+ 0.1249420568f, 0.1722838134f, 0.2323219031f, 0.2777095437f,
+ 0.3237129450f, 0.3647055924f, 0.3935865462f, 0.4040665329f,
+ 0.3935865760f, 0.3647055626f, 0.3237129450f, 0.2777095735f,
+ 0.2323219180f, 0.1722838134f, 0.1249420494f, 0.0895466879f,
+ 0.0637898073f, 0.0453014039f, 0.0255298801f, 0.0143663213f,
+ 0.0080805235f, 0.0045443214f, 0.0000000261f},
+ {0.0000000037f, 0.0007932559f, 0.0014105327f, 0.0025077760f,
+ 0.0044564828f, 0.0079077892f, 0.0111351162f, 0.0156312287f,
+ 0.0218098238f, 0.0300737768f, 0.0405539945f, 0.0484768376f,
+ 0.0565071665f, 0.0636628196f, 0.0687042698f, 0.0705336481f,
+ 0.0687042698f, 0.0636628196f, 0.0565071702f, 0.0484768413f,
+ 0.0405539945f, 0.0300737731f, 0.0218098238f, 0.0156312250f,
+ 0.0111351162f, 0.0079077892f, 0.0044564828f, 0.0025077760f,
+ 0.0014105327f, 0.0007932559f, 0.0000000037f}},
{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {3, 528371, 941010, 1677737, 2996520, 5365544, 7620743,
- 10829829, 15375154, 21720308, 30256412, 37121464, 44492716, 52140904,
- 58486168, 60914048, 58486172, 52140900, 44492720, 37121464, 30256412,
- 21720308, 15375154, 10829827, 7620744, 5365544, 2996520, 1677737,
- 941010, 528371, 3},
- {5, 817738, 1456128, 2595392, 4633066, 8288027, 11760734,
- 16690856, 23650124, 33316570, 46226512, 56525852, 67496896, 77774760,
- 85824632, 89194720, 85824640, 77774752, 67496904, 56525856, 46226512,
- 33316570, 23650120, 16690854, 11760735, 8288027, 4633066, 2595392,
- 1456128, 817738, 5},
- {7, 1208101, 2150365, 3830012, 6828082, 12185838,
- 17252538, 24405052, 34418948, 48164280, 66215072, 80356216,
- 95158664, 108775560, 118626184, 122255560, 118626184, 108775544,
- 95158664, 80356216, 66215080, 48164276, 34418944, 24405050,
- 17252540, 12185838, 6828083, 3830012, 2150365, 1208101,
- 7},
- {8, 1404877, 2499634, 4448971, 7921597, 14105523,
- 19927540, 28103010, 39463168, 54891176, 74856880, 90260672,
- 106158016, 120574816, 130879072, 134648960, 130879072, 120574816,
- 106158024, 90260672, 74856888, 54891176, 39463164, 28103008,
- 19927542, 14105523, 7921598, 4448971, 2499634, 1404876,
- 8},
- {8, 1509476, 2684086, 4772024, 8480193, 15047650,
- 21188892, 29744494, 41501680, 57227068, 77169768, 92246064,
- 107526888, 121143312, 130736624, 134217728, 130736624, 121143304,
- 107526896, 92246064, 77169768, 57227064, 41501676, 29744492,
- 21188894, 15047650, 8480194, 4772024, 2684086, 1509476,
- 8},
- {7, 1218314, 2164227, 3841070, 6804841, 12009704, 16826680,
- 23458746, 32427858, 44173136, 58677072, 69367448, 79974728, 89242016,
- 95670824, 97983664, 95670824, 89242016, 79974736, 69367448, 58677072,
- 44173140, 32427856, 23458742, 16826682, 12009704, 6804841, 3841070,
- 2164227, 1218314, 7},
- {1, 212485, 377211, 668688, 1182212, 2079037, 2903492,
- 4030197, 5539070, 7490515, 9864627, 11591052, 13285722, 14752220,
- 15762207, 16124145, 15762208, 14752220, 13285722, 11591053, 9864628,
- 7490515, 5539070, 4030197, 2903492, 2079037, 1182212, 668688,
- 377210, 212485, 1},
- },
+
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000112f, 0.0019683354f, 0.0035055354f, 0.0062500574f,
+ 0.0111629069f, 0.0199882090f, 0.0283894800f, 0.0403442569f,
+ 0.0572769120f, 0.0809144527f, 0.1127139181f, 0.1382882297f,
+ 0.1657482833f, 0.1942400038f, 0.2178779542f, 0.2269225121f,
+ 0.2178779691f, 0.1942399889f, 0.1657482982f, 0.1382882297f,
+ 0.1127139181f, 0.0809144527f, 0.0572769120f, 0.0403442495f,
+ 0.0283894837f, 0.0199882090f, 0.0111629069f, 0.0062500574f,
+ 0.0035055354f, 0.0019683354f, 0.0000000112f},
+ {0.0000000186f, 0.0030463114f, 0.0054244995f, 0.0096685886f,
+ 0.0172595158f, 0.0308753066f, 0.0438121483f, 0.0621782839f,
+ 0.0881035775f, 0.1241138950f, 0.1722071767f, 0.2105752081f,
+ 0.2514455318f, 0.2897335589f, 0.3197216690f, 0.3322762251f,
+ 0.3197216988f, 0.2897335291f, 0.2514455616f, 0.2105752230f,
+ 0.1722071767f, 0.1241138950f, 0.0881035626f, 0.0621782765f,
+ 0.0438121520f, 0.0308753066f, 0.0172595158f, 0.0096685886f,
+ 0.0054244995f, 0.0030463114f, 0.0000000186f},
+ {0.0000000261f, 0.0045005269f, 0.0080107339f, 0.0142679065f,
+ 0.0254365876f, 0.0453957841f, 0.0642707124f, 0.0909159034f,
+ 0.1282205731f, 0.1794259250f, 0.2466703653f, 0.2993502319f,
+ 0.3544936478f, 0.4052205384f, 0.4419169724f, 0.4554374516f,
+ 0.4419169724f, 0.4052204788f, 0.3544936478f, 0.2993502319f,
+ 0.2466703951f, 0.1794259101f, 0.1282205582f, 0.0909158960f,
+ 0.0642707199f, 0.0453957841f, 0.0254365914f, 0.0142679065f,
+ 0.0080107339f, 0.0045005269f, 0.0000000261f},
+ {0.0000000298f, 0.0052335747f, 0.0093118623f, 0.0165737085f,
+ 0.0295102485f, 0.0525471680f, 0.0742358714f, 0.1046918705f,
+ 0.1470117569f, 0.2044855654f, 0.2788636088f, 0.3362472057f,
+ 0.3954694271f, 0.4491761923f, 0.4875625372f, 0.5016064644f,
+ 0.4875625372f, 0.4491761923f, 0.3954694569f, 0.3362472057f,
+ 0.2788636386f, 0.2044855654f, 0.1470117420f, 0.1046918631f,
+ 0.0742358789f, 0.0525471680f, 0.0295102522f, 0.0165737085f,
+ 0.0093118623f, 0.0052335709f, 0.0000000298f},
+ {0.0000000298f, 0.0056232363f, 0.0099989995f, 0.0177771747f,
+ 0.0315911807f, 0.0560568646f, 0.0789347738f, 0.1108068749f,
+ 0.1546058059f, 0.2131874412f, 0.2874797881f, 0.3436433673f,
+ 0.4005688727f, 0.4512940049f, 0.4870318770f, 0.5000000000f,
+ 0.4870318770f, 0.4512939751f, 0.4005689025f, 0.3436433673f,
+ 0.2874797881f, 0.2131874263f, 0.1546057910f, 0.1108068675f,
+ 0.0789347813f, 0.0560568646f, 0.0315911844f, 0.0177771747f,
+ 0.0099989995f, 0.0056232363f, 0.0000000298f},
+ {0.0000000261f, 0.0045385733f, 0.0080623738f, 0.0143091008f,
+ 0.0253500082f, 0.0447396338f, 0.0626842678f, 0.0873906389f,
+ 0.1208031848f, 0.1645577550f, 0.2185891271f, 0.2584138811f,
+ 0.2979290783f, 0.3324524164f, 0.3564015925f, 0.3650175929f,
+ 0.3564015925f, 0.3324524164f, 0.2979291081f, 0.2584138811f,
+ 0.2185891271f, 0.1645577699f, 0.1208031774f, 0.0873906240f,
+ 0.0626842752f, 0.0447396338f, 0.0253500082f, 0.0143091008f,
+ 0.0080623738f, 0.0045385733f, 0.0000000261f},
+ {0.0000000037f, 0.0007915683f, 0.0014052205f, 0.0024910569f,
+ 0.0044040829f, 0.0077450164f, 0.0108163506f, 0.0150136538f,
+ 0.0206346437f, 0.0279043429f, 0.0367485993f, 0.0431800336f,
+ 0.0494931713f, 0.0549563020f, 0.0587187968f, 0.0600671209f,
+ 0.0587188005f, 0.0549563020f, 0.0494931713f, 0.0431800373f,
+ 0.0367486030f, 0.0279043429f, 0.0206346437f, 0.0150136538f,
+ 0.0108163506f, 0.0077450164f, 0.0044040829f, 0.0024910569f,
+ 0.0014052168f, 0.0007915683f, 0.0000000037f}},
{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {3, 529280, 943904, 1686997, 3026404, 5463419,
- 7822298, 11249275, 16258557, 23600720, 36288716, 49305868,
- 66713524, 87729680, 107320208, 115788648, 107320216, 87729672,
- 66713540, 49305872, 36288720, 23600720, 16258558, 11249274,
- 7822299, 5463419, 3026404, 1686997, 943904, 529280,
- 3},
- {5, 819001, 1460144, 2608223, 4674384, 8422779,
- 12037082, 17262416, 24842774, 35819472, 52848540, 70312664,
- 92562776, 117871664, 140063104, 149267152, 140063136, 117871648,
- 92562792, 70312664, 52848544, 35819468, 24842772, 17262414,
- 12037082, 8422779, 4674385, 2608223, 1460144, 819001,
- 5},
- {7, 1209431, 2154588, 3843465, 6871159, 12324878,
- 17534810, 24980280, 35593252, 50549888, 70956104, 87630984,
- 108587520, 130892864, 148578016, 155457280, 148578016, 130892848,
- 108587528, 87630992, 70956112, 50549884, 35593252, 24980278,
- 17534812, 12324878, 6871160, 3843465, 2154588, 1209431,
- 7},
- {8, 1405821, 2502628, 4458482, 7951885, 14202332,
- 20122228, 28494402, 40246696, 56439064, 77816136, 94657800,
- 112381552, 128775696, 140691712, 145094384, 140691728, 128775688,
- 112381568, 94657808, 77816144, 56439060, 40246696, 28494400,
- 20122230, 14202331, 7951885, 4458482, 2502629, 1405821,
- 8},
- {8, 1509476, 2684086, 4772024, 8480193, 15047650,
- 21188892, 29744494, 41501680, 57227068, 77169768, 92246064,
- 107526888, 121143312, 130736624, 134217728, 130736624, 121143304,
- 107526896, 92246064, 77169768, 57227064, 41501676, 29744492,
- 21188894, 15047650, 8480194, 4772024, 2684086, 1509476,
- 8},
- {7, 1217010, 2160122, 3828190, 6764697, 11886164, 16586827,
- 22999516, 31567738, 42617632, 56016164, 65730784, 75244880, 83461560,
- 89112016, 91135304, 89112024, 83461552, 75244888, 65730788, 56016164,
- 42617628, 31567738, 22999514, 16586829, 11886164, 6764698, 3828190,
- 2160122, 1217010, 7},
- {1, 212104, 376014, 664952, 1170669, 2044035, 2836433,
- 3904056, 5308151, 7084523, 9192281, 10692476, 12141331, 13377854,
- 14220870, 14521357, 14220870, 13377854, 12141331, 10692476, 9192281,
- 7084523, 5308151, 3904056, 2836433, 2044035, 1170669, 664952,
- 376014, 212104, 1},
- },
+
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000112f, 0.0019717216f, 0.0035163164f, 0.0062845536f,
+ 0.0112742335f, 0.0203528218f, 0.0291403309f, 0.0419068150f,
+ 0.0605678447f, 0.0879195333f, 0.1351860017f, 0.1836786717f,
+ 0.2485272437f, 0.3268185258f, 0.3997989297f, 0.4313463271f,
+ 0.3997989595f, 0.3268184960f, 0.2485273033f, 0.1836786866f,
+ 0.1351860166f, 0.0879195333f, 0.0605678484f, 0.0419068113f,
+ 0.0291403346f, 0.0203528218f, 0.0112742335f, 0.0062845536f,
+ 0.0035163164f, 0.0019717216f, 0.0000000112f},
+ {0.0000000186f, 0.0030510165f, 0.0054394603f, 0.0097163878f,
+ 0.0174134374f, 0.0313772969f, 0.0448416248f, 0.0643075109f,
+ 0.0925465450f, 0.1334379315f, 0.1968761533f, 0.2619350851f,
+ 0.3448232114f, 0.4391061664f, 0.5217757225f, 0.5560634732f,
+ 0.5217758417f, 0.4391061068f, 0.3448232710f, 0.2619350851f,
+ 0.1968761683f, 0.1334379166f, 0.0925465375f, 0.0643075034f,
+ 0.0448416248f, 0.0313772969f, 0.0174134411f, 0.0097163878f,
+ 0.0054394603f, 0.0030510165f, 0.0000000186f},
+ {0.0000000261f, 0.0045054816f, 0.0080264658f, 0.0143180229f,
+ 0.0255970620f, 0.0459137484f, 0.0653222576f, 0.0930587947f,
+ 0.1325951964f, 0.1883130074f, 0.2643320858f, 0.3264508545f,
+ 0.4045200348f, 0.4876139164f, 0.5534962416f, 0.5791234970f,
+ 0.5534962416f, 0.4876138568f, 0.4045200646f, 0.3264508843f,
+ 0.2643321157f, 0.1883129925f, 0.1325951964f, 0.0930587873f,
+ 0.0653222650f, 0.0459137484f, 0.0255970657f, 0.0143180229f,
+ 0.0080264658f, 0.0045054816f, 0.0000000261f},
+ {0.0000000298f, 0.0052370913f, 0.0093230158f, 0.0166091397f,
+ 0.0296230800f, 0.0529078096f, 0.0749611408f, 0.1061499193f,
+ 0.1499306262f, 0.2102518976f, 0.2898876965f, 0.3526277840f,
+ 0.4186539054f, 0.4797268510f, 0.5241174698f, 0.5405187011f,
+ 0.5241175294f, 0.4797268212f, 0.4186539650f, 0.3526278138f,
+ 0.2898877263f, 0.2102518827f, 0.1499306262f, 0.1061499119f,
+ 0.0749611482f, 0.0529078059f, 0.0296230800f, 0.0166091397f,
+ 0.0093230195f, 0.0052370913f, 0.0000000298f},
+ {0.0000000298f, 0.0056232363f, 0.0099989995f, 0.0177771747f,
+ 0.0315911807f, 0.0560568646f, 0.0789347738f, 0.1108068749f,
+ 0.1546058059f, 0.2131874412f, 0.2874797881f, 0.3436433673f,
+ 0.4005688727f, 0.4512940049f, 0.4870318770f, 0.5000000000f,
+ 0.4870318770f, 0.4512939751f, 0.4005689025f, 0.3436433673f,
+ 0.2874797881f, 0.2131874263f, 0.1546057910f, 0.1108068675f,
+ 0.0789347813f, 0.0560568646f, 0.0315911844f, 0.0177771747f,
+ 0.0099989995f, 0.0056232363f, 0.0000000298f},
+ {0.0000000261f, 0.0045337155f, 0.0080470815f, 0.0142611191f,
+ 0.0252004601f, 0.0442794114f, 0.0617907457f, 0.0856798738f,
+ 0.1175989881f, 0.1587630510f, 0.2086764723f, 0.2448662519f,
+ 0.2803090215f, 0.3109185398f, 0.3319681287f, 0.3395054638f,
+ 0.3319681585f, 0.3109185100f, 0.2803090513f, 0.2448662668f,
+ 0.2086764723f, 0.1587630361f, 0.1175989881f, 0.0856798664f,
+ 0.0617907532f, 0.0442794114f, 0.0252004638f, 0.0142611191f,
+ 0.0080470815f, 0.0045337155f, 0.0000000261f},
+ {0.0000000037f, 0.0007901490f, 0.0014007613f, 0.0024771392f,
+ 0.0043610819f, 0.0076146238f, 0.0105665363f, 0.0145437419f,
+ 0.0197744034f, 0.0263919048f, 0.0342439152f, 0.0398325771f,
+ 0.0452299826f, 0.0498363897f, 0.0529768690f, 0.0540962704f,
+ 0.0529768690f, 0.0498363897f, 0.0452299826f, 0.0398325771f,
+ 0.0342439152f, 0.0263919048f, 0.0197744034f, 0.0145437419f,
+ 0.0105665363f, 0.0076146238f, 0.0043610819f, 0.0024771392f,
+ 0.0014007613f, 0.0007901490f, 0.0000000037f}},
{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {3, 529890, 945853, 1693270, 3046878, 5531883,
- 7966241, 11558316, 16941404, 26405616, 44726228, 66299660,
- 102135296, 161287136, 242754912, 290875520, 242754976, 161287104,
- 102135328, 66299668, 44726228, 26405616, 16941404, 11558314,
- 7966241, 5531883, 3046878, 1693270, 945853, 529890,
- 3},
- {5, 819848, 1462845, 2616904, 4702616, 8516569,
- 12232970, 17678754, 25748164, 38567944, 62864780, 89227176,
- 128392144, 182850000, 242436080, 271403040, 242436160, 182849968,
- 128392176, 89227168, 62864788, 38567940, 25748164, 17678752,
- 12232972, 8516569, 4702617, 2616904, 1462845, 819848,
- 5},
- {7, 1210322, 2157425, 3852534, 6900401, 12420479,
- 17731328, 25388104, 36448364, 52356736, 75502992, 99354648,
- 128997304, 161739680, 189630656, 200981856, 189630656, 161739664,
- 128997328, 99354648, 75503000, 52356740, 36448368, 25388100,
- 17731330, 12420478, 6900402, 3852534, 2157425, 1210322,
- 7},
- {8, 1406453, 2504636, 4464871, 7972318, 14268137,
- 20255542, 28765222, 40797016, 57549412, 80000928, 97981248,
- 117206704, 135388800, 151411120, 157516432, 151411136, 135388784,
- 117206704, 97981248, 80000928, 57549412, 40797012, 28765220,
- 20255542, 14268138, 7972319, 4464871, 2504636, 1406453,
- 8},
- {8, 1509476, 2684086, 4772024, 8480193, 15047650,
- 21188892, 29744494, 41501680, 57227068, 77169768, 92246064,
- 107526888, 121143312, 130736624, 134217728, 130736624, 121143304,
- 107526896, 92246064, 77169768, 57227064, 41501676, 29744492,
- 21188894, 15047650, 8480194, 4772024, 2684086, 1509476,
- 8},
- {7, 1216142, 2157392, 3819657, 6738267, 11805711, 16432165,
- 22707286, 31029754, 41665420, 54427540, 63597164, 72515376, 80171616,
- 85413624, 87286256, 85413624, 80171608, 72515384, 63597164, 54427544,
- 41665420, 31029756, 22707284, 16432167, 11805712, 6738268, 3819657,
- 2157392, 1216142, 7},
- {1, 211851, 375221, 662491, 1163142, 2021609, 2794131,
- 3826087, 5169036, 6847367, 8812784, 10196808, 11523252, 12648227,
- 13411804, 13683354, 13411805, 12648226, 11523253, 10196809, 8812784,
- 6847366, 5169036, 3826086, 2794132, 2021609, 1163142, 662491,
- 375221, 211851, 1},
- },
+
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000112f, 0.0019739941f, 0.0035235770f, 0.0063079223f,
+ 0.0113505051f, 0.0206078701f, 0.0296765603f, 0.0430580825f,
+ 0.0631116480f, 0.0983685851f, 0.1666181833f, 0.2469854802f,
+ 0.3804836273f, 0.6008414030f, 0.9043325186f, 1.0835957527f,
+ 0.9043327570f, 0.6008412838f, 0.3804837465f, 0.2469855100f,
+ 0.1666181833f, 0.0983685851f, 0.0631116480f, 0.0430580750f,
+ 0.0296765603f, 0.0206078701f, 0.0113505051f, 0.0063079223f,
+ 0.0035235770f, 0.0019739941f, 0.0000000112f},
+ {0.0000000186f, 0.0030541718f, 0.0054495223f, 0.0097487271f,
+ 0.0175186098f, 0.0317266919f, 0.0455713645f, 0.0658584908f,
+ 0.0959193856f, 0.1436767876f, 0.2341895550f, 0.3323971331f,
+ 0.4782980084f, 0.6811693311f, 0.9031447768f, 1.0110551119f,
+ 0.9031450748f, 0.6811692119f, 0.4782981277f, 0.3323971033f,
+ 0.2341895849f, 0.1436767727f, 0.0959193856f, 0.0658584833f,
+ 0.0455713719f, 0.0317266919f, 0.0175186135f, 0.0097487271f,
+ 0.0054495223f, 0.0030541718f, 0.0000000186f},
+ {0.0000000261f, 0.0045088008f, 0.0080370344f, 0.0143518075f,
+ 0.0257059969f, 0.0462698899f, 0.0660543442f, 0.0945780575f,
+ 0.1357807368f, 0.1950440407f, 0.2812705636f, 0.3701249063f,
+ 0.4805524051f, 0.6025272608f, 0.7064292431f, 0.7487157583f,
+ 0.7064292431f, 0.6025272012f, 0.4805524945f, 0.3701249063f,
+ 0.2812705934f, 0.1950440556f, 0.1357807517f, 0.0945780426f,
+ 0.0660543516f, 0.0462698862f, 0.0257060006f, 0.0143518075f,
+ 0.0080370344f, 0.0045088008f, 0.0000000261f},
+ {0.0000000298f, 0.0052394457f, 0.0093304962f, 0.0166329406f,
+ 0.0296991989f, 0.0531529523f, 0.0754577741f, 0.1071588024f,
+ 0.1519807279f, 0.2143882662f, 0.2980266809f, 0.3650085926f,
+ 0.4366289973f, 0.5043625832f, 0.5640503764f, 0.5867944360f,
+ 0.5640504360f, 0.5043625236f, 0.4366289973f, 0.3650085926f,
+ 0.2980266809f, 0.2143882662f, 0.1519807130f, 0.1071587950f,
+ 0.0754577741f, 0.0531529561f, 0.0296992026f, 0.0166329406f,
+ 0.0093304962f, 0.0052394457f, 0.0000000298f},
+ {0.0000000298f, 0.0056232363f, 0.0099989995f, 0.0177771747f,
+ 0.0315911807f, 0.0560568646f, 0.0789347738f, 0.1108068749f,
+ 0.1546058059f, 0.2131874412f, 0.2874797881f, 0.3436433673f,
+ 0.4005688727f, 0.4512940049f, 0.4870318770f, 0.5000000000f,
+ 0.4870318770f, 0.4512939751f, 0.4005689025f, 0.3436433673f,
+ 0.2874797881f, 0.2131874263f, 0.1546057910f, 0.1108068675f,
+ 0.0789347813f, 0.0560568646f, 0.0315911844f, 0.0177771747f,
+ 0.0099989995f, 0.0056232363f, 0.0000000298f},
+ {0.0000000261f, 0.0045304820f, 0.0080369115f, 0.0142293312f,
+ 0.0251020007f, 0.0439797007f, 0.0612145849f, 0.0845912322f,
+ 0.1155948415f, 0.1552157849f, 0.2027583867f, 0.2369178981f,
+ 0.2701408267f, 0.2986625433f, 0.3181905448f, 0.3251666427f,
+ 0.3181905448f, 0.2986625135f, 0.2701408565f, 0.2369178981f,
+ 0.2027584016f, 0.1552157849f, 0.1155948490f, 0.0845912248f,
+ 0.0612145923f, 0.0439797044f, 0.0251020044f, 0.0142293312f,
+ 0.0080369115f, 0.0045304820f, 0.0000000261f},
+ {0.0000000037f, 0.0007892065f, 0.0013978072f, 0.0024679713f,
+ 0.0043330416f, 0.0075310804f, 0.0104089491f, 0.0142532848f,
+ 0.0192561597f, 0.0255084299f, 0.0328301787f, 0.0379860699f,
+ 0.0429274589f, 0.0471183173f, 0.0499628633f, 0.0509744659f,
+ 0.0499628671f, 0.0471183136f, 0.0429274626f, 0.0379860736f,
+ 0.0328301787f, 0.0255084261f, 0.0192561597f, 0.0142532811f,
+ 0.0104089528f, 0.0075310804f, 0.0043330416f, 0.0024679713f,
+ 0.0013978072f, 0.0007892065f, 0.0000000037f}},
{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -858993460,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {3, 530105, 946540, 1695490, 3054166, 5556542,
- 8018704, 11673036, 17202416, 27742908, 48702648, 75428704,
- 125542128, 228590144, 435938784, 620187584, 435939008, 228590112,
- 125542176, 75428712, 48702652, 27742906, 17202416, 11673035,
- 8018704, 5556542, 3054167, 1695490, 946540, 530105,
- 3},
- {5, 820146, 1463798, 2619972, 4712652, 8550255,
- 12304061, 17832260, 26090394, 40209740, 67346928, 98535008,
- 148589136, 226742368, 326144352, 380823904, 326144512, 226742336,
- 148589184, 98535016, 67346936, 40209736, 26090392, 17832256,
- 12304062, 8550254, 4712652, 2619972, 1463798, 820145,
- 5},
- {7, 1210636, 2158423, 3855734, 6910758, 12454582,
- 17801918, 25536124, 36763592, 53038744, 78536976, 104675848,
- 138113008, 176331952, 210006528, 224018288, 210006544, 176331920,
- 138113024, 104675856, 78536984, 53038744, 36763592, 25536118,
- 17801920, 12454581, 6910759, 3855734, 2158423, 1210636,
- 7},
- {8, 1406676, 2505341, 4467122, 7979530, 14291465,
- 20302986, 28862170, 40995684, 57955156, 80812936, 99234096,
- 119054544, 140506896, 157841056, 164487296, 157841072, 140506896,
- 119054552, 99234096, 80812936, 57955148, 40995680, 28862168,
- 20302988, 14291464, 7979531, 4467122, 2505342, 1406676,
- 8},
- {8, 1509476, 2684086, 4772024, 8480193, 15047650,
- 21188892, 29744494, 41501680, 57227068, 77169768, 92246064,
- 107526888, 121143312, 130736624, 134217728, 130736624, 121143304,
- 107526896, 92246064, 77169768, 57227064, 41501676, 29744492,
- 21188894, 15047650, 8480194, 4772024, 2684086, 1509476,
- 8},
- {7, 1215837, 2156436, 3816673, 6729059, 11777845, 16378872,
- 22607278, 30847268, 41345884, 53900940, 62895796, 71625096, 79105408,
- 84220136, 86046016, 84220136, 79105408, 71625096, 62895796, 53900940,
- 41345884, 30847270, 22607276, 16378873, 11777844, 6729060, 3816673,
- 2156436, 1215837, 7},
- {1, 211762, 374943, 661633, 1160533, 2013907, 2779720,
- 3799796, 5122719, 6769570, 8690265, 10038436, 11327602, 12418982,
- 13158826, 13421767, 13158826, 12418981, 11327602, 10038436, 8690264,
- 6769570, 5122719, 3799796, 2779720, 2013907, 1160533, 661633,
- 374943, 211762, 1},
- },
+
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, -3.2000000477f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000112f, 0.0019747950f, 0.0035261363f, 0.0063161924f,
+ 0.0113776550f, 0.0206997320f, 0.0298720002f, 0.0434854478f,
+ 0.0640839934f, 0.1033503860f, 0.1814315021f, 0.2809938192f,
+ 0.4676808715f, 0.8515646458f, 1.6239985228f, 2.3103787899f,
+ 1.6239993572f, 0.8515645266f, 0.4676810503f, 0.2809938490f,
+ 0.1814315170f, 0.1033503786f, 0.0640839934f, 0.0434854440f,
+ 0.0298720002f, 0.0206997320f, 0.0113776587f, 0.0063161924f,
+ 0.0035261363f, 0.0019747950f, 0.0000000112f},
+ {0.0000000186f, 0.0030552819f, 0.0054530725f, 0.0097601563f,
+ 0.0175559968f, 0.0318521820f, 0.0458361991f, 0.0664303452f,
+ 0.0971942917f, 0.1497929543f, 0.2508868575f, 0.3670715094f,
+ 0.5535376668f, 0.8446811438f, 1.2149823904f, 1.4186795950f,
+ 1.2149829865f, 0.8446810246f, 0.5535378456f, 0.3670715392f,
+ 0.2508868873f, 0.1497929394f, 0.0971942842f, 0.0664303303f,
+ 0.0458362028f, 0.0318521783f, 0.0175559968f, 0.0097601563f,
+ 0.0054530725f, 0.0030552782f, 0.0000000186f},
+ {0.0000000261f, 0.0045099705f, 0.0080407523f, 0.0143637285f,
+ 0.0257445797f, 0.0463969335f, 0.0663173124f, 0.0951294750f,
+ 0.1369550526f, 0.1975847185f, 0.2925730348f, 0.3899479210f,
+ 0.5145110488f, 0.6568877101f, 0.7823352814f, 0.8345331550f,
+ 0.7823353410f, 0.6568875909f, 0.5145111084f, 0.3899479508f,
+ 0.2925730646f, 0.1975847185f, 0.1369550526f, 0.0951294526f,
+ 0.0663173199f, 0.0463969298f, 0.0257445835f, 0.0143637285f,
+ 0.0080407523f, 0.0045099705f, 0.0000000261f},
+ {0.0000000298f, 0.0052402765f, 0.0093331225f, 0.0166413262f,
+ 0.0297260657f, 0.0532398559f, 0.0756345168f, 0.1075199619f,
+ 0.1527208239f, 0.2158997804f, 0.3010516465f, 0.3696758151f,
+ 0.4435127378f, 0.5234289765f, 0.5880037546f, 0.6127629280f,
+ 0.5880038142f, 0.5234289765f, 0.4435127676f, 0.3696758151f,
+ 0.3010516465f, 0.2158997506f, 0.1527208090f, 0.1075199544f,
+ 0.0756345242f, 0.0532398522f, 0.0297260694f, 0.0166413262f,
+ 0.0093331262f, 0.0052402765f, 0.0000000298f},
+ {0.0000000298f, 0.0056232363f, 0.0099989995f, 0.0177771747f,
+ 0.0315911807f, 0.0560568646f, 0.0789347738f, 0.1108068749f,
+ 0.1546058059f, 0.2131874412f, 0.2874797881f, 0.3436433673f,
+ 0.4005688727f, 0.4512940049f, 0.4870318770f, 0.5000000000f,
+ 0.4870318770f, 0.4512939751f, 0.4005689025f, 0.3436433673f,
+ 0.2874797881f, 0.2131874263f, 0.1546057910f, 0.1108068675f,
+ 0.0789347813f, 0.0560568646f, 0.0315911844f, 0.0177771747f,
+ 0.0099989995f, 0.0056232363f, 0.0000000298f},
+ {0.0000000261f, 0.0045293458f, 0.0080333501f, 0.0142182149f,
+ 0.0250676982f, 0.0438758917f, 0.0610160530f, 0.0842186734f,
+ 0.1149150282f, 0.1540254205f, 0.2007966489f, 0.2343050987f,
+ 0.2668242753f, 0.2946906090f, 0.3137444556f, 0.3205463886f,
+ 0.3137444556f, 0.2946906090f, 0.2668242753f, 0.2343050987f,
+ 0.2007966489f, 0.1540254205f, 0.1149150357f, 0.0842186660f,
+ 0.0610160567f, 0.0438758880f, 0.0250677019f, 0.0142182149f,
+ 0.0080333501f, 0.0045293458f, 0.0000000261f},
+ {0.0000000037f, 0.0007888749f, 0.0013967715f, 0.0024647750f,
+ 0.0043233223f, 0.0075023882f, 0.0103552639f, 0.0141553432f,
+ 0.0190836154f, 0.0252186134f, 0.0323737599f, 0.0373960882f,
+ 0.0421986058f, 0.0462643132f, 0.0490204468f, 0.0499999784f,
+ 0.0490204468f, 0.0462643094f, 0.0421986058f, 0.0373960882f,
+ 0.0323737562f, 0.0252186134f, 0.0190836154f, 0.0141553432f,
+ 0.0103552639f, 0.0075023882f, 0.0043233223f, 0.0024647750f,
+ 0.0013967715f, 0.0007888749f, 0.0000000037f}},
{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {3, 529890, 945853, 1693270, 3046878, 5531883,
- 7966241, 11558316, 16941404, 26405616, 44726228, 66299660,
- 102135296, 161287136, 242754912, 290875520, 242754976, 161287104,
- 102135328, 66299668, 44726228, 26405616, 16941404, 11558314,
- 7966241, 5531883, 3046878, 1693270, 945853, 529890,
- 3},
- {5, 819848, 1462845, 2616904, 4702616, 8516569,
- 12232970, 17678754, 25748164, 38567944, 62864780, 89227176,
- 128392144, 182850000, 242436080, 271403040, 242436160, 182849968,
- 128392176, 89227168, 62864788, 38567940, 25748164, 17678752,
- 12232972, 8516569, 4702617, 2616904, 1462845, 819848,
- 5},
- {7, 1210322, 2157425, 3852534, 6900401, 12420479,
- 17731328, 25388104, 36448364, 52356736, 75502992, 99354648,
- 128997304, 161739680, 189630656, 200981856, 189630656, 161739664,
- 128997328, 99354648, 75503000, 52356740, 36448368, 25388100,
- 17731330, 12420478, 6900402, 3852534, 2157425, 1210322,
- 7},
- {8, 1406453, 2504636, 4464871, 7972318, 14268137,
- 20255542, 28765222, 40797016, 57549412, 80000928, 97981248,
- 117206704, 135388800, 151411120, 157516432, 151411136, 135388784,
- 117206704, 97981248, 80000928, 57549412, 40797012, 28765220,
- 20255542, 14268138, 7972319, 4464871, 2504636, 1406453,
- 8},
- {8, 1509476, 2684086, 4772024, 8480193, 15047650,
- 21188892, 29744494, 41501680, 57227068, 77169768, 92246064,
- 107526888, 121143312, 130736624, 134217728, 130736624, 121143304,
- 107526896, 92246064, 77169768, 57227064, 41501676, 29744492,
- 21188894, 15047650, 8480194, 4772024, 2684086, 1509476,
- 8},
- {7, 1216142, 2157392, 3819657, 6738267, 11805711, 16432165,
- 22707286, 31029754, 41665420, 54427540, 63597164, 72515376, 80171616,
- 85413624, 87286256, 85413624, 80171608, 72515384, 63597164, 54427544,
- 41665420, 31029756, 22707284, 16432167, 11805712, 6738268, 3819657,
- 2157392, 1216142, 7},
- {1, 211851, 375221, 662491, 1163142, 2021609, 2794131,
- 3826087, 5169036, 6847367, 8812784, 10196808, 11523252, 12648227,
- 13411804, 13683354, 13411805, 12648226, 11523253, 10196809, 8812784,
- 6847366, 5169036, 3826086, 2794132, 2021609, 1163142, 662491,
- 375221, 211851, 1},
- },
+
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000112f, 0.0019739941f, 0.0035235770f, 0.0063079223f,
+ 0.0113505051f, 0.0206078701f, 0.0296765603f, 0.0430580825f,
+ 0.0631116480f, 0.0983685851f, 0.1666181833f, 0.2469854802f,
+ 0.3804836273f, 0.6008414030f, 0.9043325186f, 1.0835957527f,
+ 0.9043327570f, 0.6008412838f, 0.3804837465f, 0.2469855100f,
+ 0.1666181833f, 0.0983685851f, 0.0631116480f, 0.0430580750f,
+ 0.0296765603f, 0.0206078701f, 0.0113505051f, 0.0063079223f,
+ 0.0035235770f, 0.0019739941f, 0.0000000112f},
+ {0.0000000186f, 0.0030541718f, 0.0054495223f, 0.0097487271f,
+ 0.0175186098f, 0.0317266919f, 0.0455713645f, 0.0658584908f,
+ 0.0959193856f, 0.1436767876f, 0.2341895550f, 0.3323971331f,
+ 0.4782980084f, 0.6811693311f, 0.9031447768f, 1.0110551119f,
+ 0.9031450748f, 0.6811692119f, 0.4782981277f, 0.3323971033f,
+ 0.2341895849f, 0.1436767727f, 0.0959193856f, 0.0658584833f,
+ 0.0455713719f, 0.0317266919f, 0.0175186135f, 0.0097487271f,
+ 0.0054495223f, 0.0030541718f, 0.0000000186f},
+ {0.0000000261f, 0.0045088008f, 0.0080370344f, 0.0143518075f,
+ 0.0257059969f, 0.0462698899f, 0.0660543442f, 0.0945780575f,
+ 0.1357807368f, 0.1950440407f, 0.2812705636f, 0.3701249063f,
+ 0.4805524051f, 0.6025272608f, 0.7064292431f, 0.7487157583f,
+ 0.7064292431f, 0.6025272012f, 0.4805524945f, 0.3701249063f,
+ 0.2812705934f, 0.1950440556f, 0.1357807517f, 0.0945780426f,
+ 0.0660543516f, 0.0462698862f, 0.0257060006f, 0.0143518075f,
+ 0.0080370344f, 0.0045088008f, 0.0000000261f},
+ {0.0000000298f, 0.0052394457f, 0.0093304962f, 0.0166329406f,
+ 0.0296991989f, 0.0531529523f, 0.0754577741f, 0.1071588024f,
+ 0.1519807279f, 0.2143882662f, 0.2980266809f, 0.3650085926f,
+ 0.4366289973f, 0.5043625832f, 0.5640503764f, 0.5867944360f,
+ 0.5640504360f, 0.5043625236f, 0.4366289973f, 0.3650085926f,
+ 0.2980266809f, 0.2143882662f, 0.1519807130f, 0.1071587950f,
+ 0.0754577741f, 0.0531529561f, 0.0296992026f, 0.0166329406f,
+ 0.0093304962f, 0.0052394457f, 0.0000000298f},
+ {0.0000000298f, 0.0056232363f, 0.0099989995f, 0.0177771747f,
+ 0.0315911807f, 0.0560568646f, 0.0789347738f, 0.1108068749f,
+ 0.1546058059f, 0.2131874412f, 0.2874797881f, 0.3436433673f,
+ 0.4005688727f, 0.4512940049f, 0.4870318770f, 0.5000000000f,
+ 0.4870318770f, 0.4512939751f, 0.4005689025f, 0.3436433673f,
+ 0.2874797881f, 0.2131874263f, 0.1546057910f, 0.1108068675f,
+ 0.0789347813f, 0.0560568646f, 0.0315911844f, 0.0177771747f,
+ 0.0099989995f, 0.0056232363f, 0.0000000298f},
+ {0.0000000261f, 0.0045304820f, 0.0080369115f, 0.0142293312f,
+ 0.0251020007f, 0.0439797007f, 0.0612145849f, 0.0845912322f,
+ 0.1155948415f, 0.1552157849f, 0.2027583867f, 0.2369178981f,
+ 0.2701408267f, 0.2986625433f, 0.3181905448f, 0.3251666427f,
+ 0.3181905448f, 0.2986625135f, 0.2701408565f, 0.2369178981f,
+ 0.2027584016f, 0.1552157849f, 0.1155948490f, 0.0845912248f,
+ 0.0612145923f, 0.0439797044f, 0.0251020044f, 0.0142293312f,
+ 0.0080369115f, 0.0045304820f, 0.0000000261f},
+ {0.0000000037f, 0.0007892065f, 0.0013978072f, 0.0024679713f,
+ 0.0043330416f, 0.0075310804f, 0.0104089491f, 0.0142532848f,
+ 0.0192561597f, 0.0255084299f, 0.0328301787f, 0.0379860699f,
+ 0.0429274589f, 0.0471183173f, 0.0499628633f, 0.0509744659f,
+ 0.0499628671f, 0.0471183136f, 0.0429274626f, 0.0379860736f,
+ 0.0328301787f, 0.0255084261f, 0.0192561597f, 0.0142532811f,
+ 0.0104089528f, 0.0075310804f, 0.0043330416f, 0.0024679713f,
+ 0.0013978072f, 0.0007892065f, 0.0000000037f}},
{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {3, 529280, 943904, 1686997, 3026404, 5463419,
- 7822298, 11249275, 16258558, 23600720, 36288720, 49305868,
- 66713532, 87729688, 107320216, 115788672, 107320232, 87729680,
- 66713548, 49305876, 36288720, 23600720, 16258558, 11249274,
- 7822299, 5463419, 3026404, 1686997, 943904, 529280,
- 3},
- {5, 819001, 1460144, 2608223, 4674384, 8422779,
- 12037082, 17262416, 24842774, 35819472, 52848540, 70312672,
- 92562784, 117871672, 140063120, 149267168, 140063152, 117871656,
- 92562800, 70312664, 52848548, 35819468, 24842772, 17262414,
- 12037084, 8422779, 4674385, 2608223, 1460144, 819001,
- 5},
- {7, 1209431, 2154588, 3843465, 6871159, 12324878,
- 17534810, 24980280, 35593252, 50549888, 70956104, 87630984,
- 108587528, 130892872, 148578032, 155457296, 148578032, 130892856,
- 108587536, 87630992, 70956112, 50549884, 35593252, 24980278,
- 17534812, 12324878, 6871160, 3843465, 2154588, 1209431,
- 7},
- {8, 1405821, 2502628, 4458482, 7951885, 14202332,
- 20122228, 28494402, 40246696, 56439064, 77816144, 94657800,
- 112381560, 128775712, 140691712, 145094384, 140691728, 128775696,
- 112381568, 94657808, 77816144, 56439064, 40246696, 28494400,
- 20122230, 14202331, 7951885, 4458482, 2502629, 1405821,
- 8},
- {8, 1509476, 2684086, 4772024, 8480193, 15047650,
- 21188892, 29744494, 41501680, 57227068, 77169768, 92246064,
- 107526888, 121143312, 130736624, 134217728, 130736624, 121143304,
- 107526896, 92246064, 77169768, 57227064, 41501676, 29744492,
- 21188894, 15047650, 8480194, 4772024, 2684086, 1509476,
- 8},
- {7, 1217010, 2160122, 3828190, 6764697, 11886164, 16586827,
- 22999514, 31567738, 42617632, 56016164, 65730788, 75244880, 83461560,
- 89112016, 91135304, 89112024, 83461552, 75244880, 65730788, 56016160,
- 42617628, 31567738, 22999514, 16586829, 11886164, 6764698, 3828190,
- 2160122, 1217010, 7},
- {1, 212104, 376014, 664952, 1170669, 2044035, 2836433,
- 3904056, 5308151, 7084523, 9192281, 10692476, 12141331, 13377854,
- 14220870, 14521356, 14220870, 13377854, 12141332, 10692476, 9192281,
- 7084522, 5308151, 3904056, 2836433, 2044035, 1170669, 664952,
- 376014, 212104, 1},
- },
+
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000112f, 0.0019717216f, 0.0035163164f, 0.0062845536f,
+ 0.0112742335f, 0.0203528218f, 0.0291403309f, 0.0419068150f,
+ 0.0605678484f, 0.0879195333f, 0.1351860166f, 0.1836786717f,
+ 0.2485272735f, 0.3268185556f, 0.3997989595f, 0.4313464165f,
+ 0.3997990191f, 0.3268185258f, 0.2485273331f, 0.1836787015f,
+ 0.1351860166f, 0.0879195333f, 0.0605678484f, 0.0419068113f,
+ 0.0291403346f, 0.0203528218f, 0.0112742335f, 0.0062845536f,
+ 0.0035163164f, 0.0019717216f, 0.0000000112f},
+ {0.0000000186f, 0.0030510165f, 0.0054394603f, 0.0097163878f,
+ 0.0174134374f, 0.0313772969f, 0.0448416248f, 0.0643075109f,
+ 0.0925465450f, 0.1334379315f, 0.1968761533f, 0.2619351149f,
+ 0.3448232412f, 0.4391061962f, 0.5217757821f, 0.5560635328f,
+ 0.5217759013f, 0.4391061366f, 0.3448233008f, 0.2619350851f,
+ 0.1968761832f, 0.1334379166f, 0.0925465375f, 0.0643075034f,
+ 0.0448416322f, 0.0313772969f, 0.0174134411f, 0.0097163878f,
+ 0.0054394603f, 0.0030510165f, 0.0000000186f},
+ {0.0000000261f, 0.0045054816f, 0.0080264658f, 0.0143180229f,
+ 0.0255970620f, 0.0459137484f, 0.0653222576f, 0.0930587947f,
+ 0.1325951964f, 0.1883130074f, 0.2643320858f, 0.3264508545f,
+ 0.4045200646f, 0.4876139462f, 0.5534963012f, 0.5791235566f,
+ 0.5534963012f, 0.4876138866f, 0.4045200944f, 0.3264508843f,
+ 0.2643321157f, 0.1883129925f, 0.1325951964f, 0.0930587873f,
+ 0.0653222650f, 0.0459137484f, 0.0255970657f, 0.0143180229f,
+ 0.0080264658f, 0.0045054816f, 0.0000000261f},
+ {0.0000000298f, 0.0052370913f, 0.0093230158f, 0.0166091397f,
+ 0.0296230800f, 0.0529078096f, 0.0749611408f, 0.1061499193f,
+ 0.1499306262f, 0.2102518976f, 0.2898877263f, 0.3526277840f,
+ 0.4186539352f, 0.4797269106f, 0.5241174698f, 0.5405187011f,
+ 0.5241175294f, 0.4797268510f, 0.4186539650f, 0.3526278138f,
+ 0.2898877263f, 0.2102518976f, 0.1499306262f, 0.1061499119f,
+ 0.0749611482f, 0.0529078059f, 0.0296230800f, 0.0166091397f,
+ 0.0093230195f, 0.0052370913f, 0.0000000298f},
+ {0.0000000298f, 0.0056232363f, 0.0099989995f, 0.0177771747f,
+ 0.0315911807f, 0.0560568646f, 0.0789347738f, 0.1108068749f,
+ 0.1546058059f, 0.2131874412f, 0.2874797881f, 0.3436433673f,
+ 0.4005688727f, 0.4512940049f, 0.4870318770f, 0.5000000000f,
+ 0.4870318770f, 0.4512939751f, 0.4005689025f, 0.3436433673f,
+ 0.2874797881f, 0.2131874263f, 0.1546057910f, 0.1108068675f,
+ 0.0789347813f, 0.0560568646f, 0.0315911844f, 0.0177771747f,
+ 0.0099989995f, 0.0056232363f, 0.0000000298f},
+ {0.0000000261f, 0.0045337155f, 0.0080470815f, 0.0142611191f,
+ 0.0252004601f, 0.0442794114f, 0.0617907457f, 0.0856798664f,
+ 0.1175989881f, 0.1587630510f, 0.2086764723f, 0.2448662668f,
+ 0.2803090215f, 0.3109185398f, 0.3319681287f, 0.3395054638f,
+ 0.3319681585f, 0.3109185100f, 0.2803090215f, 0.2448662668f,
+ 0.2086764574f, 0.1587630361f, 0.1175989881f, 0.0856798664f,
+ 0.0617907532f, 0.0442794114f, 0.0252004638f, 0.0142611191f,
+ 0.0080470815f, 0.0045337155f, 0.0000000261f},
+ {0.0000000037f, 0.0007901490f, 0.0014007613f, 0.0024771392f,
+ 0.0043610819f, 0.0076146238f, 0.0105665363f, 0.0145437419f,
+ 0.0197744034f, 0.0263919048f, 0.0342439152f, 0.0398325771f,
+ 0.0452299826f, 0.0498363897f, 0.0529768690f, 0.0540962666f,
+ 0.0529768690f, 0.0498363897f, 0.0452299863f, 0.0398325771f,
+ 0.0342439152f, 0.0263919011f, 0.0197744034f, 0.0145437419f,
+ 0.0105665363f, 0.0076146238f, 0.0043610819f, 0.0024771392f,
+ 0.0014007613f, 0.0007901490f, 0.0000000037f}},
{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {3, 528371, 941010, 1677737, 2996520, 5365544, 7620743,
- 10829829, 15375155, 21720310, 30256414, 37121464, 44492724, 52140916,
- 58486184, 60914064, 58486188, 52140912, 44492720, 37121464, 30256414,
- 21720308, 15375156, 10829827, 7620744, 5365544, 2996520, 1677737,
- 941010, 528371, 3},
- {5, 817738, 1456128, 2595392, 4633066, 8288027, 11760734,
- 16690856, 23650122, 33316574, 46226512, 56525852, 67496904, 77774760,
- 85824656, 89194744, 85824656, 77774760, 67496904, 56525852, 46226516,
- 33316574, 23650120, 16690854, 11760735, 8288027, 4633067, 2595392,
- 1456128, 817738, 5},
- {7, 1208101, 2150365, 3830012, 6828082, 12185838,
- 17252538, 24405054, 34418948, 48164280, 66215076, 80356216,
- 95158664, 108775560, 118626192, 122255568, 118626200, 108775552,
- 95158672, 80356216, 66215080, 48164280, 34418948, 24405052,
- 17252540, 12185838, 6828083, 3830012, 2150365, 1208101,
- 7},
- {8, 1404877, 2499634, 4448971, 7921597, 14105523,
- 19927540, 28103012, 39463168, 54891176, 74856888, 90260672,
- 106158024, 120574824, 130879080, 134648944, 130879088, 120574824,
- 106158032, 90260672, 74856888, 54891176, 39463168, 28103008,
- 19927542, 14105523, 7921598, 4448971, 2499634, 1404876,
- 8},
- {8, 1509476, 2684086, 4772024, 8480193, 15047650,
- 21188892, 29744494, 41501680, 57227068, 77169768, 92246064,
- 107526888, 121143312, 130736624, 134217728, 130736624, 121143304,
- 107526896, 92246064, 77169768, 57227064, 41501676, 29744492,
- 21188894, 15047650, 8480194, 4772024, 2684086, 1509476,
- 8},
- {7, 1218314, 2164227, 3841070, 6804840, 12009704, 16826680,
- 23458746, 32427858, 44173136, 58677072, 69367448, 79974728, 89242016,
- 95670816, 97983664, 95670824, 89242008, 79974736, 69367448, 58677076,
- 44173140, 32427856, 23458742, 16826682, 12009704, 6804841, 3841070,
- 2164227, 1218314, 7},
- {1, 212485, 377211, 668688, 1182212, 2079037, 2903492,
- 4030197, 5539070, 7490515, 9864626, 11591052, 13285722, 14752218,
- 15762206, 16124144, 15762206, 14752218, 13285723, 11591053, 9864626,
- 7490515, 5539070, 4030197, 2903492, 2079037, 1182212, 668688,
- 377210, 212485, 1},
- },
+
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000112f, 0.0019683354f, 0.0035055354f, 0.0062500574f,
+ 0.0111629069f, 0.0199882090f, 0.0283894800f, 0.0403442569f,
+ 0.0572769158f, 0.0809144601f, 0.1127139255f, 0.1382882297f,
+ 0.1657483131f, 0.1942400485f, 0.2178780138f, 0.2269225717f,
+ 0.2178780288f, 0.1942400336f, 0.1657482982f, 0.1382882297f,
+ 0.1127139255f, 0.0809144527f, 0.0572769195f, 0.0403442495f,
+ 0.0283894837f, 0.0199882090f, 0.0111629069f, 0.0062500574f,
+ 0.0035055354f, 0.0019683354f, 0.0000000112f},
+ {0.0000000186f, 0.0030463114f, 0.0054244995f, 0.0096685886f,
+ 0.0172595158f, 0.0308753066f, 0.0438121483f, 0.0621782839f,
+ 0.0881035700f, 0.1241139099f, 0.1722071767f, 0.2105752081f,
+ 0.2514455616f, 0.2897335589f, 0.3197217584f, 0.3322763145f,
+ 0.3197217584f, 0.2897335589f, 0.2514455616f, 0.2105752081f,
+ 0.1722071916f, 0.1241139099f, 0.0881035626f, 0.0621782765f,
+ 0.0438121520f, 0.0308753066f, 0.0172595195f, 0.0096685886f,
+ 0.0054244995f, 0.0030463114f, 0.0000000186f},
+ {0.0000000261f, 0.0045005269f, 0.0080107339f, 0.0142679065f,
+ 0.0254365876f, 0.0453957841f, 0.0642707124f, 0.0909159109f,
+ 0.1282205731f, 0.1794259250f, 0.2466703802f, 0.2993502319f,
+ 0.3544936478f, 0.4052205384f, 0.4419170022f, 0.4554374814f,
+ 0.4419170320f, 0.4052205086f, 0.3544936776f, 0.2993502319f,
+ 0.2466703951f, 0.1794259250f, 0.1282205731f, 0.0909159034f,
+ 0.0642707199f, 0.0453957841f, 0.0254365914f, 0.0142679065f,
+ 0.0080107339f, 0.0045005269f, 0.0000000261f},
+ {0.0000000298f, 0.0052335747f, 0.0093118623f, 0.0165737085f,
+ 0.0295102485f, 0.0525471680f, 0.0742358714f, 0.1046918780f,
+ 0.1470117569f, 0.2044855654f, 0.2788636386f, 0.3362472057f,
+ 0.3954694569f, 0.4491762221f, 0.4875625670f, 0.5016064048f,
+ 0.4875625968f, 0.4491762221f, 0.3954694867f, 0.3362472057f,
+ 0.2788636386f, 0.2044855654f, 0.1470117569f, 0.1046918631f,
+ 0.0742358789f, 0.0525471680f, 0.0295102522f, 0.0165737085f,
+ 0.0093118623f, 0.0052335709f, 0.0000000298f},
+ {0.0000000298f, 0.0056232363f, 0.0099989995f, 0.0177771747f,
+ 0.0315911807f, 0.0560568646f, 0.0789347738f, 0.1108068749f,
+ 0.1546058059f, 0.2131874412f, 0.2874797881f, 0.3436433673f,
+ 0.4005688727f, 0.4512940049f, 0.4870318770f, 0.5000000000f,
+ 0.4870318770f, 0.4512939751f, 0.4005689025f, 0.3436433673f,
+ 0.2874797881f, 0.2131874263f, 0.1546057910f, 0.1108068675f,
+ 0.0789347813f, 0.0560568646f, 0.0315911844f, 0.0177771747f,
+ 0.0099989995f, 0.0056232363f, 0.0000000298f},
+ {0.0000000261f, 0.0045385733f, 0.0080623738f, 0.0143091008f,
+ 0.0253500044f, 0.0447396338f, 0.0626842678f, 0.0873906389f,
+ 0.1208031848f, 0.1645577550f, 0.2185891271f, 0.2584138811f,
+ 0.2979290783f, 0.3324524164f, 0.3564015627f, 0.3650175929f,
+ 0.3564015925f, 0.3324523866f, 0.2979291081f, 0.2584138811f,
+ 0.2185891420f, 0.1645577699f, 0.1208031774f, 0.0873906240f,
+ 0.0626842752f, 0.0447396338f, 0.0253500082f, 0.0143091008f,
+ 0.0080623738f, 0.0045385733f, 0.0000000261f},
+ {0.0000000037f, 0.0007915683f, 0.0014052205f, 0.0024910569f,
+ 0.0044040829f, 0.0077450164f, 0.0108163506f, 0.0150136538f,
+ 0.0206346437f, 0.0279043429f, 0.0367485955f, 0.0431800336f,
+ 0.0494931713f, 0.0549562946f, 0.0587187931f, 0.0600671172f,
+ 0.0587187931f, 0.0549562946f, 0.0494931750f, 0.0431800373f,
+ 0.0367485955f, 0.0279043429f, 0.0206346437f, 0.0150136538f,
+ 0.0108163506f, 0.0077450164f, 0.0044040829f, 0.0024910569f,
+ 0.0014052168f, 0.0007915683f, 0.0000000037f}},
{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {3, 527304, 937630, 1667008, 2962381, 5256587, 7401904,
- 10390627, 14497757, 19991098, 26957670, 32224264, 37562304, 42318920,
- 45670148, 46886200, 45670152, 42318920, 37562308, 32224264, 26957670,
- 19991098, 14497757, 10390626, 7401904, 5256587, 2962381, 1667008,
- 937630, 527304, 3},
- {5, 816257, 1451433, 2580496, 4585709, 8137095, 11458003,
- 16084489, 22442248, 30945832, 41729952, 49882536, 58145720, 65508872,
- 70696504, 72578928, 70696512, 65508868, 58145724, 49882536, 41729952,
- 30945832, 22442248, 16084488, 11458004, 8137095, 4585709, 2580496,
- 1451434, 816257, 5},
- {7, 1206538, 2145415, 3814322, 6778296, 12027725,
- 16936476, 23775046, 33172672, 45742120, 61682500, 73733120,
- 85947224, 96830952, 104498976, 107281456, 104498984, 96830952,
- 85947232, 73733128, 61682504, 45742116, 33172670, 23775044,
- 16936476, 12027724, 6778297, 3814322, 2145415, 1206538,
- 7},
- {8, 1403765, 2496115, 4437830, 7886310, 13993836,
- 19704996, 27661434, 38595240, 53219352, 71765424, 85785904,
- 99996584, 112659424, 121580896, 124818216, 121580904, 112659416,
- 99996592, 85785904, 71765432, 53219352, 38595240, 27661430,
- 19704998, 13993836, 7886311, 4437830, 2496115, 1403764,
- 8},
- {8, 1509476, 2684086, 4772024, 8480193, 15047650,
- 21188892, 29744494, 41501680, 57227068, 77169768, 92246064,
- 107526888, 121143312, 130736624, 134217728, 130736624, 121143304,
- 107526896, 92246064, 77169768, 57227064, 41501676, 29744492,
- 21188894, 15047650, 8480194, 4772024, 2684086, 1509476,
- 8},
- {7, 1219857, 2169099, 3856430, 6853125, 12160503,
- 17123444, 24037508, 33538878, 46247084, 62363436, 74547088,
- 86896032, 97899912, 105652584, 108465784, 105652592, 97899904,
- 86896032, 74547096, 62363440, 46247084, 33538876, 24037506,
- 17123446, 12160503, 6853125, 3856430, 2169099, 1219857,
- 7},
- {1, 212938, 378637, 673176, 1196278, 2122731, 2989060,
- 4195976, 5854530, 8072868, 10886130, 13012902, 15168527, 17089358,
- 18442662, 18933732, 18442662, 17089358, 15168528, 13012903, 10886130,
- 8072867, 5854530, 4195975, 2989060, 2122731, 1196278, 673176,
- 378637, 212938, 1},
- },
+
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000112f, 0.0019643605f, 0.0034929439f, 0.0062100887f,
+ 0.0110357292f, 0.0195823126f, 0.0275742412f, 0.0387081020f,
+ 0.0540083535f, 0.0744726434f, 0.1004251465f, 0.1200447381f,
+ 0.1399304867f, 0.1576502621f, 0.1701345593f, 0.1746647060f,
+ 0.1701345742f, 0.1576502621f, 0.1399305016f, 0.1200447381f,
+ 0.1004251465f, 0.0744726434f, 0.0540083535f, 0.0387080982f,
+ 0.0275742412f, 0.0195823126f, 0.0110357292f, 0.0062100887f,
+ 0.0034929439f, 0.0019643605f, 0.0000000112f},
+ {0.0000000186f, 0.0030407943f, 0.0054070093f, 0.0096130967f,
+ 0.0170830972f, 0.0303130411f, 0.0426843874f, 0.0599193908f,
+ 0.0836038888f, 0.1152822077f, 0.1554561853f, 0.1858269274f,
+ 0.2166096866f, 0.2440395653f, 0.2633650005f, 0.2703775764f,
+ 0.2633650303f, 0.2440395504f, 0.2166097015f, 0.1858269274f,
+ 0.1554561853f, 0.1152822077f, 0.0836038888f, 0.0599193871f,
+ 0.0426843911f, 0.0303130411f, 0.0170830972f, 0.0096130967f,
+ 0.0054070130f, 0.0030407943f, 0.0000000186f},
+ {0.0000000261f, 0.0044947043f, 0.0079922937f, 0.0142094567f,
+ 0.0252511203f, 0.0448067673f, 0.0630932897f, 0.0885689482f,
+ 0.1235778332f, 0.1704026759f, 0.2297852188f, 0.2746772766f,
+ 0.3201783597f, 0.3607234061f, 0.3892890215f, 0.3996545672f,
+ 0.3892890513f, 0.3607234061f, 0.3201783895f, 0.2746773064f,
+ 0.2297852337f, 0.1704026610f, 0.1235778257f, 0.0885689408f,
+ 0.0630932897f, 0.0448067635f, 0.0252511241f, 0.0142094567f,
+ 0.0079922937f, 0.0044947043f, 0.0000000261f},
+ {0.0000000298f, 0.0052294321f, 0.0092987530f, 0.0165322050f,
+ 0.0293787941f, 0.0521311015f, 0.0734068304f, 0.1030468717f,
+ 0.1437784731f, 0.1982575357f, 0.2673470378f, 0.3195773959f,
+ 0.3725163043f, 0.4196890593f, 0.4529241323f, 0.4649840891f,
+ 0.4529241621f, 0.4196890295f, 0.3725163341f, 0.3195773959f,
+ 0.2673470676f, 0.1982575357f, 0.1437784731f, 0.1030468568f,
+ 0.0734068379f, 0.0521311015f, 0.0293787979f, 0.0165322050f,
+ 0.0092987530f, 0.0052294284f, 0.0000000298f},
+ {0.0000000298f, 0.0056232363f, 0.0099989995f, 0.0177771747f,
+ 0.0315911807f, 0.0560568646f, 0.0789347738f, 0.1108068749f,
+ 0.1546058059f, 0.2131874412f, 0.2874797881f, 0.3436433673f,
+ 0.4005688727f, 0.4512940049f, 0.4870318770f, 0.5000000000f,
+ 0.4870318770f, 0.4512939751f, 0.4005689025f, 0.3436433673f,
+ 0.2874797881f, 0.2131874263f, 0.1546057910f, 0.1108068675f,
+ 0.0789347813f, 0.0560568646f, 0.0315911844f, 0.0177771747f,
+ 0.0099989995f, 0.0056232363f, 0.0000000298f},
+ {0.0000000261f, 0.0045443214f, 0.0080805235f, 0.0143663213f,
+ 0.0255298801f, 0.0453014039f, 0.0637897998f, 0.0895466954f,
+ 0.1249420568f, 0.1722838134f, 0.2323219031f, 0.2777095437f,
+ 0.3237129450f, 0.3647055924f, 0.3935865462f, 0.4040665329f,
+ 0.3935865760f, 0.3647055626f, 0.3237129450f, 0.2777095735f,
+ 0.2323219180f, 0.1722838134f, 0.1249420494f, 0.0895466879f,
+ 0.0637898073f, 0.0453014039f, 0.0255298801f, 0.0143663213f,
+ 0.0080805235f, 0.0045443214f, 0.0000000261f},
+ {0.0000000037f, 0.0007932559f, 0.0014105327f, 0.0025077760f,
+ 0.0044564828f, 0.0079077892f, 0.0111351162f, 0.0156312287f,
+ 0.0218098238f, 0.0300737768f, 0.0405539945f, 0.0484768376f,
+ 0.0565071665f, 0.0636628196f, 0.0687042698f, 0.0705336481f,
+ 0.0687042698f, 0.0636628196f, 0.0565071702f, 0.0484768413f,
+ 0.0405539945f, 0.0300737731f, 0.0218098238f, 0.0156312250f,
+ 0.0111351162f, 0.0079077892f, 0.0044564828f, 0.0025077760f,
+ 0.0014105327f, 0.0007932559f, 0.0000000037f}},
{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {3, 526244, 934286, 1656482, 2929383, 5154009, 7200895,
- 10000863, 13755239, 18618438, 24545892, 28863346, 33106846, 36783140,
- 39317168, 40225668, 39317172, 36783136, 33106846, 28863346, 24545892,
- 18618438, 13755238, 10000861, 7200896, 5154009, 2929384, 1656483,
- 934287, 526244, 3},
- {5, 814783, 1446784, 2565855, 4539774, 7994119, 11177507,
- 15539743, 21402348, 29018418, 38333064, 45138564, 51843736, 57665092,
- 61684144, 63126296, 61684144, 57665088, 51843736, 45138564, 38333064,
- 29018416, 21402346, 15539743, 11177508, 7994120, 4539775, 2565855,
- 1446784, 814783, 5},
- {7, 1204981, 2140499, 3798824, 6729584, 11875611, 16637170,
- 23191438, 32052656, 43652104, 57969124, 68517096, 78979352, 88116992,
- 94454288, 96733928, 94454296, 88116984, 78979352, 68517096, 57969132,
- 43652104, 32052654, 23191436, 16637170, 11875611, 6729584, 3798824,
- 2140499, 1204981, 7},
- {8, 1402655, 2492611, 4426772, 7851491, 13884761,
- 19489746, 27240036, 37782168, 51691532, 69027848, 81916832,
- 94796824, 106122744, 114019024, 116867616, 114019032, 106122736,
- 94796832, 81916832, 69027848, 51691532, 37782168, 27240034,
- 19489748, 13884760, 7851492, 4426772, 2492611, 1402655,
- 8},
- {8, 1509476, 2684086, 4772024, 8480193, 15047650,
- 21188892, 29744494, 41501680, 57227068, 77169768, 92246064,
- 107526888, 121143312, 130736624, 134217728, 130736624, 121143304,
- 107526896, 92246064, 77169768, 57227064, 41501676, 29744492,
- 21188894, 15047650, 8480194, 4772024, 2684086, 1509476,
- 8},
- {7, 1221406, 2174004, 3871976, 6902451, 12317130,
- 17436482, 24661340, 34772524, 48643564, 66845112, 81092456,
- 95994392, 109691792, 119593848, 123240712, 119593864, 109691784,
- 95994392, 81092456, 66845116, 48643564, 34772520, 24661336,
- 17436482, 12317130, 6902452, 3871976, 2174004, 1221406,
- 7},
- {1, 213393, 380079, 677757, 1210858, 2169302, 3082668,
- 4384052, 6230858, 8816279, 12308984, 15131109, 18175568, 21641464,
- 24357576, 25401724, 24357578, 21641462, 18175570, 15131110, 12308985,
- 8816279, 6230857, 4384051, 3082668, 2169302, 1210858, 677757,
- 380079, 213393, 1},
- },
+
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000112f, 0.0019604117f, 0.0034804866f, 0.0061708763f,
+ 0.0109128021f, 0.0192001797f, 0.0268254243f, 0.0372561179f,
+ 0.0512422584f, 0.0693590865f, 0.0914405733f, 0.1075243428f,
+ 0.1233326122f, 0.1370278746f, 0.1464678645f, 0.1498522907f,
+ 0.1464678794f, 0.1370278597f, 0.1233326122f, 0.1075243428f,
+ 0.0914405733f, 0.0693590865f, 0.0512422547f, 0.0372561105f,
+ 0.0268254280f, 0.0192001797f, 0.0109128058f, 0.0061708800f,
+ 0.0034804903f, 0.0019604117f, 0.0000000112f},
+ {0.0000000186f, 0.0030353032f, 0.0053896904f, 0.0095585547f,
+ 0.0169119760f, 0.0297804140f, 0.0416394584f, 0.0578900538f,
+ 0.0797299594f, 0.1081020311f, 0.1428017914f, 0.1681542546f,
+ 0.1931329668f, 0.2148192078f, 0.2297913432f, 0.2351637781f,
+ 0.2297913432f, 0.2148191929f, 0.1931329668f, 0.1681542546f,
+ 0.1428017914f, 0.1081020236f, 0.0797299519f, 0.0578900538f,
+ 0.0416394621f, 0.0297804177f, 0.0169119798f, 0.0095585547f,
+ 0.0053896904f, 0.0030353032f, 0.0000000186f},
+ {0.0000000261f, 0.0044889040f, 0.0079739802f, 0.0141517222f,
+ 0.0250696540f, 0.0442400984f, 0.0619782880f, 0.0863948390f,
+ 0.1194054484f, 0.1626167595f, 0.2159518152f, 0.2552460730f,
+ 0.2942210138f, 0.3282613754f, 0.3518696427f, 0.3603619635f,
+ 0.3518696725f, 0.3282613456f, 0.2942210138f, 0.2552460730f,
+ 0.2159518450f, 0.1626167595f, 0.1194054410f, 0.0863948315f,
+ 0.0619782880f, 0.0442400984f, 0.0250696540f, 0.0141517222f,
+ 0.0079739802f, 0.0044889040f, 0.0000000261f},
+ {0.0000000298f, 0.0052252971f, 0.0092856996f, 0.0164910108f,
+ 0.0292490833f, 0.0517247654f, 0.0726049617f, 0.1014770418f,
+ 0.1407495439f, 0.1925659627f, 0.2571487725f, 0.3051639795f,
+ 0.3531456888f, 0.3953380287f, 0.4247539639f, 0.4353657961f,
+ 0.4247539937f, 0.3953379989f, 0.3531457186f, 0.3051639795f,
+ 0.2571487725f, 0.1925659627f, 0.1407495439f, 0.1014770344f,
+ 0.0726049691f, 0.0517247617f, 0.0292490870f, 0.0164910108f,
+ 0.0092856996f, 0.0052252971f, 0.0000000298f},
+ {0.0000000298f, 0.0056232363f, 0.0099989995f, 0.0177771747f,
+ 0.0315911807f, 0.0560568646f, 0.0789347738f, 0.1108068749f,
+ 0.1546058059f, 0.2131874412f, 0.2874797881f, 0.3436433673f,
+ 0.4005688727f, 0.4512940049f, 0.4870318770f, 0.5000000000f,
+ 0.4870318770f, 0.4512939751f, 0.4005689025f, 0.3436433673f,
+ 0.2874797881f, 0.2131874263f, 0.1546057910f, 0.1108068675f,
+ 0.0789347813f, 0.0560568646f, 0.0315911844f, 0.0177771747f,
+ 0.0099989995f, 0.0056232363f, 0.0000000298f},
+ {0.0000000261f, 0.0045500919f, 0.0080987960f, 0.0144242346f,
+ 0.0257136337f, 0.0458848849f, 0.0649559572f, 0.0918706506f,
+ 0.1295377463f, 0.1812113971f, 0.2490174472f, 0.3020929396f,
+ 0.3576069772f, 0.4086337686f, 0.4455218017f, 0.4591074288f,
+ 0.4455218613f, 0.4086337388f, 0.3576069772f, 0.3020929396f,
+ 0.2490174621f, 0.1812113971f, 0.1295377314f, 0.0918706357f,
+ 0.0649559572f, 0.0458848849f, 0.0257136375f, 0.0144242346f,
+ 0.0080987960f, 0.0045500919f, 0.0000000261f},
+ {0.0000000037f, 0.0007949509f, 0.0014159046f, 0.0025248416f,
+ 0.0045107976f, 0.0080812797f, 0.0114838332f, 0.0163318664f,
+ 0.0232117549f, 0.0328431986f, 0.0458545387f, 0.0563677736f,
+ 0.0677092671f, 0.0806207359f, 0.0907390416f, 0.0946287960f,
+ 0.0907390490f, 0.0806207284f, 0.0677092746f, 0.0563677773f,
+ 0.0458545424f, 0.0328431986f, 0.0232117511f, 0.0163318627f,
+ 0.0114838332f, 0.0080812797f, 0.0045107976f, 0.0025248416f,
+ 0.0014159046f, 0.0007949509f, 0.0000000037f}},
{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {3, 525351, 931480, 1647714, 2902257, 5071597, 7042735,
- 9702682, 13207803, 17652582, 22940042, 26711398, 30359378, 33476790,
- 35604104, 36362736, 35604104, 33476788, 30359380, 26711396, 22940042,
- 17652582, 13207803, 9702681, 7042735, 5071597, 2902257, 1647714,
- 931480, 525351, 3},
- {5, 813540, 1442877, 2553636, 4501896, 7878638, 10955188,
- 15118865, 20625528, 27638920, 36022472, 42026544, 47851780, 52842400,
- 56254208, 57472080, 56254208, 52842396, 47851784, 42026548, 36022476,
- 27638918, 20625528, 15118864, 10955189, 7878638, 4501896, 2553636,
- 1442877, 813540, 5},
- {7, 1203665, 2136357, 3785832, 6689100, 11751078, 16395488,
- 22728960, 31187070, 42088120, 55296528, 64867172, 74235600, 82322976,
- 87882752, 89873216, 87882752, 82322968, 74235600, 64867176, 55296532,
- 42088120, 31187070, 22728958, 16395489, 11751078, 6689101, 3785832,
- 2136357, 1203665, 7},
- {8, 1401717, 2489652, 4417463, 7822332, 13794261,
- 19312684, 26897488, 37131704, 50494456, 66937128, 79016952,
- 90971256, 101390632, 108605536, 111198640, 108605544, 101390624,
- 90971264, 79016952, 66937132, 50494456, 37131704, 26897486,
- 19312686, 13794262, 7822333, 4417463, 2489652, 1401717,
- 8},
- {8, 1509476, 2684086, 4772024, 8480193, 15047650,
- 21188892, 29744494, 41501680, 57227068, 77169768, 92246064,
- 107526888, 121143312, 130736624, 134217728, 130736624, 121143304,
- 107526896, 92246064, 77169768, 57227064, 41501676, 29744492,
- 21188894, 15047650, 8480194, 4772024, 2684086, 1509476,
- 8},
- {7, 1222724, 2178188, 3885304, 6945113, 12454759,
- 17715756, 25230046, 35932312, 50996136, 71510480, 88238112,
- 108673688, 130724608, 148143040, 154903072, 148143056, 130724600,
- 108673704, 88238112, 71510496, 50996136, 35932312, 25230042,
- 17715758, 12454758, 6945114, 3885304, 2178189, 1222724,
- 7},
- {1, 213781, 381315, 681714, 1223645, 2211279, 3169313,
- 4564991, 6613954, 9638446, 15182688, 20899232, 28782230, 38682300,
- 48311484, 52599940, 48311496, 38682296, 28782232, 20899232, 15182688,
- 9638446, 6613954, 4564991, 3169313, 2211279, 1223645, 681714,
- 381315, 213781, 1},
- },
+
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000112f, 0.0019570850f, 0.0034700334f, 0.0061382130f,
+ 0.0108117498f, 0.0188931711f, 0.0262362324f, 0.0361453071f,
+ 0.0492029004f, 0.0657609925f, 0.0854583159f, 0.0995077118f,
+ 0.1130974963f, 0.1247107610f, 0.1326356232f, 0.1354617476f,
+ 0.1326356232f, 0.1247107536f, 0.1130975038f, 0.0995077044f,
+ 0.0854583159f, 0.0657609925f, 0.0492029004f, 0.0361453034f,
+ 0.0262362324f, 0.0188931711f, 0.0108117498f, 0.0061382130f,
+ 0.0034700334f, 0.0019570850f, 0.0000000112f},
+ {0.0000000186f, 0.0030306727f, 0.0053751357f, 0.0095130354f,
+ 0.0167708695f, 0.0293502137f, 0.0408112556f, 0.0563221611f,
+ 0.0768360794f, 0.1029630005f, 0.1341941655f, 0.1565610766f,
+ 0.1782617718f, 0.1968532801f, 0.2095632553f, 0.2141001821f,
+ 0.2095632553f, 0.1968532652f, 0.1782617867f, 0.1565610915f,
+ 0.1341941804f, 0.1029629931f, 0.0768360794f, 0.0563221574f,
+ 0.0408112593f, 0.0293502137f, 0.0167708695f, 0.0095130354f,
+ 0.0053751357f, 0.0030306727f, 0.0000000186f},
+ {0.0000000261f, 0.0044840015f, 0.0079585500f, 0.0141033232f,
+ 0.0249188393f, 0.0437761769f, 0.0610779524f, 0.0846719742f,
+ 0.1161808893f, 0.1567904651f, 0.2059956193f, 0.2416490465f,
+ 0.2765491605f, 0.3066769838f, 0.3273887634f, 0.3348038197f,
+ 0.3273887634f, 0.3066769540f, 0.2765491605f, 0.2416490614f,
+ 0.2059956342f, 0.1567904651f, 0.1161808893f, 0.0846719667f,
+ 0.0610779561f, 0.0437761769f, 0.0249188431f, 0.0141033232f,
+ 0.0079585500f, 0.0044840015f, 0.0000000261f},
+ {0.0000000298f, 0.0052218027f, 0.0092746764f, 0.0164563321f,
+ 0.0291404575f, 0.0513876267f, 0.0719453543f, 0.1002009511f,
+ 0.1383263767f, 0.1881065071f, 0.2493602335f, 0.2943610847f,
+ 0.3388943374f, 0.3777095377f, 0.4045871496f, 0.4142472148f,
+ 0.4045871794f, 0.3777095079f, 0.3388943672f, 0.2943610847f,
+ 0.2493602484f, 0.1881065071f, 0.1383263767f, 0.1002009436f,
+ 0.0719453618f, 0.0513876304f, 0.0291404612f, 0.0164563321f,
+ 0.0092746764f, 0.0052218027f, 0.0000000298f},
+ {0.0000000298f, 0.0056232363f, 0.0099989995f, 0.0177771747f,
+ 0.0315911807f, 0.0560568646f, 0.0789347738f, 0.1108068749f,
+ 0.1546058059f, 0.2131874412f, 0.2874797881f, 0.3436433673f,
+ 0.4005688727f, 0.4512940049f, 0.4870318770f, 0.5000000000f,
+ 0.4870318770f, 0.4512939751f, 0.4005689025f, 0.3436433673f,
+ 0.2874797881f, 0.2131874263f, 0.1546057910f, 0.1108068675f,
+ 0.0789347813f, 0.0560568646f, 0.0315911844f, 0.0177771747f,
+ 0.0099989995f, 0.0056232363f, 0.0000000298f},
+ {0.0000000261f, 0.0045550019f, 0.0081143826f, 0.0144738853f,
+ 0.0258725621f, 0.0463975929f, 0.0659963340f, 0.0939892456f,
+ 0.1338582933f, 0.1899754107f, 0.2663972974f, 0.3287125826f,
+ 0.4048410356f, 0.4869871140f, 0.5518758297f, 0.5770589113f,
+ 0.5518758893f, 0.4869870842f, 0.4048410952f, 0.3287125826f,
+ 0.2663973570f, 0.1899754107f, 0.1338582933f, 0.0939892307f,
+ 0.0659963414f, 0.0463975891f, 0.0258725658f, 0.0144738853f,
+ 0.0081143863f, 0.0045550019f, 0.0000000261f},
+ {0.0000000037f, 0.0007963963f, 0.0014205091f, 0.0025395826f,
+ 0.0045584328f, 0.0082376562f, 0.0118066110f, 0.0170059167f,
+ 0.0246388987f, 0.0359060094f, 0.0565599203f, 0.0778557062f,
+ 0.1072221622f, 0.1441027969f, 0.1799743026f, 0.1959500462f,
+ 0.1799743474f, 0.1441027820f, 0.1072221696f, 0.0778557062f,
+ 0.0565599203f, 0.0359060094f, 0.0246388987f, 0.0170059167f,
+ 0.0118066110f, 0.0082376562f, 0.0045584328f, 0.0025395826f,
+ 0.0014205091f, 0.0007963963f, 0.0000000037f}},
{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {3, 524756, 929618, 1641931, 2884546, 5018684, 6942684,
- 9517694, 12876462, 17085148, 22027530, 25515680, 28863994, 31707368,
- 33639036, 34326304, 33639036, 31707366, 28863994, 25515680, 22027532,
- 17085148, 12876462, 9517694, 6942685, 5018684, 2884546, 1641932,
- 929618, 524756, 3},
- {5, 812713, 1440285, 2545568, 4477108, 7804208, 10813826,
- 14855985, 20151268, 26819762, 34692788, 40273396, 45646932, 50221664,
- 53335084, 54443824, 53335084, 50221660, 45646932, 40273400, 34692788,
- 26819762, 20151268, 14855983, 10813826, 7804208, 4477108, 2545568,
- 1440285, 812713, 5},
- {7, 1202789, 2133603, 3777225, 6662453, 11670018, 16239749,
- 22434930, 30646316, 41132172, 53703904, 62730216, 71504264, 79033256,
- 84186408, 86026976, 84186408, 79033248, 71504272, 62730216, 53703904,
- 41132176, 30646314, 22434930, 16239752, 11670018, 6662454, 3777225,
- 2133603, 1202789, 7},
- {8, 1401091, 2487681, 4411274, 7803027, 13734770,
- 19197032, 26675680, 36715348, 49739444, 65641580, 77242592,
- 88658984, 98560160, 105390504, 107840400, 105390512, 98560152,
- 88658992, 77242584, 65641576, 49739444, 36715348, 26675674,
- 19197034, 13734769, 7803028, 4411274, 2487680, 1401091,
- 8},
- {8, 1509476, 2684086, 4772024, 8480193, 15047650,
- 21188892, 29744494, 41501680, 57227068, 77169768, 92246064,
- 107526888, 121143312, 130736624, 134217728, 130736624, 121143304,
- 107526896, 92246064, 77169768, 57227064, 41501676, 29744492,
- 21188894, 15047650, 8480194, 4772024, 2684086, 1509476,
- 8},
- {7, 1223607, 2180998, 3894286, 6974063, 12549334,
- 17910016, 25632730, 36775224, 52772652, 75633064, 99236928,
- 128381352, 160330848, 187347776, 198291392, 187347792, 160330832,
- 128381360, 99236928, 75633072, 52772652, 36775220, 25632728,
- 17910018, 12549334, 6974064, 3894286, 2180998, 1223607,
- 7},
- {1, 214041, 382148, 684396, 1232418, 2240724,
- 3231452, 4699171, 6913169, 11028142, 19133980, 29199468,
- 47298756, 81631544, 140893488, 184843632, 140893568, 81631528,
- 47298760, 29199470, 19133982, 11028142, 6913169, 4699170,
- 3231452, 2240724, 1232418, 684397, 382148, 214041,
- 1},
- },
-};
-const WORD32 ixheaacd_weight_Q28[16][8][31] = {
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f},
+ {0.0000000112f, 0.0019548684f, 0.0034630969f, 0.0061166696f,
+ 0.0107457712f, 0.0186960548f, 0.0258635134f, 0.0354561731f,
+ 0.0479685590f, 0.0636471361f, 0.0820589438f, 0.0950533152f,
+ 0.1075267568f, 0.1181191504f, 0.1253151745f, 0.1278754473f,
+ 0.1253151745f, 0.1181191429f, 0.1075267568f, 0.0950533152f,
+ 0.0820589513f, 0.0636471361f, 0.0479685590f, 0.0354561731f,
+ 0.0258635171f, 0.0186960548f, 0.0107457712f, 0.0061166734f,
+ 0.0034630969f, 0.0019548684f, 0.0000000112f},
+ {0.0000000186f, 0.0030275919f, 0.0053654797f, 0.0094829798f,
+ 0.0166785270f, 0.0290729403f, 0.0402846411f, 0.0553428568f,
+ 0.0750693232f, 0.0999113992f, 0.1292407066f, 0.1500300914f,
+ 0.1700480729f, 0.1870902777f, 0.1986886710f, 0.2028190494f,
+ 0.1986886710f, 0.1870902628f, 0.1700480729f, 0.1500301063f,
+ 0.1292407066f, 0.0999113992f, 0.0750693232f, 0.0553428493f,
+ 0.0402846411f, 0.0290729403f, 0.0166785270f, 0.0094829798f,
+ 0.0053654797f, 0.0030275919f, 0.0000000186f},
+ {0.0000000261f, 0.0044807382f, 0.0079482906f, 0.0140712596f,
+ 0.0248195715f, 0.0434742048f, 0.0604977794f, 0.0835766271f,
+ 0.1141664237f, 0.1532292813f, 0.2000626326f, 0.2336882651f,
+ 0.2663741410f, 0.2944218218f, 0.3136188090f, 0.3204754591f,
+ 0.3136188090f, 0.2944217920f, 0.2663741708f, 0.2336882651f,
+ 0.2000626326f, 0.1532292962f, 0.1141664162f, 0.0835766271f,
+ 0.0604977906f, 0.0434742048f, 0.0248195753f, 0.0140712596f,
+ 0.0079482906f, 0.0044807382f, 0.0000000261f},
+ {0.0000000298f, 0.0052194707f, 0.0092673339f, 0.0164332762f,
+ 0.0290685408f, 0.0511660054f, 0.0715145171f, 0.0993746519f,
+ 0.1367753297f, 0.1852938682f, 0.2445339411f, 0.2877510786f,
+ 0.3302804530f, 0.3671652079f, 0.3926102221f, 0.4017367959f,
+ 0.3926102519f, 0.3671651781f, 0.3302804828f, 0.2877510488f,
+ 0.2445339262f, 0.1852938682f, 0.1367753297f, 0.0993746296f,
+ 0.0715145245f, 0.0511660017f, 0.0290685445f, 0.0164332762f,
+ 0.0092673302f, 0.0052194707f, 0.0000000298f},
+ {0.0000000298f, 0.0056232363f, 0.0099989995f, 0.0177771747f,
+ 0.0315911807f, 0.0560568646f, 0.0789347738f, 0.1108068749f,
+ 0.1546058059f, 0.2131874412f, 0.2874797881f, 0.3436433673f,
+ 0.4005688727f, 0.4512940049f, 0.4870318770f, 0.5000000000f,
+ 0.4870318770f, 0.4512939751f, 0.4005689025f, 0.3436433673f,
+ 0.2874797881f, 0.2131874263f, 0.1546057910f, 0.1108068675f,
+ 0.0789347813f, 0.0560568646f, 0.0315911844f, 0.0177771747f,
+ 0.0099989995f, 0.0056232363f, 0.0000000298f},
+ {0.0000000261f, 0.0045582913f, 0.0081248507f, 0.0145073459f,
+ 0.0259804092f, 0.0467499122f, 0.0667200089f, 0.0954893604f,
+ 0.1369983852f, 0.1965934485f, 0.2817551196f, 0.3696863651f,
+ 0.4782578051f, 0.5972789526f, 0.6979248524f, 0.7386929989f,
+ 0.6979249120f, 0.5972788930f, 0.4782578349f, 0.3696863651f,
+ 0.2817551494f, 0.1965934485f, 0.1369983703f, 0.0954893529f,
+ 0.0667200163f, 0.0467499122f, 0.0259804130f, 0.0145073459f,
+ 0.0081248507f, 0.0045582913f, 0.0000000261f},
+ {0.0000000037f, 0.0007973649f, 0.0014236122f, 0.0025495738f,
+ 0.0045911148f, 0.0083473474f, 0.0120380968f, 0.0175057761f,
+ 0.0257535614f, 0.0410830304f, 0.0712796301f, 0.1087764949f,
+ 0.1762015969f, 0.3041011989f, 0.5248691440f, 0.6885961890f,
+ 0.5248694420f, 0.3041011393f, 0.1762016118f, 0.1087765023f,
+ 0.0712796375f, 0.0410830304f, 0.0257535614f, 0.0175057724f,
+ 0.0120380968f, 0.0083473474f, 0.0045911148f, 0.0025495775f,
+ 0.0014236122f, 0.0007973649f, 0.0000000037f}}};
+
+const FLOAT32 ixheaacd_weight[16][8][31] = {
{
- {134217744, 134970352, 135553120, 136582896, 138392880, 141541712,
- 144424112, 148346336, 153572976, 160297488, 168439744, 174342928,
- 180128864, 185132320, 188577760, 189812528, 188577760, 185132320,
- 180128880, 174342928, 168439744, 160297488, 153572976, 148346336,
- 144424112, 141541712, 138392880, 136582896, 135553136, 134970352,
- 134217744},
- {134217728, 134923056, 135469392, 136435104, 138133568, 141091536,
- 143802496, 147496192, 152426160, 158780944, 166491504, 172091408,
- 177587152, 182344784, 185623536, 186799072, 185623552, 182344800,
- 177587152, 172091392, 166491520, 158780944, 152426160, 147496192,
- 143802480, 141091536, 138133568, 136435104, 135469392, 134923056,
- 134217744},
- {134217728, 134851104, 135341920, 136210016, 137738240, 140404048,
- 142851840, 146193664, 150665168, 156446176, 163483824, 168609296,
- 173650000, 178021440, 181037920, 182120160, 181037920, 178021424,
- 173650000, 168609296, 163483824, 156446176, 150665168, 146193680,
- 142851840, 140404048, 137738240, 136210000, 135341920, 134851104,
- 134217744},
- {134217728, 134670496, 135021776, 135643952, 136741952, 138665264,
- 140439920, 142875520, 146156352, 150432704, 155687056, 159544432,
- 163361216, 166688640, 168993616, 169822288, 168993632, 166688656,
- 163361216, 159544432, 155687056, 150432704, 146156352, 142875520,
- 140439920, 138665264, 136741952, 135643952, 135021776, 134670496,
- 134217744},
- {134217728, 134494912, 134710224, 135092080, 135767616, 136955856,
- 138057744, 139578304, 141641264, 144354416, 147723552, 150220400,
- 152709488, 154893744, 156414336, 156962448, 156414336, 154893744,
- 152709472, 150220400, 147723552, 144354416, 141641264, 139578320,
- 138057728, 136955856, 135767600, 135092080, 134710224, 134494912,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 133772440, 133424920, 132804936, 131696632, 129710520,
- 127825384, 125151792, 121381688, 116147984, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 116148000, 121381688, 125151792,
- 127825384, 129710520, 131696632, 132804936, 133424920, 133772456,
- 134217728},
- {134217728, 133468448, 132882456, 131834416, 129952248, 126550128,
- 123283864, 118583656, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 118583656,
- 123283864, 126550128, 129952248, 131834416, 132882456, 133468448,
- 134217728},
- },
+
+ {0.5000000596f, 0.5028037429f, 0.5049747229f, 0.5088109374f,
+ 0.5155536532f, 0.5272839665f, 0.5380217433f, 0.5526331663f,
+ 0.5721039176f, 0.5971546769f, 0.6274869442f, 0.6494780183f,
+ 0.6710323095f, 0.6896716356f, 0.7025068998f, 0.7071067691f,
+ 0.7025068998f, 0.6896716356f, 0.6710323691f, 0.6494780183f,
+ 0.6274869442f, 0.5971546769f, 0.5721039176f, 0.5526331663f,
+ 0.5380217433f, 0.5272839665f, 0.5155536532f, 0.5088109374f,
+ 0.5049747825f, 0.5028037429f, 0.5000000596f},
+ {0.5000000000f, 0.5026275516f, 0.5046628118f, 0.5082603693f,
+ 0.5145876408f, 0.5256069303f, 0.5357060432f, 0.5494661331f,
+ 0.5678316951f, 0.5915051103f, 0.6202291846f, 0.6410904527f,
+ 0.6615636945f, 0.6792872548f, 0.6915015578f, 0.6958807707f,
+ 0.6915016174f, 0.6792873144f, 0.6615636945f, 0.6410903931f,
+ 0.6202292442f, 0.5915051103f, 0.5678316951f, 0.5494661331f,
+ 0.5357059836f, 0.5256069303f, 0.5145876408f, 0.5082603693f,
+ 0.5046628118f, 0.5026275516f, 0.5000000596f},
+ {0.5000000000f, 0.5023595095f, 0.5041879416f, 0.5074218512f,
+ 0.5131149292f, 0.5230458379f, 0.5321645737f, 0.5446138382f,
+ 0.5612714887f, 0.5828074217f, 0.6090247035f, 0.6281185746f,
+ 0.6468966603f, 0.6631815434f, 0.6744188070f, 0.6784504652f,
+ 0.6744188070f, 0.6631814837f, 0.6468966603f, 0.6281185746f,
+ 0.6090247035f, 0.5828074217f, 0.5612714887f, 0.5446138978f,
+ 0.5321645737f, 0.5230458379f, 0.5131149292f, 0.5074217916f,
+ 0.5041879416f, 0.5023595095f, 0.5000000596f},
+ {0.5000000000f, 0.5016866922f, 0.5029953122f, 0.5053130984f,
+ 0.5094034672f, 0.5165683627f, 0.5231794715f, 0.5322527885f,
+ 0.5444748402f, 0.5604054928f, 0.5799794793f, 0.5943493247f,
+ 0.6085679531f, 0.6209635735f, 0.6295502782f, 0.6326373219f,
+ 0.6295503378f, 0.6209636331f, 0.6085679531f, 0.5943493247f,
+ 0.5799794793f, 0.5604054928f, 0.5444748402f, 0.5322527885f,
+ 0.5231794715f, 0.5165683627f, 0.5094034672f, 0.5053130984f,
+ 0.5029953122f, 0.5016866922f, 0.5000000596f},
+ {0.5000000000f, 0.5010325909f, 0.5018346906f, 0.5032572150f,
+ 0.5057737827f, 0.5102003217f, 0.5143051744f, 0.5199697018f,
+ 0.5276548266f, 0.5377621055f, 0.5503131151f, 0.5596145988f,
+ 0.5688871741f, 0.5770241618f, 0.5826888084f, 0.5847306848f,
+ 0.5826888084f, 0.5770241618f, 0.5688871145f, 0.5596145988f,
+ 0.5503131151f, 0.5377621055f, 0.5276548266f, 0.5199697614f,
+ 0.5143051147f, 0.5102003217f, 0.5057737231f, 0.5032572150f,
+ 0.5018346906f, 0.5010325909f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.4983411729f, 0.4970465600f, 0.4947369397f,
+ 0.4906081855f, 0.4832093418f, 0.4761866629f, 0.4662267566f,
+ 0.4521820247f, 0.4326849580f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4326850176f, 0.4521820247f, 0.4662267566f,
+ 0.4761866629f, 0.4832093418f, 0.4906081855f, 0.4947369397f,
+ 0.4970465600f, 0.4983412325f, 0.5000000000f},
+ {0.5000000000f, 0.4972087145f, 0.4950257242f, 0.4911214709f,
+ 0.4841098487f, 0.4714359641f, 0.4592681825f, 0.4417585433f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4417585433f,
+ 0.4592681825f, 0.4714359641f, 0.4841098487f, 0.4911214709f,
+ 0.4950257242f, 0.4972087145f, 0.5000000000f}},
{
- {134217728, 134913216, 135451936, 136404304, 138079504, 140997600,
- 143672688, 147318512, 152186224, 158463280, 166082896, 171618768,
- 177053216, 181758880, 185002352, 186165328, 185002352, 181758880,
- 177053216, 171618768, 166082896, 158463296, 152186224, 147318512,
- 143672688, 140997600, 138079504, 136404304, 135451936, 134913216,
- 134217744},
- {134217728, 134869504, 135374512, 136267584, 137839408, 140580112,
- 143095472, 146527744, 151117280, 157046336, 164257936, 169506256,
- 174664912, 179136560, 182221168, 183327616, 182221168, 179136560,
- 174664912, 169506256, 164257936, 157046336, 151117280, 146527744,
- 143095472, 140580112, 137839408, 136267584, 135374512, 134869504,
- 134217744},
- {134217728, 134802992, 135256672, 136059376, 137473424, 139942768,
- 142213056, 145316768, 149476832, 154866368, 161442736, 166241760,
- 170968496, 175072880, 177907744, 178925312, 177907744, 175072880,
- 170968496, 166241760, 161442736, 154866368, 149476832, 145316768,
- 142213056, 139942768, 137473424, 136059376, 135256672, 134802992,
- 134217744},
- {134217728, 134636080, 134960736, 135535920, 136551440, 138331744,
- 139976000, 142235024, 145282080, 149260352, 154157968, 157759584,
- 161328032, 164442560, 166601920, 167378576, 166601920, 164442544,
- 161328032, 157759584, 154157968, 149260368, 145282080, 142235024,
- 139976016, 138331728, 136551456, 135535920, 134960736, 134636096,
- 134217744},
- {134217728, 134473824, 134672800, 135025728, 135650240, 136749360,
- 137769200, 139177520, 141089920, 143607984, 146739200, 149062688,
- 151381312, 153417872, 154836624, 155348256, 154836640, 153417872,
- 151381328, 149062688, 146739200, 143607984, 141089920, 139177520,
- 137769200, 136749360, 135650256, 135025712, 134672784, 134473824,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 133806400, 133485440, 132913000, 131890240, 130059096,
- 128323168, 125864856, 122406120, 117621128, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 117621128, 122406120, 125864856,
- 128323168, 130059096, 131890240, 132913000, 133485440, 133806400,
- 134217728},
- {134217728, 133525632, 132984568, 132017344, 130281848, 127150040,
- 124150024, 119845456, 113664464, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 113664464, 119845456,
- 124150032, 127150040, 130281848, 132017344, 132984568, 133525632,
- 134217728},
- },
+
+ {0.5000000000f, 0.5025908947f, 0.5045977831f, 0.5081456304f,
+ 0.5143862367f, 0.5252569914f, 0.5352224708f, 0.5488042235f,
+ 0.5669378638f, 0.5903217196f, 0.6187070012f, 0.6393297315f,
+ 0.6595746279f, 0.6771045923f, 0.6891874671f, 0.6935198903f,
+ 0.6891874671f, 0.6771045923f, 0.6595746279f, 0.6393297315f,
+ 0.6187070012f, 0.5903217793f, 0.5669378638f, 0.5488042235f,
+ 0.5352224708f, 0.5252569914f, 0.5143862367f, 0.5081456304f,
+ 0.5045977831f, 0.5025908947f, 0.5000000596f},
+ {0.5000000000f, 0.5024280548f, 0.5043093562f, 0.5076363087f,
+ 0.5134918094f, 0.5237017274f, 0.5330721736f, 0.5458583832f,
+ 0.5629557371f, 0.5850431919f, 0.6119084954f, 0.6314600110f,
+ 0.6506775022f, 0.6673356891f, 0.6788267493f, 0.6829485893f,
+ 0.6788267493f, 0.6673356891f, 0.6506775022f, 0.6314600110f,
+ 0.6119084954f, 0.5850431919f, 0.5629557371f, 0.5458583832f,
+ 0.5330721736f, 0.5237017274f, 0.5134918094f, 0.5076363087f,
+ 0.5043093562f, 0.5024280548f, 0.5000000596f},
+ {0.5000000000f, 0.5021802783f, 0.5038703680f, 0.5068606734f,
+ 0.5121284127f, 0.5213274360f, 0.5297849178f, 0.5413471460f,
+ 0.5568445921f, 0.5769221783f, 0.6014210582f, 0.6192988157f,
+ 0.6369072795f, 0.6521973014f, 0.6627579927f, 0.6665487289f,
+ 0.6627579927f, 0.6521973014f, 0.6369072795f, 0.6192988157f,
+ 0.6014210582f, 0.5769221783f, 0.5568445921f, 0.5413471460f,
+ 0.5297849178f, 0.5213274360f, 0.5121284127f, 0.5068606734f,
+ 0.5038703680f, 0.5021802783f, 0.5000000596f},
+ {0.5000000000f, 0.5015584826f, 0.5027679205f, 0.5049106479f,
+ 0.5086937547f, 0.5153259039f, 0.5214512348f, 0.5298667550f,
+ 0.5412179232f, 0.5560381413f, 0.5742831826f, 0.5877002478f,
+ 0.6009937525f, 0.6125962734f, 0.6206405163f, 0.6235337853f,
+ 0.6206405163f, 0.6125962138f, 0.6009937525f, 0.5877002478f,
+ 0.5742831826f, 0.5560382009f, 0.5412179232f, 0.5298667550f,
+ 0.5214512944f, 0.5153258443f, 0.5086938143f, 0.5049106479f,
+ 0.5027679205f, 0.5015585423f, 0.5000000596f},
+ {0.5000000000f, 0.5009540319f, 0.5016952753f, 0.5030100346f,
+ 0.5053365231f, 0.5094310641f, 0.5132302642f, 0.5184766650f,
+ 0.5256009102f, 0.5349814296f, 0.5466461182f, 0.5553017855f,
+ 0.5639393330f, 0.5715261102f, 0.5768113732f, 0.5787173510f,
+ 0.5768114328f, 0.5715261102f, 0.5639393926f, 0.5553017855f,
+ 0.5466461182f, 0.5349814296f, 0.5256009102f, 0.5184766650f,
+ 0.5132302642f, 0.5094310641f, 0.5053365827f, 0.5030099750f,
+ 0.5016952157f, 0.5009540319f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.4984676838f, 0.4972720146f, 0.4951395094f,
+ 0.4913294315f, 0.4845078886f, 0.4780410528f, 0.4688831270f,
+ 0.4559983313f, 0.4381728470f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4381728470f, 0.4559983313f, 0.4688831270f,
+ 0.4780410528f, 0.4845078886f, 0.4913294315f, 0.4951395094f,
+ 0.4972720146f, 0.4984676838f, 0.5000000000f},
+ {0.5000000000f, 0.4974217415f, 0.4954061210f, 0.4918029308f,
+ 0.4853377044f, 0.4736708105f, 0.4624948800f, 0.4464591146f,
+ 0.4234331250f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4234331250f, 0.4464591146f,
+ 0.4624949098f, 0.4736708105f, 0.4853377044f, 0.4918029308f,
+ 0.4954061210f, 0.4974217415f, 0.5000000000f}},
{
- {134217728, 134750352, 135163360, 135894416, 137183168, 139436416,
- 141510976, 144351440, 148166016, 153119584, 159180064, 163612736,
- 167986224, 171789568, 174419392, 175363920, 174419392, 171789568,
- 167986224, 163612736, 159180064, 153119584, 148166016, 144351440,
- 141510976, 139436432, 137183168, 135894416, 135163360, 134750352,
- 134217744},
- {134217728, 134716864, 135103984, 135789392, 136998240, 139113424,
- 141062640, 143734096, 147326256, 151998160, 157724080, 161918432,
- 166061616, 169668304, 172163984, 173060688, 172163984, 169668288,
- 166061616, 161918432, 157724080, 151998160, 147326256, 143734096,
- 141062640, 139113424, 136998240, 135789392, 135103984, 134716864,
- 134217744},
- {134217728, 134665904, 135013632, 135629504, 136716496, 138620704,
- 140377984, 142790048, 146039760, 150276480, 155483472, 159306944,
- 163090832, 166390096, 168675808, 169497600, 168675808, 166390096,
- 163090848, 159306944, 155483488, 150276480, 146039760, 142790048,
- 140377968, 138620720, 136716496, 135629504, 135013616, 134665904,
- 134217744},
- {134217728, 134538048, 134786784, 135227776, 136007472, 137377520,
- 138646400, 140395008, 142763040, 145870208, 149717968, 152562416,
- 155392320, 157871248, 159594640, 160215424, 159594640, 157871248,
- 155392320, 152562416, 149717968, 145870208, 142763040, 140395008,
- 138646400, 137377520, 136007472, 135227776, 134786784, 134538048,
- 134217728},
- {134217728, 134413792, 134566144, 134836576, 135315504, 136159584,
- 136944176, 138029792, 139507872, 141460704, 143899120, 145715424,
- 147533584, 149135008, 150253024, 150656672, 150253040, 149135008,
- 147533584, 145715424, 143899120, 141460688, 139507872, 138029792,
- 136944176, 136159584, 135315504, 134836576, 134566160, 134413792,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 133903024, 133657608, 133220288, 132440008, 131046696,
- 129730264, 127873712, 125277552, 121718592, 117049664, 113392512,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 113392512, 117049680, 121718592, 125277552, 127873712,
- 129730280, 131046696, 132440024, 133220288, 133657624, 133903024,
- 134217728},
- {134217728, 133688336, 133274944, 132536912, 131215936, 128843168,
- 126584160, 123368104, 118806640, 112416656, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 112416656, 118806632, 123368104,
- 126584160, 128843168, 131215936, 132536912, 133274944, 133688336,
- 134217728},
- },
+
+ {0.5000000000f, 0.5019841790f, 0.5035227537f, 0.5062461495f,
+ 0.5110471249f, 0.5194411278f, 0.5271694660f, 0.5377510190f,
+ 0.5519614220f, 0.5704149008f, 0.5929919481f, 0.6095049381f,
+ 0.6257974505f, 0.6399660110f, 0.6497628689f, 0.6532815099f,
+ 0.6497628689f, 0.6399660110f, 0.6257974505f, 0.6095049381f,
+ 0.5929919481f, 0.5704149008f, 0.5519614220f, 0.5377510190f,
+ 0.5271694660f, 0.5194411874f, 0.5110471249f, 0.5062461495f,
+ 0.5035227537f, 0.5019841790f, 0.5000000596f},
+ {0.5000000000f, 0.5018594265f, 0.5033015609f, 0.5058549047f,
+ 0.5103582144f, 0.5182378888f, 0.5254992843f, 0.5354512334f,
+ 0.5488330722f, 0.5662372708f, 0.5875679851f, 0.6031931639f,
+ 0.6186277270f, 0.6320636868f, 0.6413608193f, 0.6447013021f,
+ 0.6413608193f, 0.6320636272f, 0.6186277270f, 0.6031931639f,
+ 0.5875679851f, 0.5662372708f, 0.5488330722f, 0.5354512334f,
+ 0.5254992843f, 0.5182378888f, 0.5103582144f, 0.5058549047f,
+ 0.5033015609f, 0.5018594265f, 0.5000000596f},
+ {0.5000000000f, 0.5016695857f, 0.5029649734f, 0.5052592754f,
+ 0.5093086362f, 0.5164023638f, 0.5229487419f, 0.5319343805f,
+ 0.5440405011f, 0.5598235130f, 0.5792210698f, 0.5934646130f,
+ 0.6075606942f, 0.6198514104f, 0.6283663511f, 0.6314277649f,
+ 0.6283663511f, 0.6198514104f, 0.6075607538f, 0.5934646130f,
+ 0.5792211294f, 0.5598235130f, 0.5440405011f, 0.5319343805f,
+ 0.5229486823f, 0.5164024234f, 0.5093086362f, 0.5052592754f,
+ 0.5029649138f, 0.5016695857f, 0.5000000596f},
+ {0.5000000000f, 0.5011932850f, 0.5021198988f, 0.5037627220f,
+ 0.5066673160f, 0.5117711425f, 0.5164980888f, 0.5230121613f,
+ 0.5318337679f, 0.5434088707f, 0.5577428937f, 0.5683392882f,
+ 0.5788815022f, 0.5881162286f, 0.5945363641f, 0.5968489647f,
+ 0.5945363641f, 0.5881162286f, 0.5788815022f, 0.5683392882f,
+ 0.5577428937f, 0.5434088707f, 0.5318337679f, 0.5230121613f,
+ 0.5164980888f, 0.5117711425f, 0.5066673160f, 0.5037627220f,
+ 0.5021198988f, 0.5011932850f, 0.5000000000f},
+ {0.5000000000f, 0.5007303953f, 0.5012979507f, 0.5023053885f,
+ 0.5040895343f, 0.5072339773f, 0.5101568103f, 0.5142010450f,
+ 0.5197073221f, 0.5269821882f, 0.5360659957f, 0.5428322554f,
+ 0.5496054292f, 0.5555711985f, 0.5597361326f, 0.5612398386f,
+ 0.5597361922f, 0.5555711985f, 0.5496054292f, 0.5428322554f,
+ 0.5360659957f, 0.5269821286f, 0.5197073221f, 0.5142010450f,
+ 0.5101568103f, 0.5072339773f, 0.5040895343f, 0.5023053885f,
+ 0.5012980103f, 0.5007303953f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.4988276362f, 0.4979133904f, 0.4962842464f,
+ 0.4933774769f, 0.4881869853f, 0.4832828939f, 0.4763666987f,
+ 0.4666952491f, 0.4534370899f, 0.4360439777f, 0.4224200249f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4224200249f,
+ 0.4360440373f, 0.4534370899f, 0.4666952491f, 0.4763666987f,
+ 0.4832829535f, 0.4881869853f, 0.4933775365f, 0.4962842464f,
+ 0.4979134500f, 0.4988276362f, 0.5000000000f},
+ {0.5000000000f, 0.4980278611f, 0.4964878559f, 0.4937384725f,
+ 0.4888174534f, 0.4799782038f, 0.4715627432f, 0.4595820010f,
+ 0.4425892234f, 0.4187846780f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4187846780f, 0.4425891936f, 0.4595820010f,
+ 0.4715627432f, 0.4799782038f, 0.4888174534f, 0.4937384725f,
+ 0.4964878559f, 0.4980278611f, 0.5000000000f}},
{
- {134217728, 134506240, 134730320, 135127728, 135830656, 137066736,
- 138212592, 139793296, 141936768, 144754096, 148250000, 150839072,
- 153418688, 155681312, 157255888, 157823344, 157255888, 155681312,
- 153418688, 150839072, 148249984, 144754096, 141936768, 139793296,
- 138212592, 137066736, 135830656, 135127728, 134730320, 134506240,
- 134217728},
- {134217728, 134488080, 134698096, 135070576, 135729600, 136888992,
- 137964320, 139448608, 141462896, 144113040, 147405392, 149846352,
- 152280496, 154417184, 155904992, 156441360, 155904992, 154417184,
- 152280496, 149846352, 147405392, 144113040, 141462896, 139448592,
- 137964336, 136888992, 135729600, 135070576, 134698096, 134488080,
- 134217728},
- {134217728, 134460464, 134649040, 134983616, 135575776, 136618224,
- 137585872, 138922720, 140739104, 143132528, 146111440, 148323744,
- 150532864, 152474416, 153827600, 154315696, 153827600, 152474432,
- 150532880, 148323744, 146111440, 143132528, 140739104, 138922720,
- 137585872, 136618224, 135575760, 134983616, 134649040, 134460464,
- 134217728},
- {134217728, 134391168, 134526000, 134765312, 135189280, 135936912,
- 136632336, 137595280, 138907696, 140643920, 142815424, 144435360,
- 146058944, 147490640, 148491024, 148852368, 148491024, 147490640,
- 146058944, 144435360, 142815424, 140643920, 138907696, 137595280,
- 136632320, 135936912, 135189264, 134765312, 134526000, 134391168,
- 134217728},
- {134217728, 134323872, 134406416, 134552992, 134812944, 135272112,
- 135700080, 136294032, 137106080, 138184736, 139540672, 140557056,
- 141579776, 142484928, 143119200, 143348672, 143119200, 142484928,
- 141579776, 140557056, 139540672, 138184736, 137106080, 136294032,
- 135700080, 135272112, 134812944, 134552992, 134406416, 134323872,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 134047496, 133914896, 133678832, 133258584, 132511008,
- 131808096, 130822576, 129456008, 127605336, 125219016, 123384368,
- 121496560, 119789320, 118571736, 118126816, 118571736, 119789320,
- 121496560, 123384368, 125219016, 127605336, 129456008, 130822576,
- 131808096, 132511008, 133258584, 133678848, 133914896, 134047496,
- 134217728},
- {134217728, 133931488, 133708328, 133310696, 132601600, 131336352,
- 130142072, 128459768, 126111336, 122900144, 118702864, 115428560,
- 112012208, 111848104, 111848104, 111848104, 111848104, 111848104,
- 112012208, 115428560, 118702864, 122900128, 126111336, 128459768,
- 130142072, 131336352, 132601616, 133310696, 133708328, 133931488,
- 134217728},
- },
+
+ {0.5000000000f, 0.5010747910f, 0.5019095540f, 0.5033900142f,
+ 0.5060086250f, 0.5106133819f, 0.5148820281f, 0.5207706094f,
+ 0.5287556648f, 0.5392510295f, 0.5522742867f, 0.5619193316f,
+ 0.5715291500f, 0.5799580812f, 0.5858238339f, 0.5879377723f,
+ 0.5858238339f, 0.5799580812f, 0.5715291500f, 0.5619193316f,
+ 0.5522742271f, 0.5392510295f, 0.5287556648f, 0.5207706094f,
+ 0.5148820281f, 0.5106133819f, 0.5060086250f, 0.5033900142f,
+ 0.5019095540f, 0.5010747910f, 0.5000000000f},
+ {0.5000000000f, 0.5010071397f, 0.5017895103f, 0.5031771064f,
+ 0.5056321621f, 0.5099512339f, 0.5139571428f, 0.5194865465f,
+ 0.5269903541f, 0.5368629098f, 0.5491278768f, 0.5582211614f,
+ 0.5672890544f, 0.5752488375f, 0.5807913542f, 0.5827894807f,
+ 0.5807913542f, 0.5752488375f, 0.5672890544f, 0.5582211614f,
+ 0.5491278768f, 0.5368629098f, 0.5269903541f, 0.5194864869f,
+ 0.5139572024f, 0.5099512339f, 0.5056321621f, 0.5031771064f,
+ 0.5017895103f, 0.5010071397f, 0.5000000000f},
+ {0.5000000000f, 0.5009042621f, 0.5016067624f, 0.5028531551f,
+ 0.5050591230f, 0.5089425445f, 0.5125473142f, 0.5175274611f,
+ 0.5242940187f, 0.5332102180f, 0.5443075299f, 0.5525490046f,
+ 0.5607786179f, 0.5680114627f, 0.5730524659f, 0.5748707652f,
+ 0.5730524659f, 0.5680115223f, 0.5607786775f, 0.5525490046f,
+ 0.5443075299f, 0.5332102180f, 0.5242940187f, 0.5175274611f,
+ 0.5125473142f, 0.5089425445f, 0.5050590634f, 0.5028531551f,
+ 0.5016067624f, 0.5009042621f, 0.5000000000f},
+ {0.5000000000f, 0.5006461143f, 0.5011484027f, 0.5020399094f,
+ 0.5036193132f, 0.5064044595f, 0.5089951158f, 0.5125823617f,
+ 0.5174714923f, 0.5239394307f, 0.5320289135f, 0.5380636454f,
+ 0.5441119671f, 0.5494454503f, 0.5531721711f, 0.5545182824f,
+ 0.5531721711f, 0.5494454503f, 0.5441119671f, 0.5380636454f,
+ 0.5320289135f, 0.5239394307f, 0.5174714923f, 0.5125823617f,
+ 0.5089950562f, 0.5064044595f, 0.5036192536f, 0.5020399094f,
+ 0.5011484027f, 0.5006461143f, 0.5000000000f},
+ {0.5000000000f, 0.5003954172f, 0.5007029176f, 0.5012489557f,
+ 0.5022173524f, 0.5039278865f, 0.5055221915f, 0.5077348351f,
+ 0.5107599497f, 0.5147782564f, 0.5198295116f, 0.5236158371f,
+ 0.5274257660f, 0.5307977200f, 0.5331605673f, 0.5340154171f,
+ 0.5331605673f, 0.5307977200f, 0.5274257660f, 0.5236158371f,
+ 0.5198295116f, 0.5147782564f, 0.5107599497f, 0.5077348351f,
+ 0.5055221915f, 0.5039278865f, 0.5022173524f, 0.5012489557f,
+ 0.5007029176f, 0.5003954172f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.4993658364f, 0.4988718629f, 0.4979924560f,
+ 0.4964269102f, 0.4936419725f, 0.4910234213f, 0.4873520732f,
+ 0.4822612107f, 0.4753669202f, 0.4664771855f, 0.4596425891f,
+ 0.4526099563f, 0.4462499917f, 0.4417141378f, 0.4400566816f,
+ 0.4417141378f, 0.4462499917f, 0.4526099563f, 0.4596425891f,
+ 0.4664771855f, 0.4753669202f, 0.4822612107f, 0.4873520732f,
+ 0.4910234213f, 0.4936419725f, 0.4964269102f, 0.4979925156f,
+ 0.4988718629f, 0.4993658364f, 0.5000000000f},
+ {0.5000000000f, 0.4989336729f, 0.4981023371f, 0.4966210425f,
+ 0.4939794540f, 0.4892660379f, 0.4848169982f, 0.4785499275f,
+ 0.4698013365f, 0.4578387141f, 0.4422026277f, 0.4300048947f,
+ 0.4172779918f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4172779918f, 0.4300048947f,
+ 0.4422026277f, 0.4578386545f, 0.4698013365f, 0.4785499275f,
+ 0.4848169982f, 0.4892660379f, 0.4939795136f, 0.4966210425f,
+ 0.4981023371f, 0.4989336729f, 0.5000000000f}},
{
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217744, 134217728, 134217728, 134217744,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- },
+
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000596f, 0.5000000000f,
+ 0.5000000000f, 0.5000000596f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f}},
{
- {134217728, 133928592, 133703168, 133301512, 132585192, 131306928,
- 130100248, 128400288, 126026792, 122780504, 118535808, 115223152,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 115223152, 118535792, 122780504, 126026792, 128400288,
- 130100248, 131306928, 132585192, 133301512, 133703168, 133928592,
- 134217728},
- {134217728, 133946816, 133735640, 133359432, 132688632, 131492208,
- 130363488, 128774544, 126558464, 123532296, 119584472, 116511248,
- 113311296, 111848104, 111848104, 111848104, 111848104, 111848104,
- 113311288, 116511248, 119584472, 123532296, 126558464, 128774544,
- 130363488, 131492208, 132688632, 133359432, 133735640, 133946816,
- 134217728},
- {134217728, 133974552, 133785016, 133447456, 132845800, 131773512,
- 130762848, 129341696, 127362872, 124667064, 121162064, 118443520,
- 115622880, 113050208, 111848104, 111848104, 111848104, 113050208,
- 115622880, 118443520, 121162064, 124667064, 127362856, 129341696,
- 130762848, 131773512, 132845800, 133447456, 133785016, 133974552,
- 134217728},
- {134217728, 134044048, 133908760, 133667912, 133239096, 132476240,
- 131758880, 130752952, 129357832, 127467976, 125030208, 123155288,
- 121225344, 119479336, 118233720, 117778472, 118233720, 119479336,
- 121225328, 123155288, 125030224, 127467976, 129357832, 130752960,
- 131758880, 132476240, 133239096, 133667912, 133908760, 134044048,
- 134217728},
- {134217728, 134111512, 134028776, 133881624, 133619856, 133154992,
- 132718832, 132108784, 131265840, 130129840, 128674776, 127563760,
- 126427688, 125406704, 124682360, 124418480, 124682360, 125406704,
- 126427688, 127563760, 128674776, 130129840, 131265840, 132108784,
- 132718832, 133154992, 133619856, 133881608, 134028776, 134111512,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 134387728, 134519888, 134754464, 135170064, 135903024,
- 136584848, 137529104, 138816208, 140519296, 142649904, 144239712,
- 145833392, 147238976, 148221248, 148576080, 148221248, 147238976,
- 145833392, 144239712, 142649904, 140519312, 138816208, 137529088,
- 136584848, 135903024, 135170064, 134754464, 134519888, 134387728,
- 134217728},
- {134217728, 134503360, 134725216, 135118656, 135814608, 137038528,
- 138173216, 139738624, 141861648, 144652528, 148116256, 150681920,
- 153238576, 155481344, 157042224, 157604800, 157042224, 155481344,
- 153238576, 150681920, 148116256, 144652528, 141861648, 139738624,
- 138173216, 137038528, 135814608, 135118656, 134725200, 134503360,
- 134217728},
- },
+
+ {0.5000000000f, 0.4989228845f, 0.4980831146f, 0.4965868294f,
+ 0.4939183295f, 0.4891564250f, 0.4846611917f, 0.4783283472f,
+ 0.4694863856f, 0.4573930204f, 0.4415802956f, 0.4292396903f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4292396903f,
+ 0.4415802360f, 0.4573930204f, 0.4694863856f, 0.4783283472f,
+ 0.4846611917f, 0.4891564250f, 0.4939183295f, 0.4965868294f,
+ 0.4980831146f, 0.4989228845f, 0.5000000000f},
+ {0.5000000000f, 0.4989907742f, 0.4982040823f, 0.4968025982f,
+ 0.4943036735f, 0.4898466468f, 0.4856418371f, 0.4797225595f,
+ 0.4714670181f, 0.4601936638f, 0.4454868734f, 0.4340382218f,
+ 0.4221174717f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4221174419f, 0.4340382218f,
+ 0.4454868734f, 0.4601936638f, 0.4714670181f, 0.4797225595f,
+ 0.4856418371f, 0.4898466468f, 0.4943036735f, 0.4968025982f,
+ 0.4982040823f, 0.4989907742f, 0.5000000000f},
+ {0.5000000000f, 0.4990940988f, 0.4983880222f, 0.4971305132f,
+ 0.4948891699f, 0.4908945858f, 0.4871295691f, 0.4818353653f,
+ 0.4744636714f, 0.4644210041f, 0.4513638616f, 0.4412364960f,
+ 0.4307287931f, 0.4211448431f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4211448431f, 0.4307287931f, 0.4412364960f,
+ 0.4513638616f, 0.4644210041f, 0.4744636118f, 0.4818353653f,
+ 0.4871295691f, 0.4908945858f, 0.4948891699f, 0.4971305132f,
+ 0.4983880222f, 0.4990940988f, 0.5000000000f},
+ {0.5000000000f, 0.4993529916f, 0.4988490045f, 0.4979517758f,
+ 0.4963543117f, 0.4935124516f, 0.4908400774f, 0.4870927036f,
+ 0.4818954766f, 0.4748552144f, 0.4657738209f, 0.4587891996f,
+ 0.4515995979f, 0.4450952113f, 0.4404549301f, 0.4387589991f,
+ 0.4404549301f, 0.4450952113f, 0.4515995383f, 0.4587891996f,
+ 0.4657738805f, 0.4748552144f, 0.4818954766f, 0.4870927334f,
+ 0.4908400774f, 0.4935124516f, 0.4963543117f, 0.4979517758f,
+ 0.4988490045f, 0.4993529916f, 0.5000000000f},
+ {0.5000000000f, 0.4996043146f, 0.4992960989f, 0.4987479150f,
+ 0.4977727532f, 0.4960409999f, 0.4944161773f, 0.4921435714f,
+ 0.4890033603f, 0.4847714305f, 0.4793508947f, 0.4752120376f,
+ 0.4709798396f, 0.4671763778f, 0.4644779861f, 0.4634949565f,
+ 0.4644779861f, 0.4671763778f, 0.4709798396f, 0.4752120376f,
+ 0.4793508947f, 0.4847714305f, 0.4890033603f, 0.4921435714f,
+ 0.4944161773f, 0.4960409999f, 0.4977727532f, 0.4987478554f,
+ 0.4992960989f, 0.4996043146f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.5006332994f, 0.5011256337f, 0.5019994974f,
+ 0.5035477281f, 0.5062782168f, 0.5088182092f, 0.5123358369f,
+ 0.5171306729f, 0.5234751701f, 0.5314123034f, 0.5373347998f,
+ 0.5432717204f, 0.5485079288f, 0.5521671772f, 0.5534890294f,
+ 0.5521671772f, 0.5485079288f, 0.5432717204f, 0.5373347998f,
+ 0.5314123034f, 0.5234752297f, 0.5171306729f, 0.5123357773f,
+ 0.5088182092f, 0.5062782168f, 0.5035477281f, 0.5019994974f,
+ 0.5011256337f, 0.5006332994f, 0.5000000000f},
+ {0.5000000000f, 0.5010640621f, 0.5018905401f, 0.5033562183f,
+ 0.5059488416f, 0.5105082989f, 0.5147353411f, 0.5205669403f,
+ 0.5284758210f, 0.5388726592f, 0.5517760515f, 0.5613338947f,
+ 0.5708581805f, 0.5792131424f, 0.5850278735f, 0.5871236324f,
+ 0.5850278735f, 0.5792131424f, 0.5708581805f, 0.5613338947f,
+ 0.5517760515f, 0.5388726592f, 0.5284758210f, 0.5205669403f,
+ 0.5147353411f, 0.5105082989f, 0.5059488416f, 0.5033562183f,
+ 0.5018904805f, 0.5010640621f, 0.5000000000f}},
{
- {134217728, 133682984, 133265384, 132519816, 131185264, 128787744,
- 126504696, 123253640, 118640752, 112174832, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 112174832, 118640752, 123253640,
- 126504696, 128787744, 131185264, 132519816, 133265384, 133682984,
- 134217728},
- {134217728, 133716728, 133325584, 132627440, 131378384, 129136568,
- 127004448, 123973008, 119681960, 113689744, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 113689744, 119681960, 123973008,
- 127004448, 129136568, 131378376, 132627440, 133325584, 133716744,
- 134217728},
- {134217728, 133768056, 133417096, 132790928, 131671560, 129665320,
- 127760792, 125059176, 121248440, 115955928, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 115955928, 121248440, 125059176,
- 127760792, 129665320, 131671560, 132790928, 133417096, 133768056,
- 134217728},
- {134217728, 133896640, 133646248, 133200016, 132403792, 130981736,
- 129637848, 127742080, 125090024, 121452368, 116676152, 112931424,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 112931424, 116676152, 121452368, 125090024, 127742080,
- 129637848, 130981736, 132403792, 133200016, 133646248, 133896640,
- 134217728},
- {134217728, 134021376, 133868400, 133596016, 133110896, 132247376,
- 131434736, 130294184, 128710328, 126560936, 123781432, 121638024,
- 119426296, 117420384, 115986304, 115461520, 115986304, 117420384,
- 119426296, 121638024, 123781432, 126560936, 128710328, 130294184,
- 131434736, 132247360, 133110896, 133596016, 133868400, 134021376,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 134531696, 134775520, 135207824, 135972192, 137315552,
- 138559920, 140275120, 142598512, 145648128, 149426144, 152220016,
- 155000416, 157436608, 159130592, 159740864, 159130592, 157436608,
- 155000416, 152220016, 149426144, 145648128, 142598512, 140275120,
- 138559920, 137315536, 135972192, 135207824, 134775504, 134531696,
- 134217728},
- {134217728, 134745024, 135153936, 135877760, 137153824, 139385200,
- 141439904, 144253616, 148033040, 152942128, 158949856, 163344976,
- 167682224, 171454608, 174063344, 175000352, 174063344, 171454608,
- 167682208, 163344976, 158949856, 152942128, 148033040, 144253632,
- 141439904, 139385200, 137153824, 135877760, 135153936, 134745040,
- 134217744},
- },
+
+ {0.5000000000f, 0.4980079234f, 0.4964522421f, 0.4936747849f,
+ 0.4887031913f, 0.4797717333f, 0.4712667167f, 0.4591555893f,
+ 0.4419712424f, 0.4178838134f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4178838134f, 0.4419712424f, 0.4591555893f,
+ 0.4712667167f, 0.4797717333f, 0.4887031913f, 0.4936747849f,
+ 0.4964522421f, 0.4980079234f, 0.5000000000f},
+ {0.5000000000f, 0.4981336296f, 0.4966765046f, 0.4940757155f,
+ 0.4894226193f, 0.4810712039f, 0.4731284380f, 0.4618354440f,
+ 0.4458500445f, 0.4235273004f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4235273004f, 0.4458500445f, 0.4618354440f,
+ 0.4731284380f, 0.4810712039f, 0.4894225895f, 0.4940757155f,
+ 0.4966765046f, 0.4981336892f, 0.5000000000f},
+ {0.5000000000f, 0.4983248413f, 0.4970174134f, 0.4946847558f,
+ 0.4905147851f, 0.4830409586f, 0.4759460390f, 0.4658817351f,
+ 0.4516856372f, 0.4319694936f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4319694936f, 0.4516856372f, 0.4658817351f,
+ 0.4759460390f, 0.4830409586f, 0.4905147851f, 0.4946847558f,
+ 0.4970174134f, 0.4983248413f, 0.5000000000f},
+ {0.5000000000f, 0.4988038540f, 0.4978710711f, 0.4962087274f,
+ 0.4932425618f, 0.4879449904f, 0.4829386175f, 0.4758763313f,
+ 0.4659966528f, 0.4524453282f, 0.4346525371f, 0.4207023382f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4207023382f,
+ 0.4346525371f, 0.4524453282f, 0.4659966528f, 0.4758763313f,
+ 0.4829386175f, 0.4879449904f, 0.4932425618f, 0.4962087274f,
+ 0.4978710711f, 0.4988038540f, 0.5000000000f},
+ {0.5000000000f, 0.4992685318f, 0.4986986518f, 0.4976839423f,
+ 0.4958767295f, 0.4926598668f, 0.4896325469f, 0.4853836596f,
+ 0.4794833362f, 0.4714762270f, 0.4611217678f, 0.4531369507f,
+ 0.4448976219f, 0.4374250174f, 0.4320826530f, 0.4301276803f,
+ 0.4320826530f, 0.4374250174f, 0.4448976219f, 0.4531369507f,
+ 0.4611217678f, 0.4714762270f, 0.4794833362f, 0.4853836596f,
+ 0.4896325469f, 0.4926598072f, 0.4958767295f, 0.4976839423f,
+ 0.4986986518f, 0.4992685318f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.5011696219f, 0.5020779371f, 0.5036883950f,
+ 0.5065358877f, 0.5115402937f, 0.5161759257f, 0.5225655437f,
+ 0.5312208533f, 0.5425815582f, 0.5566557646f, 0.5670637488f,
+ 0.5774215460f, 0.5864970684f, 0.5928076506f, 0.5950810909f,
+ 0.5928076506f, 0.5864970684f, 0.5774215460f, 0.5670637488f,
+ 0.5566557646f, 0.5425815582f, 0.5312208533f, 0.5225655437f,
+ 0.5161759257f, 0.5115402341f, 0.5065358877f, 0.5036883950f,
+ 0.5020778775f, 0.5011696219f, 0.5000000000f},
+ {0.5000000000f, 0.5019643307f, 0.5034876466f, 0.5061841011f,
+ 0.5109378099f, 0.5192503333f, 0.5269047022f, 0.5373865962f,
+ 0.5514660478f, 0.5697538257f, 0.5921343565f, 0.6085074544f,
+ 0.6246649623f, 0.6387181878f, 0.6484364867f, 0.6519271135f,
+ 0.6484364867f, 0.6387181878f, 0.6246649027f, 0.6085074544f,
+ 0.5921343565f, 0.5697538257f, 0.5514660478f, 0.5373866558f,
+ 0.5269047022f, 0.5192503333f, 0.5109378099f, 0.5061841011f,
+ 0.5034876466f, 0.5019643903f, 0.5000000596f}},
{
- {134217728, 133518624, 132972056, 131994936, 130241488, 127076656,
- 124044168, 119691480, 113437856, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 113437856, 119691480,
- 124044168, 127076656, 130241488, 131994936, 132972056, 133518624,
- 134217728},
- {134217728, 133562760, 133050888, 132136072, 130495576, 127538336,
- 124709592, 120658264, 114858008, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 114858008, 120658264,
- 124709592, 127538336, 130495560, 132136072, 133050888, 133562760,
- 134217728},
- {134217728, 133629896, 133170680, 132350456, 130881064, 128237360,
- 125714928, 122114032, 116984936, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 116984936, 122114032,
- 125714928, 128237360, 130881064, 132350456, 133170680, 133629896,
- 134217728},
- {134217728, 133798056, 133470584, 132886472, 131842704, 129973568,
- 128201072, 125690088, 122155288, 117261000, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 117261000, 122155288, 125690088,
- 128201072, 129973568, 131842704, 132886456, 133470584, 133798056,
- 134217728},
- {134217728, 133961128, 133761128, 133404840, 132769744, 131637408,
- 130569696, 129067480, 126974144, 124119080, 120401016, 117512176,
- 114509792, 111848104, 111848104, 111848104, 111848104, 111848104,
- 114509792, 117512160, 120401008, 124119080, 126974144, 129067480,
- 130569696, 131637424, 132769744, 133404840, 133761128, 133961128,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 134627808, 134946048, 135509888, 136505536, 138251328,
- 139864096, 142080384, 145070800, 148976736, 153787568, 157326848,
- 160834672, 163897216, 166020960, 166784896, 166020960, 163897200,
- 160834688, 157326848, 153787568, 148976736, 145070800, 142080384,
- 139864096, 138251328, 136505536, 135509888, 134946048, 134627808,
- 134217744},
- {134217728, 134906272, 135439648, 136382608, 138041424, 140931408,
- 143581232, 147193280, 152017056, 158239216, 165794560, 171285200,
- 176676288, 181345168, 184563696, 185717792, 184563696, 181345168,
- 176676272, 171285200, 165794560, 158239216, 152017056, 147193280,
- 143581216, 140931408, 138041424, 136382608, 135439648, 134906272,
- 134217744},
- },
+
+ {0.5000000000f, 0.4973956347f, 0.4953595102f, 0.4917194545f,
+ 0.4851873517f, 0.4733974338f, 0.4621005356f, 0.4458855093f,
+ 0.4225889444f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4225889444f, 0.4458855093f,
+ 0.4621005356f, 0.4733974338f, 0.4851873517f, 0.4917194545f,
+ 0.4953595102f, 0.4973956347f, 0.5000000000f},
+ {0.5000000000f, 0.4975600541f, 0.4956531823f, 0.4922452271f,
+ 0.4861339033f, 0.4751173258f, 0.4645794332f, 0.4494870603f,
+ 0.4278794229f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4278794229f, 0.4494870603f,
+ 0.4645794332f, 0.4751173258f, 0.4861338437f, 0.4922452271f,
+ 0.4956531823f, 0.4975600541f, 0.5000000000f},
+ {0.5000000000f, 0.4978101552f, 0.4960994422f, 0.4930438697f,
+ 0.4875699580f, 0.4777213931f, 0.4683246017f, 0.4549102187f,
+ 0.4358028471f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4358028471f, 0.4549102187f,
+ 0.4683246017f, 0.4777213931f, 0.4875699580f, 0.4930438697f,
+ 0.4960994422f, 0.4978101552f, 0.5000000000f},
+ {0.5000000000f, 0.4984366000f, 0.4972166717f, 0.4950406849f,
+ 0.4911523461f, 0.4841892719f, 0.4775862098f, 0.4682320654f,
+ 0.4550639093f, 0.4368312657f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4368312657f, 0.4550639093f, 0.4682320654f,
+ 0.4775862098f, 0.4841892719f, 0.4911523461f, 0.4950406253f,
+ 0.4972166717f, 0.4984366000f, 0.5000000000f},
+ {0.5000000000f, 0.4990440905f, 0.4982990324f, 0.4969717562f,
+ 0.4946058393f, 0.4903875589f, 0.4864100218f, 0.4808138311f,
+ 0.4730155468f, 0.4623796046f, 0.4485287368f, 0.4377669692f,
+ 0.4265822172f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4265822172f, 0.4377669096f,
+ 0.4485287070f, 0.4623796046f, 0.4730155468f, 0.4808138311f,
+ 0.4864100218f, 0.4903876185f, 0.4946058393f, 0.4969717562f,
+ 0.4982990324f, 0.4990440905f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.5015276670f, 0.5027132034f, 0.5048136711f,
+ 0.5085227489f, 0.5150263309f, 0.5210343599f, 0.5292906761f,
+ 0.5404308438f, 0.5549815893f, 0.5729033351f, 0.5860881805f,
+ 0.5991558433f, 0.6105647087f, 0.6184762716f, 0.6213221550f,
+ 0.6184762716f, 0.6105646491f, 0.5991559029f, 0.5860881805f,
+ 0.5729033351f, 0.5549815893f, 0.5404308438f, 0.5292906761f,
+ 0.5210343599f, 0.5150263309f, 0.5085227489f, 0.5048136711f,
+ 0.5027132034f, 0.5015276670f, 0.5000000596f},
+ {0.5000000000f, 0.5025650263f, 0.5045520067f, 0.5080648065f,
+ 0.5142443776f, 0.5250104070f, 0.5348817706f, 0.5483376980f,
+ 0.5663076639f, 0.5894870162f, 0.6176328659f, 0.6380870938f,
+ 0.6581704617f, 0.6755633950f, 0.6875533462f, 0.6918526888f,
+ 0.6875533462f, 0.6755633950f, 0.6581704021f, 0.6380870938f,
+ 0.6176328659f, 0.5894870162f, 0.5663076639f, 0.5483376980f,
+ 0.5348817110f, 0.5250104070f, 0.5142443776f, 0.5080648065f,
+ 0.5045520067f, 0.5025650263f, 0.5000000596f}},
{
- {134217728, 133460856, 132868912, 131810120, 129908448, 126470312,
- 123168472, 118415200, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 0, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 118415200,
- 123168472, 126470312, 129908448, 131810120, 132868912, 133460856,
- 134217728},
- {134217728, 133508664, 132954296, 131963096, 130184144, 126972336,
- 123893664, 119472480, 113115264, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 113115272, 119472480,
- 123893664, 126972336, 130184144, 131963096, 132954280, 133508664,
- 134217728},
- {134217728, 133581352, 133084040, 132195432, 130602352, 127732136,
- 124988584, 121062824, 115450448, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 115450448, 121062824,
- 124988584, 127732136, 130602352, 132195432, 133084040, 133581352,
- 134217728},
- {134217728, 133763416, 133408824, 132776176, 131645104, 129617688,
- 127692704, 124961536, 121107872, 115753192, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 115753192, 121107872, 124961520,
- 127692704, 129617688, 131645120, 132776176, 133408840, 133763416,
- 134217728},
- {134217728, 133939968, 133723424, 133337648, 132649736, 131422568,
- 130264576, 128633952, 126358808, 123250144, 119191232, 116028568,
- 112732488, 111848104, 111848104, 111848104, 111848104, 111848104,
- 112732488, 116028552, 119191232, 123250144, 126358808, 128633952,
- 130264576, 131422568, 132649736, 133337648, 133723424, 133939968,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 134661536, 135005888, 135615808, 136692320, 138578416,
- 140319184, 142708880, 145929024, 150128080, 155290032, 159081232,
- 162833824, 166106272, 168373648, 169188880, 168373648, 166106272,
- 162833824, 159081248, 155290032, 150128080, 145929040, 142708880,
- 140319168, 138578416, 136692320, 135615808, 135005872, 134661536,
- 134217744},
- {134217744, 134962848, 135539840, 136559456, 138351760, 141470368,
- 144325616, 148211728, 153391520, 160057728, 168132016, 173987488,
- 179727840, 184692672, 188111936, 189337408, 188111936, 184692672,
- 179727824, 173987488, 168132016, 160057728, 153391504, 148211728,
- 144325616, 141470352, 138351744, 136559456, 135539840, 134962848,
- 134217744},
- },
+
+ {0.5000000000f, 0.4971804321f, 0.4949752688f, 0.4910309613f,
+ 0.4839466810f, 0.4711386263f, 0.4588383138f, 0.4411309958f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.0000000000f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4411309958f,
+ 0.4588383138f, 0.4711386263f, 0.4839466810f, 0.4910309613f,
+ 0.4949752688f, 0.4971804321f, 0.5000000000f},
+ {0.5000000000f, 0.4973585308f, 0.4952933490f, 0.4916008413f,
+ 0.4849737287f, 0.4730088115f, 0.4615398645f, 0.4450696707f,
+ 0.4213871956f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4213872254f, 0.4450696707f,
+ 0.4615398645f, 0.4730088115f, 0.4849737287f, 0.4916008413f,
+ 0.4952932894f, 0.4973585308f, 0.5000000000f},
+ {0.5000000000f, 0.4976293147f, 0.4957766831f, 0.4924663603f,
+ 0.4865316749f, 0.4758392870f, 0.4656187594f, 0.4509941638f,
+ 0.4300864339f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4300864339f, 0.4509941638f,
+ 0.4656187594f, 0.4758392870f, 0.4865316749f, 0.4924663603f,
+ 0.4957766831f, 0.4976293147f, 0.5000000000f},
+ {0.5000000000f, 0.4983075559f, 0.4969865978f, 0.4946298003f,
+ 0.4904162288f, 0.4828635156f, 0.4756923914f, 0.4655179977f,
+ 0.4511619806f, 0.4312142432f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4312142432f, 0.4511619806f, 0.4655179381f,
+ 0.4756923914f, 0.4828635156f, 0.4904162884f, 0.4946298003f,
+ 0.4969866574f, 0.4983075559f, 0.5000000000f},
+ {0.5000000000f, 0.4989652634f, 0.4981585741f, 0.4967214465f,
+ 0.4941587746f, 0.4895872176f, 0.4852733612f, 0.4791988134f,
+ 0.4707232416f, 0.4591425657f, 0.4440219402f, 0.4322400987f,
+ 0.4199612439f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4199612439f, 0.4322400391f,
+ 0.4440219402f, 0.4591425657f, 0.4707232416f, 0.4791988134f,
+ 0.4852733612f, 0.4895872176f, 0.4941587746f, 0.4967214465f,
+ 0.4981585741f, 0.4989652634f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.5016533136f, 0.5029361248f, 0.5052082539f,
+ 0.5092185736f, 0.5162448287f, 0.5227296948f, 0.5316320062f,
+ 0.5436279774f, 0.5592706800f, 0.5785004497f, 0.5926237702f,
+ 0.6066032648f, 0.6187940836f, 0.6272407174f, 0.6302776933f,
+ 0.6272407174f, 0.6187940836f, 0.6066032648f, 0.5926238298f,
+ 0.5785004497f, 0.5592706800f, 0.5436280370f, 0.5316320062f,
+ 0.5227296352f, 0.5162448287f, 0.5092185736f, 0.5052082539f,
+ 0.5029360652f, 0.5016533136f, 0.5000000596f},
+ {0.5000000596f, 0.5027757883f, 0.5049252510f, 0.5087236166f,
+ 0.5154004693f, 0.5270181894f, 0.5376548171f, 0.5521317124f,
+ 0.5714279413f, 0.5962615013f, 0.6263405681f, 0.6481539011f,
+ 0.6695383787f, 0.6880338192f, 0.7007715702f, 0.7053368092f,
+ 0.7007715702f, 0.6880338192f, 0.6695383191f, 0.6481539011f,
+ 0.6263405681f, 0.5962615013f, 0.5714278817f, 0.5521317124f,
+ 0.5376548171f, 0.5270181298f, 0.5154004097f, 0.5087236166f,
+ 0.5049252510f, 0.5027757883f, 0.5000000596f}},
{
- {134217728, 133518624, 132972056, 131994936, 130241488, 127076656,
- 124044168, 119691480, 113437856, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 113437856, 119691480,
- 124044168, 127076656, 130241488, 131994936, 132972056, 133518624,
- 134217728},
- {134217728, 133562760, 133050888, 132136072, 130495576, 127538336,
- 124709592, 120658264, 114858008, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 114858008, 120658264,
- 124709592, 127538336, 130495560, 132136072, 133050888, 133562760,
- 134217728},
- {134217728, 133629896, 133170680, 132350456, 130881064, 128237360,
- 125714928, 122114032, 116984936, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 116984936, 122114032,
- 125714928, 128237360, 130881064, 132350456, 133170680, 133629896,
- 134217728},
- {134217728, 133798056, 133470584, 132886472, 131842704, 129973568,
- 128201072, 125690088, 122155288, 117261000, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 117261000, 122155288, 125690088,
- 128201072, 129973568, 131842704, 132886456, 133470584, 133798056,
- 134217728},
- {134217728, 133961128, 133761128, 133404840, 132769744, 131637408,
- 130569696, 129067480, 126974144, 124119080, 120401016, 117512176,
- 114509792, 111848104, 111848104, 111848104, 111848104, 111848104,
- 114509792, 117512160, 120401008, 124119080, 126974144, 129067480,
- 130569696, 131637424, 132769744, 133404840, 133761128, 133961128,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 134627808, 134946048, 135509888, 136505536, 138251328,
- 139864096, 142080384, 145070800, 148976736, 153787568, 157326848,
- 160834672, 163897216, 166020960, 166784896, 166020960, 163897200,
- 160834688, 157326848, 153787568, 148976736, 145070800, 142080384,
- 139864096, 138251328, 136505536, 135509888, 134946048, 134627808,
- 134217744},
- {134217728, 134906272, 135439648, 136382608, 138041424, 140931408,
- 143581232, 147193280, 152017056, 158239216, 165794560, 171285200,
- 176676288, 181345168, 184563696, 185717792, 184563696, 181345168,
- 176676272, 171285200, 165794560, 158239216, 152017056, 147193280,
- 143581216, 140931408, 138041424, 136382608, 135439648, 134906272,
- 134217744},
- },
+
+ {0.5000000000f, 0.4973956347f, 0.4953595102f, 0.4917194545f,
+ 0.4851873517f, 0.4733974338f, 0.4621005356f, 0.4458855093f,
+ 0.4225889444f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4225889444f, 0.4458855093f,
+ 0.4621005356f, 0.4733974338f, 0.4851873517f, 0.4917194545f,
+ 0.4953595102f, 0.4973956347f, 0.5000000000f},
+ {0.5000000000f, 0.4975600541f, 0.4956531823f, 0.4922452271f,
+ 0.4861339033f, 0.4751173258f, 0.4645794332f, 0.4494870603f,
+ 0.4278794229f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4278794229f, 0.4494870603f,
+ 0.4645794332f, 0.4751173258f, 0.4861338437f, 0.4922452271f,
+ 0.4956531823f, 0.4975600541f, 0.5000000000f},
+ {0.5000000000f, 0.4978101552f, 0.4960994422f, 0.4930438697f,
+ 0.4875699580f, 0.4777213931f, 0.4683246017f, 0.4549102187f,
+ 0.4358028471f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4358028471f, 0.4549102187f,
+ 0.4683246017f, 0.4777213931f, 0.4875699580f, 0.4930438697f,
+ 0.4960994422f, 0.4978101552f, 0.5000000000f},
+ {0.5000000000f, 0.4984366000f, 0.4972166717f, 0.4950406849f,
+ 0.4911523461f, 0.4841892719f, 0.4775862098f, 0.4682320654f,
+ 0.4550639093f, 0.4368312657f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4368312657f, 0.4550639093f, 0.4682320654f,
+ 0.4775862098f, 0.4841892719f, 0.4911523461f, 0.4950406253f,
+ 0.4972166717f, 0.4984366000f, 0.5000000000f},
+ {0.5000000000f, 0.4990440905f, 0.4982990324f, 0.4969717562f,
+ 0.4946058393f, 0.4903875589f, 0.4864100218f, 0.4808138311f,
+ 0.4730155468f, 0.4623796046f, 0.4485287368f, 0.4377669692f,
+ 0.4265822172f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4265822172f, 0.4377669096f,
+ 0.4485287070f, 0.4623796046f, 0.4730155468f, 0.4808138311f,
+ 0.4864100218f, 0.4903876185f, 0.4946058393f, 0.4969717562f,
+ 0.4982990324f, 0.4990440905f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.5015276670f, 0.5027132034f, 0.5048136711f,
+ 0.5085227489f, 0.5150263309f, 0.5210343599f, 0.5292906761f,
+ 0.5404308438f, 0.5549815893f, 0.5729033351f, 0.5860881805f,
+ 0.5991558433f, 0.6105647087f, 0.6184762716f, 0.6213221550f,
+ 0.6184762716f, 0.6105646491f, 0.5991559029f, 0.5860881805f,
+ 0.5729033351f, 0.5549815893f, 0.5404308438f, 0.5292906761f,
+ 0.5210343599f, 0.5150263309f, 0.5085227489f, 0.5048136711f,
+ 0.5027132034f, 0.5015276670f, 0.5000000596f},
+ {0.5000000000f, 0.5025650263f, 0.5045520067f, 0.5080648065f,
+ 0.5142443776f, 0.5250104070f, 0.5348817706f, 0.5483376980f,
+ 0.5663076639f, 0.5894870162f, 0.6176328659f, 0.6380870938f,
+ 0.6581704617f, 0.6755633950f, 0.6875533462f, 0.6918526888f,
+ 0.6875533462f, 0.6755633950f, 0.6581704021f, 0.6380870938f,
+ 0.6176328659f, 0.5894870162f, 0.5663076639f, 0.5483376980f,
+ 0.5348817110f, 0.5250104070f, 0.5142443776f, 0.5080648065f,
+ 0.5045520067f, 0.5025650263f, 0.5000000596f}},
{
- {134217728, 133682984, 133265384, 132519816, 131185264, 128787744,
- 126504696, 123253640, 118640752, 112174824, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 112174824, 118640752, 123253640,
- 126504696, 128787744, 131185264, 132519816, 133265384, 133682984,
- 134217728},
- {134217728, 133716728, 133325584, 132627440, 131378384, 129136568,
- 127004448, 123973008, 119681960, 113689736, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 113689744, 119681960, 123973008,
- 127004448, 129136568, 131378376, 132627440, 133325584, 133716744,
- 134217728},
- {134217728, 133768056, 133417096, 132790928, 131671560, 129665320,
- 127760792, 125059176, 121248440, 115955928, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 115955928, 121248440, 125059176,
- 127760792, 129665320, 131671560, 132790928, 133417096, 133768056,
- 134217728},
- {134217728, 133896640, 133646248, 133200016, 132403792, 130981736,
- 129637848, 127742080, 125090024, 121452368, 116676144, 112931424,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 112931424, 116676152, 121452360, 125090024, 127742080,
- 129637848, 130981736, 132403792, 133200016, 133646248, 133896640,
- 134217728},
- {134217728, 134021376, 133868400, 133596016, 133110896, 132247376,
- 131434736, 130294184, 128710328, 126560928, 123781432, 121638024,
- 119426296, 117420384, 115986304, 115461520, 115986304, 117420384,
- 119426296, 121638024, 123781432, 126560928, 128710328, 130294184,
- 131434736, 132247360, 133110896, 133596016, 133868400, 134021376,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 134531696, 134775520, 135207824, 135972192, 137315552,
- 138559920, 140275120, 142598512, 145648144, 149426144, 152220032,
- 155000416, 157436608, 159130592, 159740864, 159130592, 157436608,
- 155000416, 152220032, 149426144, 145648128, 142598512, 140275120,
- 138559920, 137315536, 135972192, 135207824, 134775504, 134531696,
- 134217728},
- {134217728, 134745024, 135153936, 135877760, 137153824, 139385200,
- 141439904, 144253632, 148033040, 152942128, 158949856, 163344976,
- 167682224, 171454624, 174063344, 175000352, 174063344, 171454624,
- 167682224, 163344976, 158949856, 152942128, 148033040, 144253632,
- 141439904, 139385200, 137153824, 135877760, 135153936, 134745040,
- 134217744},
- },
+
+ {0.5000000000f, 0.4980079234f, 0.4964522421f, 0.4936747849f,
+ 0.4887031913f, 0.4797717333f, 0.4712667167f, 0.4591555893f,
+ 0.4419712424f, 0.4178837836f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4178837836f, 0.4419712424f, 0.4591555893f,
+ 0.4712667167f, 0.4797717333f, 0.4887031913f, 0.4936747849f,
+ 0.4964522421f, 0.4980079234f, 0.5000000000f},
+ {0.5000000000f, 0.4981336296f, 0.4966765046f, 0.4940757155f,
+ 0.4894226193f, 0.4810712039f, 0.4731284380f, 0.4618354440f,
+ 0.4458500445f, 0.4235272706f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4235273004f, 0.4458500445f, 0.4618354440f,
+ 0.4731284380f, 0.4810712039f, 0.4894225895f, 0.4940757155f,
+ 0.4966765046f, 0.4981336892f, 0.5000000000f},
+ {0.5000000000f, 0.4983248413f, 0.4970174134f, 0.4946847558f,
+ 0.4905147851f, 0.4830409586f, 0.4759460390f, 0.4658817351f,
+ 0.4516856372f, 0.4319694936f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4319694936f, 0.4516856372f, 0.4658817351f,
+ 0.4759460390f, 0.4830409586f, 0.4905147851f, 0.4946847558f,
+ 0.4970174134f, 0.4983248413f, 0.5000000000f},
+ {0.5000000000f, 0.4988038540f, 0.4978710711f, 0.4962087274f,
+ 0.4932425618f, 0.4879449904f, 0.4829386175f, 0.4758763313f,
+ 0.4659966528f, 0.4524453282f, 0.4346525073f, 0.4207023382f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4207023382f,
+ 0.4346525371f, 0.4524452984f, 0.4659966528f, 0.4758763313f,
+ 0.4829386175f, 0.4879449904f, 0.4932425618f, 0.4962087274f,
+ 0.4978710711f, 0.4988038540f, 0.5000000000f},
+ {0.5000000000f, 0.4992685318f, 0.4986986518f, 0.4976839423f,
+ 0.4958767295f, 0.4926598668f, 0.4896325469f, 0.4853836596f,
+ 0.4794833362f, 0.4714761972f, 0.4611217678f, 0.4531369507f,
+ 0.4448976219f, 0.4374250174f, 0.4320826530f, 0.4301276803f,
+ 0.4320826530f, 0.4374250174f, 0.4448976219f, 0.4531369507f,
+ 0.4611217678f, 0.4714761972f, 0.4794833362f, 0.4853836596f,
+ 0.4896325469f, 0.4926598072f, 0.4958767295f, 0.4976839423f,
+ 0.4986986518f, 0.4992685318f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.5011696219f, 0.5020779371f, 0.5036883950f,
+ 0.5065358877f, 0.5115402937f, 0.5161759257f, 0.5225655437f,
+ 0.5312208533f, 0.5425816178f, 0.5566557646f, 0.5670638084f,
+ 0.5774215460f, 0.5864970684f, 0.5928076506f, 0.5950810909f,
+ 0.5928076506f, 0.5864970684f, 0.5774215460f, 0.5670638084f,
+ 0.5566557646f, 0.5425815582f, 0.5312208533f, 0.5225655437f,
+ 0.5161759257f, 0.5115402341f, 0.5065358877f, 0.5036883950f,
+ 0.5020778775f, 0.5011696219f, 0.5000000000f},
+ {0.5000000000f, 0.5019643307f, 0.5034876466f, 0.5061841011f,
+ 0.5109378099f, 0.5192503333f, 0.5269047022f, 0.5373866558f,
+ 0.5514660478f, 0.5697538257f, 0.5921343565f, 0.6085074544f,
+ 0.6246649623f, 0.6387182474f, 0.6484364867f, 0.6519271135f,
+ 0.6484364867f, 0.6387182474f, 0.6246649623f, 0.6085074544f,
+ 0.5921343565f, 0.5697538257f, 0.5514660478f, 0.5373866558f,
+ 0.5269047022f, 0.5192503333f, 0.5109378099f, 0.5061841011f,
+ 0.5034876466f, 0.5019643903f, 0.5000000596f}},
{
- {134217728, 133928592, 133703168, 133301512, 132585192, 131306928,
- 130100248, 128400288, 126026792, 122780488, 118535792, 115223136,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 115223136, 118535792, 122780488, 126026792, 128400288,
- 130100248, 131306912, 132585176, 133301512, 133703168, 133928592,
- 134217728},
- {134217728, 133946816, 133735640, 133359432, 132688632, 131492208,
- 130363488, 128774544, 126558464, 123532296, 119584464, 116511232,
- 113311288, 111848104, 111848104, 111848104, 111848104, 111848104,
- 113311272, 116511232, 119584464, 123532296, 126558464, 128774544,
- 130363488, 131492208, 132688632, 133359416, 133735640, 133946816,
- 134217728},
- {134217728, 133974552, 133785016, 133447456, 132845800, 131773512,
- 130762848, 129341696, 127362856, 124667064, 121162048, 118443504,
- 115622880, 113050192, 111848104, 111848104, 111848104, 113050192,
- 115622872, 118443504, 121162064, 124667064, 127362856, 129341696,
- 130762848, 131773512, 132845800, 133447456, 133785016, 133974552,
- 134217728},
- {134217728, 134044048, 133908744, 133667912, 133239096, 132476240,
- 131758880, 130752952, 129357832, 127467976, 125030208, 123155288,
- 121225328, 119479320, 118233720, 117778464, 118233720, 119479320,
- 121225328, 123155288, 125030208, 127467976, 129357832, 130752952,
- 131758880, 132476240, 133239096, 133667912, 133908760, 134044048,
- 134217728},
- {134217728, 134111512, 134028776, 133881624, 133619856, 133154992,
- 132718832, 132108784, 131265840, 130129840, 128674776, 127563760,
- 126427688, 125406704, 124682360, 124418464, 124682360, 125406704,
- 126427688, 127563760, 128674776, 130129840, 131265840, 132108784,
- 132718832, 133154992, 133619856, 133881608, 134028776, 134111512,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 134387728, 134519888, 134754464, 135170064, 135903024,
- 136584848, 137529104, 138816208, 140519312, 142649904, 144239712,
- 145833408, 147238976, 148221248, 148576080, 148221264, 147238976,
- 145833408, 144239712, 142649920, 140519312, 138816208, 137529088,
- 136584848, 135903024, 135170064, 134754464, 134519888, 134387744,
- 134217728},
- {134217728, 134503360, 134725216, 135118656, 135814608, 137038528,
- 138173216, 139738624, 141861664, 144652528, 148116256, 150681936,
- 153238592, 155481344, 157042224, 157604816, 157042224, 155481344,
- 153238592, 150681936, 148116256, 144652528, 141861648, 139738624,
- 138173216, 137038544, 135814624, 135118656, 134725200, 134503360,
- 134217728},
- },
+
+ {0.5000000000f, 0.4989228845f, 0.4980831146f, 0.4965868294f,
+ 0.4939183295f, 0.4891564250f, 0.4846611917f, 0.4783283472f,
+ 0.4694863856f, 0.4573929608f, 0.4415802360f, 0.4292396307f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4292396307f,
+ 0.4415802360f, 0.4573929608f, 0.4694863856f, 0.4783283472f,
+ 0.4846611917f, 0.4891563654f, 0.4939182699f, 0.4965868294f,
+ 0.4980831146f, 0.4989228845f, 0.5000000000f},
+ {0.5000000000f, 0.4989907742f, 0.4982040823f, 0.4968025982f,
+ 0.4943036735f, 0.4898466468f, 0.4856418371f, 0.4797225595f,
+ 0.4714670181f, 0.4601936638f, 0.4454868436f, 0.4340381622f,
+ 0.4221174419f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4221173823f, 0.4340381622f,
+ 0.4454868436f, 0.4601936638f, 0.4714670181f, 0.4797225595f,
+ 0.4856418371f, 0.4898466468f, 0.4943036735f, 0.4968025386f,
+ 0.4982040823f, 0.4989907742f, 0.5000000000f},
+ {0.5000000000f, 0.4990940988f, 0.4983880222f, 0.4971305132f,
+ 0.4948891699f, 0.4908945858f, 0.4871295691f, 0.4818353653f,
+ 0.4744636118f, 0.4644210041f, 0.4513638020f, 0.4412364364f,
+ 0.4307287931f, 0.4211447835f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4211447835f, 0.4307287633f, 0.4412364364f,
+ 0.4513638616f, 0.4644210041f, 0.4744636118f, 0.4818353653f,
+ 0.4871295691f, 0.4908945858f, 0.4948891699f, 0.4971305132f,
+ 0.4983880222f, 0.4990940988f, 0.5000000000f},
+ {0.5000000000f, 0.4993529916f, 0.4988489449f, 0.4979517758f,
+ 0.4963543117f, 0.4935124516f, 0.4908400774f, 0.4870927036f,
+ 0.4818954766f, 0.4748552144f, 0.4657738209f, 0.4587891996f,
+ 0.4515995383f, 0.4450951517f, 0.4404549301f, 0.4387589693f,
+ 0.4404549301f, 0.4450951517f, 0.4515995383f, 0.4587891996f,
+ 0.4657738209f, 0.4748552144f, 0.4818954766f, 0.4870927036f,
+ 0.4908400774f, 0.4935124516f, 0.4963543117f, 0.4979517758f,
+ 0.4988490045f, 0.4993529916f, 0.5000000000f},
+ {0.5000000000f, 0.4996043146f, 0.4992960989f, 0.4987479150f,
+ 0.4977727532f, 0.4960409999f, 0.4944161773f, 0.4921435714f,
+ 0.4890033603f, 0.4847714305f, 0.4793508947f, 0.4752120376f,
+ 0.4709798396f, 0.4671763778f, 0.4644779861f, 0.4634948969f,
+ 0.4644779861f, 0.4671763778f, 0.4709798396f, 0.4752120376f,
+ 0.4793508947f, 0.4847714305f, 0.4890033603f, 0.4921435714f,
+ 0.4944161773f, 0.4960409999f, 0.4977727532f, 0.4987478554f,
+ 0.4992960989f, 0.4996043146f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.5006332994f, 0.5011256337f, 0.5019994974f,
+ 0.5035477281f, 0.5062782168f, 0.5088182092f, 0.5123358369f,
+ 0.5171306729f, 0.5234752297f, 0.5314123034f, 0.5373347998f,
+ 0.5432717800f, 0.5485079288f, 0.5521671772f, 0.5534890294f,
+ 0.5521672368f, 0.5485079288f, 0.5432717800f, 0.5373347998f,
+ 0.5314123631f, 0.5234752297f, 0.5171306729f, 0.5123357773f,
+ 0.5088182092f, 0.5062782168f, 0.5035477281f, 0.5019994974f,
+ 0.5011256337f, 0.5006333590f, 0.5000000000f},
+ {0.5000000000f, 0.5010640621f, 0.5018905401f, 0.5033562183f,
+ 0.5059488416f, 0.5105082989f, 0.5147353411f, 0.5205669403f,
+ 0.5284758806f, 0.5388726592f, 0.5517760515f, 0.5613339543f,
+ 0.5708582401f, 0.5792131424f, 0.5850278735f, 0.5871236920f,
+ 0.5850278735f, 0.5792131424f, 0.5708582401f, 0.5613339543f,
+ 0.5517760515f, 0.5388726592f, 0.5284758210f, 0.5205669403f,
+ 0.5147353411f, 0.5105083585f, 0.5059489012f, 0.5033562183f,
+ 0.5018904805f, 0.5010640621f, 0.5000000000f}},
{
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- },
+
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f}},
{
- {134217728, 134506240, 134730320, 135127728, 135830656, 137066736,
- 138212592, 139793296, 141936768, 144754096, 148250000, 150839072,
- 153418688, 155681312, 157255888, 157823360, 157255888, 155681312,
- 153418688, 150839072, 148250000, 144754096, 141936768, 139793296,
- 138212592, 137066736, 135830656, 135127728, 134730320, 134506240,
- 134217728},
- {134217728, 134488080, 134698096, 135070576, 135729600, 136888992,
- 137964336, 139448608, 141462896, 144113040, 147405392, 149846352,
- 152280496, 154417184, 155904992, 156441360, 155904992, 154417184,
- 152280496, 149846352, 147405392, 144113056, 141462896, 139448592,
- 137964336, 136888992, 135729600, 135070592, 134698096, 134488080,
- 134217728},
- {134217728, 134460464, 134649040, 134983616, 135575776, 136618224,
- 137585888, 138922720, 140739120, 143132528, 146111456, 148323744,
- 150532880, 152474432, 153827616, 154315712, 153827616, 152474432,
- 150532880, 148323744, 146111456, 143132528, 140739104, 138922720,
- 137585872, 136618224, 135575776, 134983616, 134649040, 134460464,
- 134217728},
- {134217728, 134391168, 134526000, 134765312, 135189280, 135936912,
- 136632336, 137595280, 138907696, 140643920, 142815424, 144435360,
- 146058944, 147490640, 148491024, 148852384, 148491024, 147490640,
- 146058944, 144435360, 142815424, 140643920, 138907696, 137595280,
- 136632320, 135936912, 135189264, 134765312, 134526000, 134391168,
- 134217728},
- {134217728, 134323872, 134406416, 134552992, 134812944, 135272112,
- 135700080, 136294032, 137106080, 138184736, 139540672, 140557056,
- 141579792, 142484928, 143119200, 143348672, 143119200, 142484928,
- 141579792, 140557056, 139540672, 138184736, 137106080, 136294032,
- 135700080, 135272112, 134812944, 134552992, 134406416, 134323872,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 134047496, 133914896, 133678832, 133258584, 132511008,
- 131808096, 130822576, 129456008, 127605336, 125219000, 123384360,
- 121496560, 119789320, 118571720, 118126808, 118571736, 119789320,
- 121496560, 123384360, 125219000, 127605336, 129456008, 130822576,
- 131808096, 132511008, 133258584, 133678848, 133914896, 134047496,
- 134217728},
- {134217728, 133931488, 133708328, 133310696, 132601600, 131336352,
- 130142072, 128459768, 126111336, 122900128, 118702864, 115428552,
- 112012200, 111848104, 111848104, 111848104, 111848104, 111848104,
- 112012200, 115428552, 118702864, 122900128, 126111336, 128459768,
- 130142072, 131336352, 132601616, 133310696, 133708328, 133931488,
- 134217728},
- },
+
+ {0.5000000000f, 0.5010747910f, 0.5019095540f, 0.5033900142f,
+ 0.5060086250f, 0.5106133819f, 0.5148820281f, 0.5207706094f,
+ 0.5287556648f, 0.5392510295f, 0.5522742867f, 0.5619193316f,
+ 0.5715291500f, 0.5799580812f, 0.5858238339f, 0.5879378319f,
+ 0.5858238339f, 0.5799580812f, 0.5715291500f, 0.5619193316f,
+ 0.5522742867f, 0.5392510295f, 0.5287556648f, 0.5207706094f,
+ 0.5148820281f, 0.5106133819f, 0.5060086250f, 0.5033900142f,
+ 0.5019095540f, 0.5010747910f, 0.5000000000f},
+ {0.5000000000f, 0.5010071397f, 0.5017895103f, 0.5031771064f,
+ 0.5056321621f, 0.5099512339f, 0.5139572024f, 0.5194865465f,
+ 0.5269903541f, 0.5368629098f, 0.5491278768f, 0.5582211614f,
+ 0.5672890544f, 0.5752488375f, 0.5807913542f, 0.5827894807f,
+ 0.5807913542f, 0.5752488375f, 0.5672890544f, 0.5582211614f,
+ 0.5491278768f, 0.5368629694f, 0.5269903541f, 0.5194864869f,
+ 0.5139572024f, 0.5099512339f, 0.5056321621f, 0.5031771660f,
+ 0.5017895103f, 0.5010071397f, 0.5000000000f},
+ {0.5000000000f, 0.5009042621f, 0.5016067624f, 0.5028531551f,
+ 0.5050591230f, 0.5089425445f, 0.5125473738f, 0.5175274611f,
+ 0.5242940784f, 0.5332102180f, 0.5443075895f, 0.5525490046f,
+ 0.5607786775f, 0.5680115223f, 0.5730525255f, 0.5748708248f,
+ 0.5730525255f, 0.5680115223f, 0.5607786775f, 0.5525490046f,
+ 0.5443075895f, 0.5332102180f, 0.5242940187f, 0.5175274611f,
+ 0.5125473142f, 0.5089425445f, 0.5050591230f, 0.5028531551f,
+ 0.5016067624f, 0.5009042621f, 0.5000000000f},
+ {0.5000000000f, 0.5006461143f, 0.5011484027f, 0.5020399094f,
+ 0.5036193132f, 0.5064044595f, 0.5089951158f, 0.5125823617f,
+ 0.5174714923f, 0.5239394307f, 0.5320289135f, 0.5380636454f,
+ 0.5441119671f, 0.5494454503f, 0.5531721711f, 0.5545183420f,
+ 0.5531721711f, 0.5494454503f, 0.5441119671f, 0.5380636454f,
+ 0.5320289135f, 0.5239394307f, 0.5174714923f, 0.5125823617f,
+ 0.5089950562f, 0.5064044595f, 0.5036192536f, 0.5020399094f,
+ 0.5011484027f, 0.5006461143f, 0.5000000000f},
+ {0.5000000000f, 0.5003954172f, 0.5007029176f, 0.5012489557f,
+ 0.5022173524f, 0.5039278865f, 0.5055221915f, 0.5077348351f,
+ 0.5107599497f, 0.5147782564f, 0.5198295116f, 0.5236158371f,
+ 0.5274258256f, 0.5307977200f, 0.5331605673f, 0.5340154171f,
+ 0.5331605673f, 0.5307977200f, 0.5274258256f, 0.5236158371f,
+ 0.5198295116f, 0.5147782564f, 0.5107599497f, 0.5077348351f,
+ 0.5055221915f, 0.5039278865f, 0.5022173524f, 0.5012489557f,
+ 0.5007029176f, 0.5003954172f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.4993658364f, 0.4988718629f, 0.4979924560f,
+ 0.4964269102f, 0.4936419725f, 0.4910234213f, 0.4873520732f,
+ 0.4822612107f, 0.4753669202f, 0.4664771259f, 0.4596425593f,
+ 0.4526099563f, 0.4462499917f, 0.4417140782f, 0.4400566518f,
+ 0.4417141378f, 0.4462499917f, 0.4526099563f, 0.4596425593f,
+ 0.4664771259f, 0.4753669202f, 0.4822612107f, 0.4873520732f,
+ 0.4910234213f, 0.4936419725f, 0.4964269102f, 0.4979925156f,
+ 0.4988718629f, 0.4993658364f, 0.5000000000f},
+ {0.5000000000f, 0.4989336729f, 0.4981023371f, 0.4966210425f,
+ 0.4939794540f, 0.4892660379f, 0.4848169982f, 0.4785499275f,
+ 0.4698013365f, 0.4578386545f, 0.4422026277f, 0.4300048649f,
+ 0.4172779620f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4172779620f, 0.4300048649f,
+ 0.4422026277f, 0.4578386545f, 0.4698013365f, 0.4785499275f,
+ 0.4848169982f, 0.4892660379f, 0.4939795136f, 0.4966210425f,
+ 0.4981023371f, 0.4989336729f, 0.5000000000f}},
{
- {134217728, 134750352, 135163360, 135894416, 137183168, 139436416,
- 141510976, 144351440, 148166016, 153119584, 159180064, 163612720,
- 167986224, 171789568, 174419376, 175363904, 174419392, 171789552,
- 167986224, 163612736, 159180064, 153119584, 148166016, 144351440,
- 141510976, 139436416, 137183168, 135894416, 135163360, 134750352,
- 134217744},
- {134217728, 134716864, 135103984, 135789392, 136998240, 139113424,
- 141062640, 143734096, 147326256, 151998160, 157724080, 161918432,
- 166061616, 169668288, 172163984, 173060688, 172163968, 169668288,
- 166061616, 161918432, 157724080, 151998160, 147326256, 143734096,
- 141062640, 139113424, 136998240, 135789392, 135103984, 134716864,
- 134217744},
- {134217728, 134665904, 135013632, 135629504, 136716496, 138620704,
- 140377968, 142790048, 146039760, 150276480, 155483472, 159306928,
- 163090832, 166390080, 168675792, 169497600, 168675792, 166390080,
- 163090832, 159306944, 155483488, 150276480, 146039760, 142790048,
- 140377968, 138620704, 136716496, 135629504, 135013616, 134665904,
- 134217744},
- {134217728, 134538048, 134786784, 135227776, 136007472, 137377520,
- 138646400, 140395008, 142763040, 145870208, 149717968, 152562416,
- 155392320, 157871248, 159594640, 160215424, 159594624, 157871248,
- 155392320, 152562416, 149717968, 145870208, 142763040, 140395008,
- 138646400, 137377520, 136007472, 135227776, 134786768, 134538048,
- 134217728},
- {134217728, 134413792, 134566144, 134836576, 135315504, 136159568,
- 136944176, 138029792, 139507872, 141460704, 143899120, 145715424,
- 147533568, 149135008, 150253024, 150656672, 150253024, 149135008,
- 147533568, 145715424, 143899120, 141460688, 139507872, 138029792,
- 136944176, 136159584, 135315504, 134836576, 134566160, 134413792,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 133903024, 133657608, 133220288, 132440008, 131046696,
- 129730280, 127873712, 125277552, 121718608, 117049664, 113392528,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 113392528, 117049680, 121718608, 125277552, 127873712,
- 129730280, 131046696, 132440024, 133220288, 133657624, 133903024,
- 134217728},
- {134217728, 133688336, 133274944, 132536912, 131215936, 128843168,
- 126584160, 123368104, 118806640, 112416656, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 112416656, 118806640, 123368104,
- 126584160, 128843168, 131215952, 132536912, 133274944, 133688336,
- 134217728},
- },
+
+ {0.5000000000f, 0.5019841790f, 0.5035227537f, 0.5062461495f,
+ 0.5110471249f, 0.5194411278f, 0.5271694660f, 0.5377510190f,
+ 0.5519614220f, 0.5704149008f, 0.5929919481f, 0.6095048785f,
+ 0.6257974505f, 0.6399660110f, 0.6497628093f, 0.6532814503f,
+ 0.6497628689f, 0.6399659514f, 0.6257974505f, 0.6095049381f,
+ 0.5929919481f, 0.5704149008f, 0.5519614220f, 0.5377510190f,
+ 0.5271694660f, 0.5194411278f, 0.5110471249f, 0.5062461495f,
+ 0.5035227537f, 0.5019841790f, 0.5000000596f},
+ {0.5000000000f, 0.5018594265f, 0.5033015609f, 0.5058549047f,
+ 0.5103582144f, 0.5182378888f, 0.5254992843f, 0.5354512334f,
+ 0.5488330722f, 0.5662372708f, 0.5875679851f, 0.6031931639f,
+ 0.6186277270f, 0.6320636272f, 0.6413608193f, 0.6447013021f,
+ 0.6413607597f, 0.6320636272f, 0.6186277270f, 0.6031931639f,
+ 0.5875679851f, 0.5662372708f, 0.5488330722f, 0.5354512334f,
+ 0.5254992843f, 0.5182378888f, 0.5103582144f, 0.5058549047f,
+ 0.5033015609f, 0.5018594265f, 0.5000000596f},
+ {0.5000000000f, 0.5016695857f, 0.5029649734f, 0.5052592754f,
+ 0.5093086362f, 0.5164023638f, 0.5229486823f, 0.5319343805f,
+ 0.5440405011f, 0.5598235130f, 0.5792210698f, 0.5934645534f,
+ 0.6075606942f, 0.6198513508f, 0.6283662915f, 0.6314277649f,
+ 0.6283662915f, 0.6198513508f, 0.6075606942f, 0.5934646130f,
+ 0.5792211294f, 0.5598235130f, 0.5440405011f, 0.5319343805f,
+ 0.5229486823f, 0.5164023638f, 0.5093086362f, 0.5052592754f,
+ 0.5029649138f, 0.5016695857f, 0.5000000596f},
+ {0.5000000000f, 0.5011932850f, 0.5021198988f, 0.5037627220f,
+ 0.5066673160f, 0.5117711425f, 0.5164980888f, 0.5230121613f,
+ 0.5318337679f, 0.5434088707f, 0.5577428937f, 0.5683392882f,
+ 0.5788815022f, 0.5881162286f, 0.5945363641f, 0.5968489647f,
+ 0.5945363045f, 0.5881162286f, 0.5788815022f, 0.5683392882f,
+ 0.5577428937f, 0.5434088707f, 0.5318337679f, 0.5230121613f,
+ 0.5164980888f, 0.5117711425f, 0.5066673160f, 0.5037627220f,
+ 0.5021198392f, 0.5011932850f, 0.5000000000f},
+ {0.5000000000f, 0.5007303953f, 0.5012979507f, 0.5023053885f,
+ 0.5040895343f, 0.5072339177f, 0.5101568103f, 0.5142010450f,
+ 0.5197073221f, 0.5269821882f, 0.5360659957f, 0.5428322554f,
+ 0.5496053696f, 0.5555711985f, 0.5597361326f, 0.5612398386f,
+ 0.5597361326f, 0.5555711985f, 0.5496053696f, 0.5428322554f,
+ 0.5360659957f, 0.5269821286f, 0.5197073221f, 0.5142010450f,
+ 0.5101568103f, 0.5072339773f, 0.5040895343f, 0.5023053885f,
+ 0.5012980103f, 0.5007303953f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.4988276362f, 0.4979133904f, 0.4962842464f,
+ 0.4933774769f, 0.4881869853f, 0.4832829535f, 0.4763666987f,
+ 0.4666952491f, 0.4534371495f, 0.4360439777f, 0.4224200845f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4224200845f,
+ 0.4360440373f, 0.4534371495f, 0.4666952491f, 0.4763666987f,
+ 0.4832829535f, 0.4881869853f, 0.4933775365f, 0.4962842464f,
+ 0.4979134500f, 0.4988276362f, 0.5000000000f},
+ {0.5000000000f, 0.4980278611f, 0.4964878559f, 0.4937384725f,
+ 0.4888174534f, 0.4799782038f, 0.4715627432f, 0.4595820010f,
+ 0.4425892234f, 0.4187846780f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4187846780f, 0.4425892234f, 0.4595820010f,
+ 0.4715627432f, 0.4799782038f, 0.4888175130f, 0.4937384725f,
+ 0.4964878559f, 0.4980278611f, 0.5000000000f}},
{
- {134217728, 134913216, 135451936, 136404304, 138079504, 140997600,
- 143672688, 147318512, 152186224, 158463280, 166082896, 171618768,
- 177053216, 181758880, 185002352, 186165344, 185002352, 181758896,
- 177053216, 171618768, 166082896, 158463296, 152186224, 147318512,
- 143672688, 140997600, 138079504, 136404304, 135451936, 134913216,
- 134217744},
- {134217728, 134869504, 135374512, 136267584, 137839408, 140580112,
- 143095472, 146527744, 151117280, 157046336, 164257936, 169506256,
- 174664912, 179136576, 182221168, 183327616, 182221168, 179136560,
- 174664928, 169506256, 164257936, 157046336, 151117296, 146527744,
- 143095472, 140580112, 137839408, 136267584, 135374512, 134869504,
- 134217744},
- {134217728, 134802992, 135256672, 136059376, 137473424, 139942768,
- 142213056, 145316768, 149476832, 154866368, 161442736, 166241776,
- 170968496, 175072880, 177907744, 178925312, 177907760, 175072880,
- 170968496, 166241776, 161442736, 154866368, 149476832, 145316768,
- 142213056, 139942768, 137473424, 136059376, 135256672, 134802992,
- 134217744},
- {134217728, 134636080, 134960736, 135535920, 136551440, 138331744,
- 139976000, 142235024, 145282080, 149260352, 154157968, 157759584,
- 161328032, 164442560, 166601920, 167378576, 166601920, 164442544,
- 161328032, 157759584, 154157968, 149260368, 145282080, 142235024,
- 139976016, 138331728, 136551456, 135535920, 134960736, 134636096,
- 134217744},
- {134217728, 134473824, 134672800, 135025728, 135650240, 136749360,
- 137769200, 139177520, 141089920, 143607984, 146739200, 149062688,
- 151381328, 153417872, 154836624, 155348256, 154836640, 153417872,
- 151381328, 149062688, 146739200, 143607984, 141089920, 139177520,
- 137769200, 136749360, 135650256, 135025712, 134672784, 134473824,
- 134217728},
- {134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728, 134217728, 134217728, 134217728, 134217728, 134217728,
- 134217728},
- {134217728, 133806400, 133485440, 132913000, 131890240, 130059096,
- 128323168, 125864856, 122406120, 117621128, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 117621120, 122406120, 125864856,
- 128323168, 130059096, 131890240, 132913000, 133485440, 133806400,
- 134217728},
- {134217728, 133525632, 132984568, 132017344, 130281848, 127150040,
- 124150024, 119845456, 113664464, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 111848104, 111848104,
- 111848104, 111848104, 111848104, 111848104, 113664464, 119845456,
- 124150024, 127150040, 130281848, 132017344, 132984568, 133525632,
- 134217728},
- },
-};
+
+ {0.5000000000f, 0.5025908947f, 0.5045977831f, 0.5081456304f,
+ 0.5143862367f, 0.5252569914f, 0.5352224708f, 0.5488042235f,
+ 0.5669378638f, 0.5903217196f, 0.6187070012f, 0.6393297315f,
+ 0.6595746279f, 0.6771045923f, 0.6891874671f, 0.6935199499f,
+ 0.6891874671f, 0.6771046519f, 0.6595746279f, 0.6393297315f,
+ 0.6187070012f, 0.5903217793f, 0.5669378638f, 0.5488042235f,
+ 0.5352224708f, 0.5252569914f, 0.5143862367f, 0.5081456304f,
+ 0.5045977831f, 0.5025908947f, 0.5000000596f},
+ {0.5000000000f, 0.5024280548f, 0.5043093562f, 0.5076363087f,
+ 0.5134918094f, 0.5237017274f, 0.5330721736f, 0.5458583832f,
+ 0.5629557371f, 0.5850431919f, 0.6119084954f, 0.6314600110f,
+ 0.6506775022f, 0.6673357487f, 0.6788267493f, 0.6829485893f,
+ 0.6788267493f, 0.6673356891f, 0.6506775618f, 0.6314600110f,
+ 0.6119084954f, 0.5850431919f, 0.5629557967f, 0.5458583832f,
+ 0.5330721736f, 0.5237017274f, 0.5134918094f, 0.5076363087f,
+ 0.5043093562f, 0.5024280548f, 0.5000000596f},
+ {0.5000000000f, 0.5021802783f, 0.5038703680f, 0.5068606734f,
+ 0.5121284127f, 0.5213274360f, 0.5297849178f, 0.5413471460f,
+ 0.5568445921f, 0.5769221783f, 0.6014210582f, 0.6192988753f,
+ 0.6369072795f, 0.6521973014f, 0.6627579927f, 0.6665487289f,
+ 0.6627580523f, 0.6521973014f, 0.6369072795f, 0.6192988753f,
+ 0.6014210582f, 0.5769221783f, 0.5568445921f, 0.5413471460f,
+ 0.5297849178f, 0.5213274360f, 0.5121284127f, 0.5068606734f,
+ 0.5038703680f, 0.5021802783f, 0.5000000596f},
+ {0.5000000000f, 0.5015584826f, 0.5027679205f, 0.5049106479f,
+ 0.5086937547f, 0.5153259039f, 0.5214512348f, 0.5298667550f,
+ 0.5412179232f, 0.5560381413f, 0.5742831826f, 0.5877002478f,
+ 0.6009937525f, 0.6125962734f, 0.6206405163f, 0.6235337853f,
+ 0.6206405163f, 0.6125962138f, 0.6009937525f, 0.5877002478f,
+ 0.5742831826f, 0.5560382009f, 0.5412179232f, 0.5298667550f,
+ 0.5214512944f, 0.5153258443f, 0.5086938143f, 0.5049106479f,
+ 0.5027679205f, 0.5015585423f, 0.5000000596f},
+ {0.5000000000f, 0.5009540319f, 0.5016952753f, 0.5030100346f,
+ 0.5053365231f, 0.5094310641f, 0.5132302642f, 0.5184766650f,
+ 0.5256009102f, 0.5349814296f, 0.5466461182f, 0.5553017855f,
+ 0.5639393926f, 0.5715261102f, 0.5768113732f, 0.5787173510f,
+ 0.5768114328f, 0.5715261102f, 0.5639393926f, 0.5553017855f,
+ 0.5466461182f, 0.5349814296f, 0.5256009102f, 0.5184766650f,
+ 0.5132302642f, 0.5094310641f, 0.5053365827f, 0.5030099750f,
+ 0.5016952157f, 0.5009540319f, 0.5000000000f},
+ {0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f, 0.5000000000f,
+ 0.5000000000f, 0.5000000000f, 0.5000000000f},
+ {0.5000000000f, 0.4984676838f, 0.4972720146f, 0.4951395094f,
+ 0.4913294315f, 0.4845078886f, 0.4780410528f, 0.4688831270f,
+ 0.4559983313f, 0.4381728470f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4381728172f, 0.4559983313f, 0.4688831270f,
+ 0.4780410528f, 0.4845078886f, 0.4913294315f, 0.4951395094f,
+ 0.4972720146f, 0.4984676838f, 0.5000000000f},
+ {0.5000000000f, 0.4974217415f, 0.4954061210f, 0.4918029308f,
+ 0.4853377044f, 0.4736708105f, 0.4624948800f, 0.4464591146f,
+ 0.4234331250f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4166666567f, 0.4166666567f,
+ 0.4166666567f, 0.4166666567f, 0.4234331250f, 0.4464591146f,
+ 0.4624948800f, 0.4736708105f, 0.4853377044f, 0.4918029308f,
+ 0.4954061210f, 0.4974217415f, 0.5000000000f}}};
const WORD32 ixheaacd_atan_table_Q28[16][8][31] = {
{
@@ -4546,384 +5833,307 @@ const WORD32 ixheaacd_atan_table_Q28[16][8][31] = {
-3},
}};
-const WORD32 ixheaacd_c_l_table_Q31[31] = {
- 68, 12075997, 21473763, 38182223, 67875466, 120571390,
- 170045077, 239449100, 336157459, 469148859, 647490682, 794298694,
- 962206904, 1145934076, 1335698887, 1518500250, 1681545272, 1816183116,
- 1919855175, 1995188112, 2047545319, 2095610977, 2121010179, 2134092347,
- 2140740687, 2144096210, 2146410711, 2147144182, 2147376282, 2147449694,
- 2147483647};
+const FLOAT32 ixheaacd_c_l_table[31] = {
+ 0.0000000317f, 0.0056233243f, 0.0099995006f, 0.0177799836f, 0.0316069759f,
+ 0.0561454296f, 0.0791834071f, 0.1115021780f, 0.1565355211f, 0.2184644639f,
+ 0.3015113473f, 0.3698741496f, 0.4480625093f, 0.5336171389f, 0.6219832897f,
+ 0.7071067691f, 0.7830305099f, 0.8457261920f, 0.8940022588f, 0.9290818572f,
+ 0.9534626007f, 0.9758449197f, 0.9876723289f, 0.9937641621f, 0.9968600869f,
+ 0.9984226227f, 0.9995003939f, 0.9998419285f, 0.9999499917f, 0.9999842048f,
+ 1.0000000000f};
-const WORD32 ixheaacd_sin_table_Q31[8][31] = {
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {750179061, 746245580, 743210706, 737870331, 728548620, 712505595,
- 697979429, 678386783, 652421439, 618809885, 576615606, 543587743,
- 506876195, 466993926, 424737371, 381140538, 337380886, 294653248,
- 254039878, 216406178, 182341865, 138534277, 103401830, 76116249,
- 55442477, 40067134, 23038730, 13121396, 7432107, 4196447,
- 24},
- {1161262961, 1155790434, 1151559607, 1144096867, 1131016382, 1108345689,
- 1087649071, 1059486043, 1021740286, 972201548, 909011376, 858841310,
- 802424715, 740453756, 674139243, 605156167, 535487835, 467194735,
- 402165023, 341910884, 287454637, 217648816, 161934922, 118876289,
- 86395037, 62326858, 35765878, 20345239, 11515596, 6499487,
- 37},
- {1716503346, 1710705303, 1706196326, 1698186767, 1683975371, 1658827737,
- 1635302807, 1602433676, 1556860619, 1494490287, 1410930784, 1341611885,
- 1260794215, 1168902519, 1067487796, 959278806, 847935697, 737527629,
- 631893965, 534105311, 446175490, 334574700, 246745780, 179796016,
- 129896719, 93282739, 53251977, 30198506, 17061963, 9620003,
- 54},
- {1997091453, 1992944085, 1989690856, 1983852214, 1973306896, 1954076825,
- 1935447004, 1908416859, 1869093029, 1812001456, 1730062329, 1657802892,
- 1569207783, 1463537141, 1341868672, 1207527592, 1065884173, 923429508,
- 786466908, 659983219, 547093745, 405656596, 296231282, 214127893,
- 153738020, 109885815, 62401443, 35278435, 19896909, 11207148,
- 63},
- {2147483647, 2147449694, 2147376282, 2147144182, 2146410711, 2144096210,
- 2140740687, 2134092347, 2121010179, 2095610977, 2047545319, 1995188112,
- 1919855175, 1816183116, 1681545272, 1518500250, 1335698887, 1145934076,
- 962206904, 794298694, 647490682, 469148859, 336157459, 239449100,
- 170045077, 120571390, 67875466, 38182223, 21473763, 12075997,
- 68},
- {1735452507, 1741201627, 1745677174, 1753637197, 1767790913, 1792923770,
- 1816518097, 1849561983, 1895318984, 1957003931, 2034703322, 2089967744,
- 2134916861, 2144595142, 2081353083, 1914153740, 1653277521, 1353148056,
- 1069993076, 832031145, 643429686, 438118607, 300387816, 207524268,
- 144291161, 100823513, 55902457, 31184569, 17456772, 9791496,
- 55},
- {302939858, 304635714, 305968630, 308367663, 312727041, 320788003,
- 328771547, 340741324, 359192238, 388879484, 440075553, 497870534,
- 595446097, 785304289, 1255861595, 2142108211, 997566324, 495493509,
- 298429982, 198205829, 139164109, 87059272, 56928133, 38231805,
- 26115252, 18039235, 9889297, 5483639, 3059686, 1713093,
- 10}};
+const FLOAT32 ixheaacd_sin_table[8][31] = {
+ {0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f, 0.0000000000f,
+ 0.0000000000f},
+ {0.3493293524f, 0.3474976718f, 0.3460844457f, 0.3435976505f, 0.3392568827f,
+ 0.3317862749f, 0.3250220120f, 0.3158984482f, 0.3038074076f, 0.2881557941f,
+ 0.2685075700f, 0.2531277537f, 0.2360326201f, 0.2174609900f, 0.1977837533f,
+ 0.1774823964f, 0.1571052223f, 0.1372086108f, 0.1182965338f, 0.1007719785f,
+ 0.0849095508f, 0.0645100474f, 0.0481502302f, 0.0354443900f, 0.0258174147f,
+ 0.0186577141f, 0.0107282447f, 0.0061101262f, 0.0034608445f, 0.0019541229f,
+ 0.0000000112f},
+ {0.5407552123f, 0.5382068753f, 0.5362367034f, 0.5327616334f, 0.5266705155f,
+ 0.5161136985f, 0.5064760447f, 0.4933616221f, 0.4757848978f, 0.4527166188f,
+ 0.4232914150f, 0.3999291360f, 0.3736581206f, 0.3448006511f, 0.3139205575f,
+ 0.2817977965f, 0.2493559569f, 0.2175544947f, 0.1872726828f, 0.1592146605f,
+ 0.1338564903f, 0.1013506278f, 0.0754068270f, 0.0553560853f, 0.0402308255f,
+ 0.0290232040f, 0.0166547857f, 0.0094739906f, 0.0053623673f, 0.0030265595f,
+ 0.0000000172f},
+ {0.7993091345f, 0.7966092229f, 0.7945095897f, 0.7907798290f, 0.7841621637f,
+ 0.7724518776f, 0.7614971995f, 0.7461913228f, 0.7249697447f, 0.6959262490f,
+ 0.6570158601f, 0.6247367263f, 0.5871030688f, 0.5443126559f, 0.4970877469f,
+ 0.4466989934f, 0.3948508203f, 0.3434380591f, 0.2942485511f, 0.2487121671f,
+ 0.2077666521f, 0.1557984799f, 0.1148999557f, 0.0837240443f, 0.0604878739f,
+ 0.0434381589f, 0.0247973837f, 0.0140622752f, 0.0079450961f, 0.0044796630f,
+ 0.0000000251f},
+ {0.9299681783f, 0.9280369282f, 0.9265220165f, 0.9238031507f, 0.9188926220f,
+ 0.9099379182f, 0.9012627602f, 0.8886758685f, 0.8703642488f, 0.8437789083f,
+ 0.8056230545f, 0.7719746232f, 0.7307193279f, 0.6815125942f, 0.6248562932f,
+ 0.5622988343f, 0.4963409901f, 0.4300053716f, 0.3662271798f, 0.3073286414f,
+ 0.2547603846f, 0.1888985783f, 0.1379434466f, 0.0997110680f, 0.0715898424f,
+ 0.0511695705f, 0.0290579367f, 0.0164278019f, 0.0092652198f, 0.0052187350f,
+ 0.0000000293f},
+ {1.0000000000f, 0.9999842048f, 0.9999499917f, 0.9998419285f, 0.9995003939f,
+ 0.9984226227f, 0.9968600869f, 0.9937641621f, 0.9876723289f, 0.9758449197f,
+ 0.9534626007f, 0.9290818572f, 0.8940022588f, 0.8457261920f, 0.7830305099f,
+ 0.7071067691f, 0.6219832897f, 0.5336171389f, 0.4480625093f, 0.3698741496f,
+ 0.3015113473f, 0.2184644639f, 0.1565355211f, 0.1115021780f, 0.0791834071f,
+ 0.0561454296f, 0.0316069759f, 0.0177799836f, 0.0099995006f, 0.0056233243f,
+ 0.0000000317f},
+ {0.8081330657f, 0.8108102083f, 0.8128942847f, 0.8166009784f, 0.8231918216f,
+ 0.8348951936f, 0.8458821774f, 0.8612694144f, 0.8825767040f, 0.9113009572f,
+ 0.9474825859f, 0.9732170701f, 0.9941481352f, 0.9986549616f, 0.9692055583f,
+ 0.8913472891f, 0.7698673606f, 0.6301086545f, 0.4982543588f, 0.3874447048f,
+ 0.2996203005f, 0.2040148675f, 0.1398789734f, 0.0966360196f, 0.0671908110f,
+ 0.0469496064f, 0.0260316096f, 0.0145214461f, 0.0081289429f, 0.0045595206f,
+ 0.0000000256f},
+ {0.1410673708f, 0.1418570578f, 0.1424777508f, 0.1435948759f, 0.1456248760f,
+ 0.1493785530f, 0.1530961841f, 0.1586700380f, 0.1672619134f, 0.1810861230f,
+ 0.2049261481f, 0.2318390310f, 0.2772761881f, 0.3656858206f, 0.5848061442f,
+ 0.9974968433f, 0.4645280242f, 0.2307321429f, 0.1389672905f, 0.0922967792f,
+ 0.0648033395f, 0.0405401327f, 0.0265092272f, 0.0178030711f, 0.0121608619f,
+ 0.0084001739f, 0.0046050628f, 0.0025535184f, 0.0014247773f, 0.0007977211f,
+ 0.0000000047f}};
-const WORD32 ixheaacd_cos_table_Q31[8][31] = {
- {2147483647, 2147483647, 2147483647, 2147483647, 2147483647, 2147483647,
- 2147483647, 2147483647, 2147483647, 2147483647, 2147483647, 2147483647,
- 2147483647, 2147483647, 2147483647, 2147483647, 2147483647, 2147483647,
- 2147483647, 2147483647, 2147483647, 2147483647, 2147483647, 2147483647,
- 2147483647, 2147483647, 2147483647, 2147483647, 2147483647, 2147483647,
- 2147483647},
- {2012192186, 2013654279, 2014776381, 2016738305, 2020124483, 2025838542,
- 2030889149, 2037517458, 2045979541, 2056394987, 2068622842, 2077546241,
- 2086806781, 2096092243, 2105061563, 2113390146, 2120815918, 2127173120,
- 2132404689, 2136551985, 2139728362, 2143010563, 2144992793, 2146134277,
- 2146767838, 2147109835, 2147360062, 2147443561, 2147470787, 2147479548,
- 2147483647},
- {1806420315, 1809926653, 1812621442, 1817341018, 1825510329, 1839362893,
- 1851676407, 1867933442, 1888844304, 1914813351, 1945606419, 1968267671,
- 1991933883, 2015791223, 2038926752, 2060454327, 2079648720, 2096047494,
- 2109490297, 2120090320, 2128157854, 2136425756, 2141369445, 2144190861,
- 2145745072, 2146578995, 2147185791, 2147387271, 2147452772, 2147473812,
- 2147483647},
- {1290465917, 1298142282, 1304062927, 1314476217, 1332633846, 1363809575,
- 1391930582, 1429647625, 1479145371, 1542136441, 1618938029, 1676831408,
- 1738414210, 1801486309, 1863372164, 1921319908, 1972990388, 2016863658,
- 2052412248, 2080004215, 2100622158, 2121260425, 2133261010, 2139943787,
- 2143551460, 2145456676, 2146823292, 2147271308, 2147415867, 2147462101,
- 2147483647},
- {789500947, 799912428, 807970493, 822202171, 847198862, 890656938,
- 930446620, 984698487, 1057439013, 1152534920, 1272230465, 1365055160,
- 1466039887, 1571542254, 1676625923, 1775827450, 1864289931, 1938804777,
- 1998288223, 2043552830, 2076625737, 2108821648, 2126953936, 2136781520,
- 2141973538, 2144670400, 2146576828, 2147193855, 2147391471, 2147454404,
- 2147483647},
- {68, 12075997, 21473763, 38182223, 67875466, 120571390,
- 170045077, 239449100, 336157459, 469148859, 647490682, 794298694,
- 962206904, 1145934076, 1335698887, 1518500250, 1681545272, 1816183116,
- 1919855175, 1995188112, 2047545319, 2095610977, 2121010179, 2134092347,
- 2140740687, 2144096210, 2146410711, 2147144182, 2147376282, 2147449694,
- 2147483647},
- {-1264867824, -1256941889, -1250718683, -1239533218, -1219262608,
- -1181994236, -1145402996, -1091240803, -1009679140, -884206781,
- -686781195, -493680916, -231982790, 111344931, 528824509,
- 973499603, 1370532546, 1667536014, 1861934703, 1979750033,
- 2048825092, 2102317318, 2126370894, 2137432969, 2142630645,
- 2145115530, 2146755909, 2147257214, 2147412694, 2147461326,
- 2147483647},
- {-2126008810, -2125766474, -2125575032, -2125228318, -2124591212,
- -2123389054, -2122167592, -2120278606, -2117230964, -2111979821,
- -2101908544, -2088973660, -2063281359, -1998745405, -1741980962,
- 151850025, 1901722232, 2089538753, 2126646554, 2138317205,
- 2142969755, 2145718225, 2146728955, 2147143299, 2147324850,
- 2147407880, 2147460877, 2147476647, 2147481468, 2147482965,
- 2147483647}};
+const FLOAT32 ixheaacd_cos_table[8][31] = {
+ {1.0000000000f, 1.0000000000f, 1.0000000000f, 1.0000000000f, 1.0000000000f,
+ 1.0000000000f, 1.0000000000f, 1.0000000000f, 1.0000000000f, 1.0000000000f,
+ 1.0000000000f, 1.0000000000f, 1.0000000000f, 1.0000000000f, 1.0000000000f,
+ 1.0000000000f, 1.0000000000f, 1.0000000000f, 1.0000000000f, 1.0000000000f,
+ 1.0000000000f, 1.0000000000f, 1.0000000000f, 1.0000000000f, 1.0000000000f,
+ 1.0000000000f, 1.0000000000f, 1.0000000000f, 1.0000000000f, 1.0000000000f,
+ 1.0000000000f},
+ {0.9369999766f, 0.9376808405f, 0.9382033348f, 0.9391169548f, 0.9406937957f,
+ 0.9433546066f, 0.9457064271f, 0.9487929940f, 0.9527334571f, 0.9575835466f,
+ 0.9632775784f, 0.9674328566f, 0.9717451334f, 0.9760690331f, 0.9802456498f,
+ 0.9841240048f, 0.9875818491f, 0.9905421734f, 0.9929783344f, 0.9949095249f,
+ 0.9963886738f, 0.9979170561f, 0.9988400936f, 0.9993716478f, 0.9996666908f,
+ 0.9998259544f, 0.9999424219f, 0.9999813437f, 0.9999940395f, 0.9999980927f,
+ 1.0000000000f},
+ {0.8411800265f, 0.8428127766f, 0.8440676332f, 0.8462653756f, 0.8500694633f,
+ 0.8565201163f, 0.8622540236f, 0.8698242903f, 0.8795616627f, 0.8916544318f,
+ 0.9059935808f, 0.9165460467f, 0.9275664687f, 0.9386759400f, 0.9494492412f,
+ 0.9594737887f, 0.9684119225f, 0.9760481715f, 0.9823079705f, 0.9872440100f,
+ 0.9910007119f, 0.9948507547f, 0.9971528649f, 0.9984666705f, 0.9991903901f,
+ 0.9995787144f, 0.9998613000f, 0.9999551177f, 0.9999856353f, 0.9999954104f,
+ 1.0000000000f},
+ {0.6009200215f, 0.6044946313f, 0.6072516441f, 0.6121006608f, 0.6205559969f,
+ 0.6350733042f, 0.6481682062f, 0.6657315493f, 0.6887807250f, 0.7181132436f,
+ 0.7538767457f, 0.7808354497f, 0.8095121980f, 0.8388824463f, 0.8677002788f,
+ 0.8946843147f, 0.9187452197f, 0.9391753078f, 0.9557289481f, 0.9685774446f,
+ 0.9781784415f, 0.9877888560f, 0.9933770895f, 0.9964889884f, 0.9981689453f,
+ 0.9990561008f, 0.9996924996f, 0.9999011159f, 0.9999684095f, 0.9999899864f,
+ 1.0000000000f},
+ {0.3676400185f, 0.3724882603f, 0.3762405813f, 0.3828677237f, 0.3945077062f,
+ 0.4147444665f, 0.4332729578f, 0.4585359693f, 0.4924084246f, 0.5366908908f,
+ 0.5924285054f, 0.6356533170f, 0.6826780438f, 0.7318063974f, 0.7807397842f,
+ 0.8269340992f, 0.8681276441f, 0.9028263092f, 0.9305254817f, 0.9516034126f,
+ 0.9670042396f, 0.9819965959f, 0.9904401302f, 0.9950164557f, 0.9974341393f,
+ 0.9986900091f, 0.9995777011f, 0.9998650551f, 0.9999570847f, 0.9999864101f,
+ 1.0000000000f},
+ {0.0000000317f, 0.0056233243f, 0.0099995006f, 0.0177799836f, 0.0316069759f,
+ 0.0561454296f, 0.0791834071f, 0.1115021780f, 0.1565355211f, 0.2184644639f,
+ 0.3015113473f, 0.3698741496f, 0.4480625093f, 0.5336171389f, 0.6219832897f,
+ 0.7071067691f, 0.7830305099f, 0.8457261920f, 0.8940022588f, 0.9290818572f,
+ 0.9534626007f, 0.9758449197f, 0.9876723289f, 0.9937641621f, 0.9968600869f,
+ 0.9984226227f, 0.9995003939f, 0.9998419285f, 0.9999499917f, 0.9999842048f,
+ 1.0000000000f},
+ {-0.5889999866f, -0.5853092074f, -0.5824112892f, -0.5772026181f,
+ -0.5677633882f, -0.5504089594f, -0.5333698392f, -0.5081486106f,
+ -0.4701685011f, -0.4117408693f, -0.3198074102f, -0.2298880965f,
+ -0.1080254018f, 0.0518490225f, 0.2462531030f, 0.4533210695f,
+ 0.6382039785f, 0.7765069604f, 0.8670309186f, 0.9218929410f,
+ 0.9540585279f, 0.9789677858f, 0.9901686311f, 0.9953197837f,
+ 0.9977401495f, 0.9988972545f, 0.9996611476f, 0.9998945594f,
+ 0.9999669790f, 0.9999896288f, 1.0000000000f},
+ {-0.9900000095f, -0.9898871779f, -0.9897980094f, -0.9896365404f,
+ -0.9893398881f, -0.9887800813f, -0.9882112741f, -0.9873316884f,
+ -0.9859125018f, -0.9834672213f, -0.9787774086f, -0.9727541804f,
+ -0.9607902765f, -0.9307383299f, -0.8111730814f, 0.0707106814f,
+ 0.8855584264f, 0.9730173349f, 0.9902969599f, 0.9957315326f,
+ 0.9978980422f, 0.9991779327f, 0.9996485710f, 0.9998415112f,
+ 0.9999260306f, 0.9999647141f, 0.9999893904f, 0.9999967217f,
+ 0.9999989867f, 0.9999997020f, 1.0000000000f}};
-const WORD32
- ixheaacd_mps_polyphase_filter_coeff_fix[10 * MAX_NUM_QMF_BANDS_SAC / 2] = {
- 0x00000000, 0x0055dba0, 0xffede50e, 0x005b5370, 0xffed978a, 0x006090c3,
- 0xffefc9b9, 0x0065fde5, 0xfff0065d, 0x006b47fa, 0xffeff6cb, 0x0070c8a4,
- 0xffef7b8b, 0x0075fdec, 0xffeedfa4, 0x007b3874, 0xffee1650, 0x00807993,
- 0xffed651e, 0x0085c217, 0xffecc31c, 0x008a7dd6, 0xffebe77b, 0x008f4bfc,
- 0xffeb50b3, 0x009424c5, 0xffea9193, 0x0098b855, 0xffe9ca76, 0x009d10bf,
- 0xffe940f4, 0x00a1039c, 0xffe88ba8, 0x00a520bb, 0xffe83a08, 0x00a8739d,
- 0xffe79e16, 0x00abe79d, 0xffe7746f, 0x00af374c, 0xffe6d466, 0x00b1978d,
- 0xffe6afee, 0x00b3d15b, 0xffe65416, 0x00b5c866, 0xffe681c6, 0x00b74c36,
- 0xffe66dd0, 0x00b8394b, 0xffe66fac, 0x00b8fe0d, 0xffe69424, 0x00b8c6b0,
- 0xffe6fed4, 0x00b85f70, 0xffe75361, 0x00b73aaf, 0xffe80415, 0x00b58c8c,
- 0xffe85b4b, 0x00b36acd, 0xffe954d1, 0x00b06b68, 0xffea353b, 0x00acbd2e,
- 0xffeb3849, 0x00a85e93, 0xffec8409, 0x00a3508f, 0xffedc419, 0x009da525,
- 0xffef2395, 0x0096dcc1, 0xfff0e7f0, 0x008f87aa, 0xfff294c4, 0x00872c62,
- 0xfff48701, 0x007e0392, 0xfff681d7, 0x007400b7, 0xfff91fca, 0x006928a0,
- 0xfffb42b1, 0x005d36de, 0xfffdfa25, 0x00504f40, 0x00007134, 0x00426f36,
- 0x00039608, 0x0033b926, 0x0006b1ce, 0x0023b989, 0x0009aa3e, 0x00131c75,
- 0x000d31b4, 0x0000e790, 0x0010bc63, 0xffee183b, 0x001471f7, 0xffda17f2,
- 0x0018703e, 0xffc4e365, 0x001c3549, 0xffaea5d6, 0x002064f7, 0xff975c02,
- 0x0024dd50, 0xff7ee3f2, 0x00293718, 0xff6542d1, 0x002d8e42, 0xff4aabc9,
- 0x00329ab6, 0xff2ef726, 0x003745f9, 0xff120d71, 0x003c1fa3, 0xfef3f6ac,
- 0x004103f4, 0xfed4bec3, 0x00465347, 0xfeb48d0d, 0x004b6c45, 0xfe933dc1,
- 0x0050b176, 0xfe70b8d1, 0x01b2e41c, 0x09015651, 0x01d78bfb, 0x08d3e41b,
- 0x01fd3ba0, 0x08a24899, 0x02244a24, 0x086b1eeb, 0x024bf7a1, 0x082f552e,
- 0x0274ba42, 0x07ee507b, 0x029e35b4, 0x07a8127c, 0x02c89900, 0x075ca90c,
- 0x02f3e48d, 0x070bbf58, 0x03201115, 0x06b559c3, 0x034d01f0, 0x06593911,
- 0x037ad437, 0x05f7fb90, 0x03a966bb, 0x0590a67d, 0x03d8afe6, 0x05237f9c,
- 0x04083fec, 0x04b0adcb, 0x043889c5, 0x0437fb0a, 0x04694101, 0x03b8f8db,
- 0x049aa82e, 0x03343533, 0x04cc2fce, 0x02a99097, 0x04fe20bd, 0x02186a91,
- 0x05303f87, 0x01816e05, 0x05626209, 0x00e42fa2, 0x05950122, 0x0040c496,
- 0x05c76fec, 0xff96db90, 0x05f9c050, 0xfee723c7, 0x062bf5eb, 0xfe310658,
- 0x065dd569, 0xfd7475d8, 0x068f8b44, 0xfcb1d740, 0x06c0f0c0, 0xfbe8f5be,
- 0x06f1825c, 0xfb19b7be, 0x0721bf21, 0xfa44a06a, 0x075112a1, 0xf96916f5,
- 0x077fedb2, 0xf887507c, 0x07ad8c26, 0xf79fa13b, 0x07da2b7f, 0xf6b1f3c3,
- 0x08061671, 0xf5be0fa9, 0x08303897, 0xf4c473c6, 0x08594887, 0xf3c4e887,
- 0x0880ffdc, 0xf2bf6ea5, 0x08a75da4, 0xf1b461ab, 0x08cb4e22, 0xf0a395a0,
- 0x08edfeaa, 0xef8d4d7c, 0x090ec1fc, 0xee71b2ff, 0x092d796f, 0xed50a31e,
- 0x0949eaac, 0xec2a3f60, 0x0963ed46, 0xeafee7f2, 0x097c1ee8, 0xe9cea84b,
- 0x099140a6, 0xe89971b7, 0x09a3e163, 0xe75f8bb8, 0x09b3d77f, 0xe620c476,
- 0x09c0e59e, 0xe4de0cb0, 0x09cab9f1, 0xe396a45e, 0x09d19ca8, 0xe24b8f67,
- 0x09d52709, 0xe0fc421f, 0x09d5560a, 0xdfa93ab5, 0x09d1fa22, 0xde529087,
- 0x09caeb0e, 0xdcf898fb, 0x09c018ce, 0xdb9b5b13, 0x09b18a1c, 0xda3b176b,
- 0x099ec3db, 0xd8d7f220, 0x09881dc5, 0xd7722f05, 0x096d0e21, 0xd60a46e6,
- 0x094d7ec2, 0xd49fd55f, 0x09299ead, 0xd3337b3e, 0x2e3a7532, 0x6d474e1d,
- 0x2faa221c, 0x6d41d963, 0x311af3a4, 0x6d32730f, 0x328cc6f0, 0x6d18520d,
- 0x33ff670e, 0x6cf4073e, 0x3572ec70, 0x6cc59baa, 0x36e69691, 0x6c8c4c7a,
- 0x385a49c3, 0x6c492216, 0x39ce0477, 0x6bfbdd97, 0x3b415115, 0x6ba4629e,
- 0x3cb41218, 0x6b42a863, 0x3e25b17e, 0x6ad73e8d, 0x3f962fb8, 0x6a619c5e,
- 0x41058bc5, 0x69e29784, 0x4272a385, 0x6959709d, 0x43de620a, 0x68c7269b,
- 0x4547daea, 0x682b39a3, 0x46aea856, 0x6785c24d, 0x4812f848, 0x66d76725,
- 0x4973fef1, 0x661fd6b7, 0x4ad237a2, 0x655f63f1, 0x4c2ca3df, 0x64964062,
- 0x4d83976c, 0x63c45243, 0x4ed62be2, 0x62ea6473, 0x5024d70e, 0x6207f21f,
- 0x516eefb9, 0x611d58a2, 0x52b449dd, 0x602b0c7f, 0x53f495a9, 0x5f30ff5f,
- 0x552f8ff6, 0x5e2f6366, 0x56654bdd, 0x5d26be9b, 0x579505f5, 0x5c16d0ae,
- 0x58befacd, 0x5b001db7, 0x59e2f69e, 0x59e2f69e, 0x5b001db7, 0x58befacd,
- 0x5c16d0ae, 0x579505f5, 0x5d26be9b, 0x56654bdd, 0x5e2f6366, 0x552f8ff6,
- 0x5f30ff5f, 0x53f495a9, 0x602b0c7f, 0x52b449dd, 0x611d58a2, 0x516eefb9,
- 0x6207f21f, 0x5024d70e, 0x62ea6473, 0x4ed62be2, 0x63c45243, 0x4d83976c,
- 0x64964062, 0x4c2ca3df, 0x655f63f1, 0x4ad237a2, 0x661fd6b7, 0x4973fef1,
- 0x66d76725, 0x4812f848, 0x6785c24d, 0x46aea856, 0x682b39a3, 0x4547daea,
- 0x68c7269b, 0x43de620a, 0x6959709d, 0x4272a385, 0x69e29784, 0x41058bc5,
- 0x6a619c5e, 0x3f962fb8, 0x6ad73e8d, 0x3e25b17e, 0x6b42a863, 0x3cb41218,
- 0x6ba4629e, 0x3b415115, 0x6bfbdd97, 0x39ce0477, 0x6c492216, 0x385a49c3,
- 0x6c8c4c7a, 0x36e69691, 0x6cc59baa, 0x3572ec70, 0x6cf4073e, 0x33ff670e,
- 0x6d18520d, 0x328cc6f0, 0x6d32730f, 0x311af3a4, 0x6d41d963, 0x2faa221c,
- 0xd1c58ace, 0x09015651, 0xd3337b3e, 0x09299ead, 0xd49fd55f, 0x094d7ec2,
- 0xd60a46e6, 0x096d0e21, 0xd7722f05, 0x09881dc5, 0xd8d7f220, 0x099ec3db,
- 0xda3b176b, 0x09b18a1c, 0xdb9b5b13, 0x09c018ce, 0xdcf898fb, 0x09caeb0e,
- 0xde529087, 0x09d1fa22, 0xdfa93ab5, 0x09d5560a, 0xe0fc421f, 0x09d52709,
- 0xe24b8f67, 0x09d19ca8, 0xe396a45e, 0x09cab9f1, 0xe4de0cb0, 0x09c0e59e,
- 0xe620c476, 0x09b3d77f, 0xe75f8bb8, 0x09a3e163, 0xe89971b7, 0x099140a6,
- 0xe9cea84b, 0x097c1ee8, 0xeafee7f2, 0x0963ed46, 0xec2a3f60, 0x0949eaac,
- 0xed50a31e, 0x092d796f, 0xee71b2ff, 0x090ec1fc, 0xef8d4d7c, 0x08edfeaa,
- 0xf0a395a0, 0x08cb4e22, 0xf1b461ab, 0x08a75da4, 0xf2bf6ea5, 0x0880ffdc,
- 0xf3c4e887, 0x08594887, 0xf4c473c6, 0x08303897, 0xf5be0fa9, 0x08061671,
- 0xf6b1f3c3, 0x07da2b7f, 0xf79fa13b, 0x07ad8c26, 0xf887507c, 0x077fedb2,
- 0xf96916f5, 0x075112a1, 0xfa44a06a, 0x0721bf21, 0xfb19b7be, 0x06f1825c,
- 0xfbe8f5be, 0x06c0f0c0, 0xfcb1d740, 0x068f8b44, 0xfd7475d8, 0x065dd569,
- 0xfe310658, 0x062bf5eb, 0xfee723c7, 0x05f9c050, 0xff96db90, 0x05c76fec,
- 0x0040c496, 0x05950122, 0x00e42fa2, 0x05626209, 0x01816e05, 0x05303f87,
- 0x02186a91, 0x04fe20bd, 0x02a99097, 0x04cc2fce, 0x03343533, 0x049aa82e,
- 0x03b8f8db, 0x04694101, 0x0437fb0a, 0x043889c5, 0x04b0adcb, 0x04083fec,
- 0x05237f9c, 0x03d8afe6, 0x0590a67d, 0x03a966bb, 0x05f7fb90, 0x037ad437,
- 0x06593911, 0x034d01f0, 0x06b559c3, 0x03201115, 0x070bbf58, 0x02f3e48d,
- 0x075ca90c, 0x02c89900, 0x07a8127c, 0x029e35b4, 0x07ee507b, 0x0274ba42,
- 0x082f552e, 0x024bf7a1, 0x086b1eeb, 0x02244a24, 0x08a24899, 0x01fd3ba0,
- 0x08d3e41b, 0x01d78bfb, 0xfe4d1be4, 0x0055dba0, 0xfe70b8d1, 0x0050b176,
- 0xfe933dc1, 0x004b6c45, 0xfeb48d0d, 0x00465347, 0xfed4bec3, 0x004103f4,
- 0xfef3f6ac, 0x003c1fa3, 0xff120d71, 0x003745f9, 0xff2ef726, 0x00329ab6,
- 0xff4aabc9, 0x002d8e42, 0xff6542d1, 0x00293718, 0xff7ee3f2, 0x0024dd50,
- 0xff975c02, 0x002064f7, 0xffaea5d6, 0x001c3549, 0xffc4e365, 0x0018703e,
- 0xffda17f2, 0x001471f7, 0xffee183b, 0x0010bc63, 0x0000e790, 0x000d31b4,
- 0x00131c75, 0x0009aa3e, 0x0023b989, 0x0006b1ce, 0x0033b926, 0x00039608,
- 0x00426f36, 0x00007134, 0x00504f40, 0xfffdfa25, 0x005d36de, 0xfffb42b1,
- 0x006928a0, 0xfff91fca, 0x007400b7, 0xfff681d7, 0x007e0392, 0xfff48701,
- 0x00872c62, 0xfff294c4, 0x008f87aa, 0xfff0e7f0, 0x0096dcc1, 0xffef2395,
- 0x009da525, 0xffedc419, 0x00a3508f, 0xffec8409, 0x00a85e93, 0xffeb3849,
- 0x00acbd2e, 0xffea353b, 0x00b06b68, 0xffe954d1, 0x00b36acd, 0xffe85b4b,
- 0x00b58c8c, 0xffe80415, 0x00b73aaf, 0xffe75361, 0x00b85f70, 0xffe6fed4,
- 0x00b8c6b0, 0xffe69424, 0x00b8fe0d, 0xffe66fac, 0x00b8394b, 0xffe66dd0,
- 0x00b74c36, 0xffe681c6, 0x00b5c866, 0xffe65416, 0x00b3d15b, 0xffe6afee,
- 0x00b1978d, 0xffe6d466, 0x00af374c, 0xffe7746f, 0x00abe79d, 0xffe79e16,
- 0x00a8739d, 0xffe83a08, 0x00a520bb, 0xffe88ba8, 0x00a1039c, 0xffe940f4,
- 0x009d10bf, 0xffe9ca76, 0x0098b855, 0xffea9193, 0x009424c5, 0xffeb50b3,
- 0x008f4bfc, 0xffebe77b, 0x008a7dd6, 0xffecc31c, 0x0085c217, 0xffed651e,
- 0x00807993, 0xffee1650, 0x007b3874, 0xffeedfa4, 0x0075fdec, 0xffef7b8b,
- 0x0070c8a4, 0xffeff6cb, 0x006b47fa, 0xfff0065d, 0x0065fde5, 0xffefc9b9,
- 0x006090c3, 0xffed978a, 0x005b5370, 0xffede50e};
+const FLOAT32
+ ixheaacd_mps_polyphase_filter_coeff[10 * MAX_NUM_QMF_BANDS_SAC / 2] = {
+ 0.000000f, 0.002620f, -0.000553f, 0.002787f, -0.000562f, 0.002947f,
+ -0.000495f, 0.003113f, -0.000488f, 0.003274f, -0.000489f, 0.003442f,
+ -0.000504f, 0.003601f, -0.000523f, 0.003760f, -0.000547f, 0.003921f,
+ -0.000568f, 0.004082f, -0.000587f, 0.004226f, -0.000613f, 0.004373f,
+ -0.000631f, 0.004521f, -0.000654f, 0.004661f, -0.000678f, 0.004793f,
+ -0.000694f, 0.004914f, -0.000716f, 0.005039f, -0.000726f, 0.005141f,
+ -0.000744f, 0.005246f, -0.000749f, 0.005347f, -0.000768f, 0.005420f,
+ -0.000772f, 0.005488f, -0.000783f, 0.005548f, -0.000778f, 0.005594f,
+ -0.000780f, 0.005622f, -0.000780f, 0.005646f, -0.000776f, 0.005639f,
+ -0.000763f, 0.005627f, -0.000753f, 0.005592f, -0.000732f, 0.005540f,
+ -0.000722f, 0.005475f, -0.000692f, 0.005384f, -0.000665f, 0.005272f,
+ -0.000634f, 0.005138f, -0.000595f, 0.004984f, -0.000556f, 0.004811f,
+ -0.000515f, 0.004604f, -0.000461f, 0.004380f, -0.000410f, 0.004125f,
+ -0.000350f, 0.003846f, -0.000290f, 0.003540f, -0.000210f, 0.003209f,
+ -0.000145f, 0.002845f, -0.000062f, 0.002451f, 0.000013f, 0.002027f,
+ 0.000109f, 0.001578f, 0.000204f, 0.001090f, 0.000295f, 0.000583f,
+ 0.000403f, 0.000028f, 0.000511f, -0.000546f, 0.000624f, -0.001157f,
+ 0.000746f, -0.001804f, 0.000861f, -0.002483f, 0.000989f, -0.003193f,
+ 0.001125f, -0.003940f, 0.001258f, -0.004722f, 0.001390f, -0.005534f,
+ 0.001544f, -0.006379f, 0.001687f, -0.007262f, 0.001835f, -0.008180f,
+ 0.001984f, -0.009133f, 0.002146f, -0.010115f, 0.002302f, -0.011132f,
+ 0.002463f, -0.012185f, 0.013272f, 0.070353f, 0.014390f, 0.068966f,
+ 0.015541f, 0.067453f, 0.016732f, 0.065769f, 0.017943f, 0.063944f,
+ 0.019187f, 0.061960f, 0.020453f, 0.059817f, 0.021747f, 0.057515f,
+ 0.023068f, 0.055046f, 0.024416f, 0.052409f, 0.025788f, 0.049598f,
+ 0.027186f, 0.046630f, 0.028607f, 0.043477f, 0.030050f, 0.040146f,
+ 0.031502f, 0.036642f, 0.032975f, 0.032958f, 0.034462f, 0.029082f,
+ 0.035970f, 0.025031f, 0.037481f, 0.020800f, 0.039005f, 0.016370f,
+ 0.040535f, 0.011762f, 0.042065f, 0.006964f, 0.043610f, 0.001977f,
+ 0.045149f, -0.003209f, 0.046684f, -0.008571f, 0.048217f, -0.014129f,
+ 0.049739f, -0.019883f, 0.051256f, -0.025823f, 0.052763f, -0.031953f,
+ 0.054245f, -0.038278f, 0.055717f, -0.044781f, 0.057162f, -0.051480f,
+ 0.058592f, -0.058371f, 0.059984f, -0.065441f, 0.061346f, -0.072694f,
+ 0.062686f, -0.080137f, 0.063972f, -0.087755f, 0.065225f, -0.095553f,
+ 0.066437f, -0.103533f, 0.067608f, -0.111683f, 0.068704f, -0.120008f,
+ 0.069763f, -0.128500f, 0.070763f, -0.137155f, 0.071700f, -0.145977f,
+ 0.072568f, -0.154961f, 0.073362f, -0.164096f, 0.074100f, -0.173381f,
+ 0.074745f, -0.182817f, 0.075314f, -0.192397f, 0.075801f, -0.202125f,
+ 0.076199f, -0.211974f, 0.076499f, -0.221965f, 0.076709f, -0.232069f,
+ 0.076817f, -0.242302f, 0.076823f, -0.252648f, 0.076720f, -0.263105f,
+ 0.076505f, -0.273663f, 0.076175f, -0.284321f, 0.075731f, -0.295072f,
+ 0.075158f, -0.305910f, 0.074466f, -0.316828f, 0.073641f, -0.327811f,
+ 0.072677f, -0.338872f, 0.071583f, -0.349991f, 0.361159f, 0.853739f,
+ 0.372380f, 0.853572f, 0.383635f, 0.853102f, 0.394921f, 0.852305f,
+ 0.406232f, 0.851197f, 0.417570f, 0.849780f, 0.428912f, 0.848032f,
+ 0.440255f, 0.845982f, 0.451600f, 0.843624f, 0.462931f, 0.840954f,
+ 0.474245f, 0.837972f, 0.485525f, 0.834694f, 0.496771f, 0.831104f,
+ 0.507982f, 0.827228f, 0.519123f, 0.823042f, 0.530224f, 0.818578f,
+ 0.541255f, 0.813819f, 0.552205f, 0.808770f, 0.563079f, 0.803449f,
+ 0.573852f, 0.797847f, 0.584540f, 0.791974f, 0.595112f, 0.785835f,
+ 0.605578f, 0.779429f, 0.615911f, 0.772778f, 0.626124f, 0.765867f,
+ 0.636198f, 0.758708f, 0.646127f, 0.751314f, 0.655902f, 0.743683f,
+ 0.665514f, 0.735821f, 0.674966f, 0.727745f, 0.684235f, 0.719446f,
+ 0.693328f, 0.710941f, 0.702239f, 0.702239f, 0.710941f, 0.693328f,
+ 0.719446f, 0.684235f, 0.727745f, 0.674966f, 0.735821f, 0.665514f,
+ 0.743683f, 0.655902f, 0.751314f, 0.646127f, 0.758708f, 0.636198f,
+ 0.765867f, 0.626124f, 0.772778f, 0.615911f, 0.779429f, 0.605578f,
+ 0.785835f, 0.595112f, 0.791974f, 0.584540f, 0.797847f, 0.573852f,
+ 0.803449f, 0.563079f, 0.808770f, 0.552205f, 0.813819f, 0.541255f,
+ 0.818578f, 0.530224f, 0.823042f, 0.519123f, 0.827228f, 0.507982f,
+ 0.831104f, 0.496771f, 0.834694f, 0.485525f, 0.837972f, 0.474245f,
+ 0.840954f, 0.462931f, 0.843624f, 0.451600f, 0.845982f, 0.440255f,
+ 0.848032f, 0.428912f, 0.849780f, 0.417570f, 0.851197f, 0.406232f,
+ 0.852305f, 0.394921f, 0.853102f, 0.383635f, 0.853572f, 0.372380f,
+ -0.361159f, 0.070353f, -0.349991f, 0.071583f, -0.338872f, 0.072677f,
+ -0.327811f, 0.073641f, -0.316828f, 0.074466f, -0.305910f, 0.075158f,
+ -0.295072f, 0.075731f, -0.284321f, 0.076175f, -0.273663f, 0.076505f,
+ -0.263105f, 0.076720f, -0.252648f, 0.076823f, -0.242302f, 0.076817f,
+ -0.232069f, 0.076709f, -0.221965f, 0.076499f, -0.211974f, 0.076199f,
+ -0.202125f, 0.075801f, -0.192397f, 0.075314f, -0.182817f, 0.074745f,
+ -0.173381f, 0.074100f, -0.164096f, 0.073362f, -0.154961f, 0.072568f,
+ -0.145977f, 0.071700f, -0.137155f, 0.070763f, -0.128500f, 0.069763f,
+ -0.120008f, 0.068704f, -0.111683f, 0.067608f, -0.103533f, 0.066437f,
+ -0.095553f, 0.065225f, -0.087755f, 0.063972f, -0.080137f, 0.062686f,
+ -0.072694f, 0.061346f, -0.065441f, 0.059984f, -0.058371f, 0.058592f,
+ -0.051480f, 0.057162f, -0.044781f, 0.055717f, -0.038278f, 0.054245f,
+ -0.031953f, 0.052763f, -0.025823f, 0.051256f, -0.019883f, 0.049739f,
+ -0.014129f, 0.048217f, -0.008571f, 0.046684f, -0.003209f, 0.045149f,
+ 0.001977f, 0.043610f, 0.006964f, 0.042065f, 0.011762f, 0.040535f,
+ 0.016370f, 0.039005f, 0.020800f, 0.037481f, 0.025031f, 0.035970f,
+ 0.029082f, 0.034462f, 0.032958f, 0.032975f, 0.036642f, 0.031502f,
+ 0.040146f, 0.030050f, 0.043477f, 0.028607f, 0.046630f, 0.027186f,
+ 0.049598f, 0.025788f, 0.052409f, 0.024416f, 0.055046f, 0.023068f,
+ 0.057515f, 0.021747f, 0.059817f, 0.020453f, 0.061960f, 0.019187f,
+ 0.063944f, 0.017943f, 0.065769f, 0.016732f, 0.067453f, 0.015541f,
+ 0.068966f, 0.014390f, -0.013272f, 0.002620f, -0.012185f, 0.002463f,
+ -0.011132f, 0.002302f, -0.010115f, 0.002146f, -0.009133f, 0.001984f,
+ -0.008180f, 0.001835f, -0.007262f, 0.001687f, -0.006379f, 0.001544f,
+ -0.005534f, 0.001390f, -0.004722f, 0.001258f, -0.003940f, 0.001125f,
+ -0.003193f, 0.000989f, -0.002483f, 0.000861f, -0.001804f, 0.000746f,
+ -0.001157f, 0.000624f, -0.000546f, 0.000511f, 0.000028f, 0.000403f,
+ 0.000583f, 0.000295f, 0.001090f, 0.000204f, 0.001578f, 0.000109f,
+ 0.002027f, 0.000013f, 0.002451f, -0.000062f, 0.002845f, -0.000145f,
+ 0.003209f, -0.000210f, 0.003540f, -0.000290f, 0.003846f, -0.000350f,
+ 0.004125f, -0.000410f, 0.004380f, -0.000461f, 0.004604f, -0.000515f,
+ 0.004811f, -0.000556f, 0.004984f, -0.000595f, 0.005138f, -0.000634f,
+ 0.005272f, -0.000665f, 0.005384f, -0.000692f, 0.005475f, -0.000722f,
+ 0.005540f, -0.000732f, 0.005592f, -0.000753f, 0.005627f, -0.000763f,
+ 0.005639f, -0.000776f, 0.005646f, -0.000780f, 0.005622f, -0.000780f,
+ 0.005594f, -0.000778f, 0.005548f, -0.000783f, 0.005488f, -0.000772f,
+ 0.005420f, -0.000768f, 0.005347f, -0.000749f, 0.005246f, -0.000744f,
+ 0.005141f, -0.000726f, 0.005039f, -0.000716f, 0.004914f, -0.000694f,
+ 0.004793f, -0.000678f, 0.004661f, -0.000654f, 0.004521f, -0.000631f,
+ 0.004373f, -0.000613f, 0.004226f, -0.000587f, 0.004082f, -0.000568f,
+ 0.003921f, -0.000547f, 0.003760f, -0.000523f, 0.003601f, -0.000504f,
+ 0.003442f, -0.000489f, 0.003274f, -0.000488f, 0.003113f, -0.000495f,
+ 0.002947f, -0.000562f, 0.002787f, -0.000553f};
-const WORD32 ixheaacd_mps_pre_re[64] = {
- 0x01fff621, 0x01ffa72e, 0x01ff0956, 0x01fe1caf, 0x01fce15f, 0x01fb5797,
- 0x01f97f92, 0x01f7599a, 0x01f4e603, 0x01f2252f, 0x01ef178a, 0x01ebbd8c,
- 0x01e817ba, 0x01e426a4, 0x01dfeae6, 0x01db6526, 0x01d69617, 0x01d17e77,
- 0x01cc1f0f, 0x01c678b3, 0x01c08c42, 0x01ba5aa6, 0x01b3e4d3, 0x01ad2bc9,
- 0x01a63091, 0x019ef43e, 0x019777ee, 0x018fbcc9, 0x0187c400, 0x017f8ecd,
- 0x01771e75, 0x016e7444, 0x01659191, 0x015c77bb, 0x01532828, 0x0149a449,
- 0x013fed94, 0x0136058a, 0x012bedb1, 0x0121a798, 0x011734d5, 0x010c9704,
- 0x0101cfc7, 0x00f6e0c9, 0x00ebcbb9, 0x00e0924d, 0x00d53640, 0x00c9b952,
- 0x00be1d48, 0x00b263ed, 0x00a68f10, 0x009aa084, 0x008e9a20, 0x00827dbf,
- 0x00764d3e, 0x006a0a7f, 0x005db766, 0x005155d9, 0x0044e7c1, 0x00386f0a,
- 0x002bed9e, 0x001f656d, 0x0012d864, 0x00064873};
+const FLOAT32 ixheaacd_mps_post_twid[30] = {
+ 0.998795f, 0.049068f, 0.995185f, 0.098017f, 0.989177f, 0.146730f,
+ 0.980785f, 0.195090f, 0.970031f, 0.242980f, 0.956940f, 0.290285f,
+ 0.941544f, 0.336890f, 0.923880f, 0.382683f, 0.903989f, 0.427555f,
+ 0.881921f, 0.471397f, 0.857729f, 0.514103f, 0.831470f, 0.555570f,
+ 0.803208f, 0.595699f, 0.773010f, 0.634393f, 0.740951f, 0.671559f};
-const WORD32 ixheaacd_mps_pre_im[64] = {
- 0x00064874, 0x0012d865, 0x001f656e, 0x002beda0, 0x00386f0b, 0x0044e7c3,
- 0x005155da, 0x005db767, 0x006a0a80, 0x00764d3f, 0x00827dc0, 0x008e9a22,
- 0x009aa086, 0x00a68f12, 0x00b263ef, 0x00be1d49, 0x00c9b953, 0x00d53641,
- 0x00e0924f, 0x00ebcbbb, 0x00f6e0cb, 0x0101cfc8, 0x010c9705, 0x011734d6,
- 0x0121a79a, 0x012bedb2, 0x0136058b, 0x013fed95, 0x0149a44a, 0x01532829,
- 0x015c77bc, 0x01659192, 0x016e7445, 0x01771e76, 0x017f8ece, 0x0187c401,
- 0x018fbcca, 0x019777ef, 0x019ef43f, 0x01a63092, 0x01ad2bca, 0x01b3e4d4,
- 0x01ba5aa6, 0x01c08c42, 0x01c678b3, 0x01cc1f0f, 0x01d17e77, 0x01d69617,
- 0x01db6526, 0x01dfeae6, 0x01e426a5, 0x01e817bb, 0x01ebbd8c, 0x01ef178a,
- 0x01f2252f, 0x01f4e603, 0x01f7599a, 0x01f97f92, 0x01fb5797, 0x01fce15f,
- 0x01fe1caf, 0x01ff0956, 0x01ffa72f, 0x01fff621};
+const FLOAT32 ixheaacd_mps_pre_twid[64] = {
+ 0.015624f, 0.000192f, 0.015614f, 0.000575f, 0.015596f, 0.000958f, 0.015567f,
+ 0.001341f, 0.015530f, 0.001722f, 0.015483f, 0.002103f, 0.015427f, 0.002482f,
+ 0.015361f, 0.002860f, 0.015286f, 0.003236f, 0.015202f, 0.003610f, 0.015109f,
+ 0.003982f, 0.015007f, 0.004352f, 0.014895f, 0.004719f, 0.014775f, 0.005083f,
+ 0.014646f, 0.005444f, 0.014508f, 0.005802f, 0.014361f, 0.006156f, 0.014206f,
+ 0.006507f, 0.014042f, 0.006853f, 0.013869f, 0.007196f, 0.013689f, 0.007534f,
+ 0.013500f, 0.007868f, 0.013302f, 0.008197f, 0.013097f, 0.008521f, 0.012884f,
+ 0.008840f, 0.012663f, 0.009153f, 0.012435f, 0.009461f, 0.012199f, 0.009763f,
+ 0.011956f, 0.010060f, 0.011705f, 0.010350f, 0.011448f, 0.010634f, 0.011183f,
+ 0.010912f};
-const WORD32 ixheaacd_mps_post_re[128] = {
- 0x7fffffff, 0x7ff62182, 0x7fd8878d, 0x7fa736b3, 0x7f62368e, 0x7f0991c2,
- 0x7e9d55fa, 0x7e1d93e8, 0x7d8a5f3d, 0x7ce3ceae, 0x7c29fbea, 0x7b5d0399,
- 0x7a7d0555, 0x798a23ab, 0x7884840c, 0x776c4ed3, 0x7641af33, 0x7504d33b,
- 0x73b5ebc5, 0x72552c78, 0x70e2cbb8, 0x6f5f02a2, 0x6dca0d03, 0x6c24294e,
- 0x6a6d9890, 0x68a69e6b, 0x66cf8109, 0x64e8890d, 0x62f20192, 0x60ec3814,
- 0x5ed77c6c, 0x5cb420c0, 0x5a827978, 0x5842dd31, 0x55f5a4ad, 0x539b2ac8,
- 0x5133cc6b, 0x4ebfe879, 0x4c3fdfc6, 0x49b41504, 0x471cecb5, 0x447acd1d,
- 0x41ce1e2f, 0x3f174981, 0x3c56ba37, 0x398cdcf7, 0x36ba1fd6, 0x33def248,
- 0x30fbc50c, 0x2e110a1e, 0x2b1f34a6, 0x2826b8e1, 0x25280c14, 0x2223a47a,
- 0x1f19f92e, 0x1c0b821b, 0x18f8b7eb, 0x15e213f2, 0x12c8101a, 0x0fab26d5,
- 0x0c8bd306, 0x096a8ff0, 0x0647d921, 0x03242a62, 0xffffffa3, 0xfcdbd4e2,
- 0xf9b82624, 0xf6956f55, 0xf3742c3f, 0xf054d871, 0xed37ef2c, 0xea1deb55,
- 0xe707475d, 0xe3f47d2e, 0xe0e6061c, 0xdddc5ad1, 0xdad7f338, 0xd7d9466d,
- 0xd4e0caa9, 0xd1eef532, 0xcf043a47, 0xcc210d0d, 0xc945df80, 0xc6732261,
- 0xc3a94524, 0xc0e8b5dc, 0xbe31e130, 0xbb853244, 0xb8e312ae, 0xb64bea62,
- 0xb3c01fa3, 0xb14016f3, 0xaecc3304, 0xac64d4aa, 0xaa0a5ac8, 0xa7bd2247,
- 0xa57d8603, 0xa34bdebf, 0xa1288316, 0x9f13c772, 0x9d0dfdf7, 0x9b17767f,
- 0x99307e88, 0x97596128, 0x95926708, 0x93dbd64e, 0x9235f29c, 0x90a0fd01,
- 0x8f1d33f0, 0x8daad334, 0x8c4a13eb, 0x8afb2c79, 0x89be5085, 0x8893b0ea,
- 0x877b7bb4, 0x8675dc1a, 0x8582fa74, 0x84a2fc35, 0x83d603e8, 0x831c3129,
- 0x8275a09e, 0x81e26bf8, 0x8162a9ea, 0x80f66e27, 0x809dc95f, 0x8058c93f,
- 0x8027786a, 0x8009de7a};
+const FLOAT32 ixheaacd_ia_mps_hyb_filter_coeff_8[QMF_HYBRID_FILT_ORDER] = {
+ 0.007461f, 0.022704f, 0.045469f, 0.072661f, 0.098851f, 0.117937f, 0.125000f,
+ 0.117937f, 0.098851f, 0.072661f, 0.045469f, 0.022704f, 0.007462f};
-const WORD32 ixheaacd_mps_post_im[128] = {
- 0x00000000, 0x03242ac0, 0x0647d97f, 0x096a904d, 0x0c8bd363, 0x0fab2732,
- 0x12c81077, 0x15e2144e, 0x18f8b847, 0x1c0b8277, 0x1f19f989, 0x2223a4d4,
- 0x25280c6e, 0x2826b93a, 0x2b1f34fe, 0x2e110a76, 0x30fbc563, 0x33def29e,
- 0x36ba202b, 0x398cdd4b, 0x3c56ba89, 0x3f1749d2, 0x41ce1e80, 0x447acd6c,
- 0x471ced03, 0x49b41551, 0x4c3fe012, 0x4ebfe8c3, 0x5133ccb3, 0x539b2b0f,
- 0x55f5a4f2, 0x5842dd75, 0x5a8279bb, 0x5cb42101, 0x5ed77cab, 0x60ec3851,
- 0x62f201cd, 0x64e88947, 0x66cf8141, 0x68a69ea2, 0x6a6d98c4, 0x6c242980,
- 0x6dca0d34, 0x6f5f02d0, 0x70e2cbe4, 0x72552ca2, 0x73b5ebed, 0x7504d361,
- 0x7641af57, 0x776c4ef5, 0x7884842c, 0x798a23c8, 0x7a7d0571, 0x7b5d03b2,
- 0x7c29fc01, 0x7ce3cec3, 0x7d8a5f4f, 0x7e1d93f8, 0x7e9d5608, 0x7f0991ce,
- 0x7f623697, 0x7fa736ba, 0x7fd88792, 0x7ff62184, 0x7fffffff, 0x7ff6217f,
- 0x7fd88789, 0x7fa736ac, 0x7f623685, 0x7f0991b7, 0x7e9d55ed, 0x7e1d93d7,
- 0x7d8a5f2b, 0x7ce3ce9a, 0x7c29fbd3, 0x7b5d0380, 0x7a7d053a, 0x798a238d,
- 0x788483ed, 0x776c4eb1, 0x7641af0f, 0x7504d315, 0x73b5eb9d, 0x72552c4e,
- 0x70e2cb8b, 0x6f5f0274, 0x6dca0cd3, 0x6c24291c, 0x6a6d985c, 0x68a69e35,
- 0x66cf80d1, 0x64e888d4, 0x62f20156, 0x60ec37d6, 0x5ed77c2d, 0x5cb4207f,
- 0x5a827936, 0x5842dced, 0x55f5a467, 0x539b2a81, 0x5133cc22, 0x4ebfe82f,
- 0x4c3fdf7b, 0x49b414b7, 0x471cec67, 0x447accce, 0x41ce1ddf, 0x3f17492f,
- 0x3c56b9e4, 0x398cdca3, 0x36ba1f81, 0x33def1f2, 0x30fbc4b5, 0x2e1109c7,
- 0x2b1f344d, 0x2826b888, 0x25280bba, 0x2223a420, 0x1f19f8d3, 0x1c0b81c0,
- 0x18f8b78f, 0x15e21395, 0x12c80fbd, 0x0fab2678, 0x0c8bd2a9, 0x096a8f92,
- 0x0647d8c3, 0x03242a04};
+const FLOAT32 ixheaacd_mps_hyb_filter_coeff_2[QMF_HYBRID_FILT_ORDER] = {
+ 0.000000f, 0.018995f, 0.000000f, -0.072931f, 0.000000f,
+ 0.305966f, 0.500000f, 0.305966f, 0.000000f, -0.072931f,
+ 0.000000f, 0.018995f, 0.000000f};
-const WORD32 ixheaacd_ia_mps_hyb_filter_coeff_8[QMF_HYBRID_FILT_ORDER] = {
- 8011005, 24378459, 48821601, 78019304, 106140545, 126634002, 134217728,
- 126634002, 106140545, 78019304, 48821601, 24378459, 8011805};
-
-const WORD32 ixheaacd_mps_hyb_filter_coeff_2[QMF_HYBRID_FILT_ORDER] = {
- 0, 20395592, 0, -78309485, 0, 328528819, 536870911,
- 328528819, 0, -78309485, 0, 20395592, 0};
-
-const WORD32 ixheaacd_cosine[8][13] = {
- {
- -759250175, -410903263, -46, 410903167, 759250111, 992008063,
- 1073741823, 992008063, 759250111, 410903167, -46, -410903263,
- -759250175,
- },
- {
- 759249983, 992008191, 140, -992008063, -759250175, 410903167,
- 1073741823, 410903167, -759250175, -992008063, 140, 992008191,
- 759249983,
- },
- {
- 759250367, -992007999, -234, 992008191, -759250047, -410903263,
- 1073741823, -410903263, -759250047, 992008191, -234, -992007999,
- 759250367,
- },
- {
- -759249791, 410902815, 328, -410903423, 759250239, -992008127,
- 1073741823, -992008127, 759250239, -410903423, 328, 410902815,
- -759249791,
- },
- {
- -759250559, 410903679, -422, -410902911, 759249983, -992008063,
- 1073741823, -992008063, 759249983, -410902911, -422, 410903679,
- -759250559,
- },
- {
- 759249599, -992008319, 516, 992007935, -759250303, -410903071,
- 1073741823, -410903071, -759250303, 992007935, 516, -992008319,
- 759249599,
- },
- {
- 759250751, 992007807, -610, -992008255, -759249919, 410903359,
- 1073741823, 410903359, -759249919, -992008255, -610, 992007807,
- 759250751,
- },
- {-759249407, -410902399, 704, 410903679, 759250367, 992008191, 1073741823,
- 992008191, 759250367, 410903679, 704, -410902399, -759249407}};
+const FLOAT32 ixheaacd_sine[8][8] = {
+ {0.000000f, -0.382683f, -0.707107f, -0.923880f, -1.000000f, -0.923880f,
+ -0.707107f, -0.382683f},
+ {0.000000f, -0.923880f, -0.707107f, 0.382684f, 1.000000f, 0.382683f,
+ -0.707107f, -0.923880f},
+ {0.000000f, -0.923880f, 0.707107f, 0.382683f, -1.000000f, 0.382684f,
+ 0.707107f, -0.923880f},
+ {0.000000f, -0.382683f, 0.707107f, -0.923879f, 1.000000f, -0.923880f,
+ 0.707107f, -0.382683f},
+ {0.000000f, 0.382684f, -0.707107f, 0.923880f, -1.000000f, 0.923879f,
+ -0.707106f, 0.382684f},
+ {0.000000f, 0.923880f, -0.707107f, -0.382684f, 1.000000f, -0.382683f,
+ -0.707107f, 0.923880f},
+ {0.000000f, 0.923880f, 0.707107f, -0.382683f, -1.000000f, -0.382684f,
+ 0.707106f, 0.923880f},
+ {0.000000f, 0.382683f, 0.707107f, 0.923879f, 1.000000f, 0.923880f,
+ 0.707107f, 0.382683f}};
-const WORD32 ixheaacd_sine[8][13] = {
- {
- 759250047, 992008063, 1073741823, 992008127, 759250111, 410903231, 0,
- -410903231, -759250111, -992008127, -1073741823, -992008063, -759250047,
- },
- {
- 759250303, -410903039, -1073741823, -410903295, 759250047, 992008127, 0,
- -992008127, -759250047, 410903295, 1073741823, 410903039, -759250303,
- },
- {
- -759249855, -410903487, 1073741823, -410903039, -759250175, 992008063,
- 0, -992008063, 759250175, 410903039, -1073741823, 410903487, 759249855,
- },
- {
- -759250495, 992008255, -1073741823, 992007999, -759249983, 410903135, 0,
- -410903135, 759249983, -992007999, 1073741823, -992008255, 759250495,
- },
- {
- 759249663, -992007871, 1073741823, -992008191, 759250303, -410903295, 0,
- 410903295, -759250303, 992008191, -1073741823, 992007871, -759249663,
- },
- {
- 759250687, 410902623, -1073741823, 410903551, 759249919, -992008127, 0,
- 992008127, -759249919, -410903551, 1073741823, -410902623, -759250687,
- },
- {
- -759249471, 410903903, 1073741823, 410902783, -759250367, -992008063, 0,
- 992008063, 759250367, -410902783, -1073741823, -410903903, 759249471,
- },
- {-759250879, -992008447, -1073741823, -992007871, -759249855, -410903039, 0,
- 410903039, 759249855, 992007871, 1073741823, 992008447, 759250879}};
+const FLOAT32 ixheaacd_cosine[8][8] = {
+ {1.000000f, 0.923880f, 0.707107f, 0.382683f, -46.000000f, -0.382683f,
+ -0.707107f, -0.923880f},
+ {1.000000f, 0.382683f, -0.707107f, -0.923880f, 140.000000f, 0.923880f,
+ 0.707107f, -0.382683f},
+ {1.000000f, -0.382683f, -0.707107f, 0.923880f, -234.000000f, -0.923879f,
+ 0.707107f, 0.382683f},
+ {1.000000f, -0.923880f, 0.707107f, -0.382684f, 328.000000f, 0.382683f,
+ -0.707106f, 0.923880f},
+ {1.000000f, -0.923880f, 0.707107f, -0.382683f, -422.000000f, 0.382684f,
+ -0.707107f, 0.923880f},
+ {1.000000f, -0.382683f, -0.707107f, 0.923879f, 516.000000f, -0.923880f,
+ 0.707106f, 0.382683f},
+ {1.000000f, 0.382684f, -0.707107f, -0.923880f, -610.000000f, 0.923879f,
+ 0.707107f, -0.382684f},
+ {1.000000f, 0.923880f, 0.707107f, 0.382684f, 704.000000f, -0.382683f,
+ -0.707106f, -0.923880f}};
-const WORD32 ixheaacd_cosine2[2][13] = {
- {
- 1073741823, 1073741823, 1073741823, 1073741823, 1073741823, 1073741823,
- 1073741823, 1073741823, 1073741823, 1073741823, 1073741823, 1073741823,
- 1073741823,
- },
- {
- 1073741823, -1073741823, 1073741823, -1073741823, 1073741823,
- -1073741823, 1073741823, -1073741823, 1073741823, -1073741823,
- 1073741823, -1073741823, 1073741823,
- },
-};
+const WORD32 ixheaacd_mps_gain_set_indx[29] = {
+ 1, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ 17, 18, 19, 21, 23, 25, 27, 30, 33, 37, 42, 48, 55, 70};
diff --git a/decoder/ixheaacd_mps_smoothing.c b/decoder/ixheaacd_mps_smoothing.c
index f4917a4..38cdc3c 100644
--- a/decoder/ixheaacd_mps_smoothing.c
+++ b/decoder/ixheaacd_mps_smoothing.c
@@ -32,18 +32,20 @@
VOID ixheaacd_mps_pre_matrix_mix_matrix_smoothing(
ia_mps_dec_state_struct *self) {
int smooth_band;
- int delta, one_minus_delta;
-
+ FLOAT32 delta, one_minus_delta;
+#ifndef MULT
+#define MULT(a, b) (a * b)
+#endif
int ps = 0, pb, row, col;
int res_bands = 0;
int *p_smoothing_data;
-
+ self->pre_mix_req = 0;
if (self->residual_coding) res_bands = self->max_res_bands;
p_smoothing_data = &self->smoothing_data[ps][res_bands];
delta = self->param_slot_diff[ps] * self->inv_smoothing_time[ps];
- one_minus_delta = 1073741824 - delta;
+ one_minus_delta = 1.0f - delta;
for (pb = res_bands; pb < self->bs_param_bands; pb++) {
smooth_band = *p_smoothing_data++;
@@ -51,43 +53,32 @@ VOID ixheaacd_mps_pre_matrix_mix_matrix_smoothing(
for (row = 0; row < MAX_M_OUTPUT; row++) {
for (col = 0; col < MAX_M_INPUT; col++) {
self->m1_param_re[ps][pb][row][col] =
- (ixheaacd_mult32(delta, self->m1_param_re[ps][pb][row][col]) +
- ixheaacd_mult32(one_minus_delta,
- self->m1_param_re_prev[pb][row][col]))
- << 2;
+ (MULT(delta, self->m1_param_re[ps][pb][row][col]) +
+ MULT(one_minus_delta, self->m1_param_re_prev[pb][row][col]));
self->m1_param_im[ps][pb][row][col] =
- (ixheaacd_mult32(delta, self->m1_param_im[ps][pb][row][col]) +
- ixheaacd_mult32(one_minus_delta,
- self->m1_param_im_prev[pb][row][col]))
- << 2;
+ (MULT(delta, self->m1_param_im[ps][pb][row][col]) +
+ MULT(one_minus_delta, self->m1_param_im_prev[pb][row][col]));
self->m2_decor_re[ps][pb][row][col] =
- (ixheaacd_mult32(delta, self->m2_decor_re[ps][pb][row][col]) +
- ixheaacd_mult32(one_minus_delta,
- self->m2_decor_re_prev[pb][row][col]))
- << 2;
+ (MULT(delta, self->m2_decor_re[ps][pb][row][col]) +
+ MULT(one_minus_delta, self->m2_decor_re_prev[pb][row][col]));
self->m2_decor_im[ps][pb][row][col] =
- (ixheaacd_mult32(delta, self->m2_decor_im[ps][pb][row][col]) +
- ixheaacd_mult32(one_minus_delta,
- self->m2_decor_im_prev[pb][row][col]))
- << 2;
+ (MULT(delta, self->m2_decor_im[ps][pb][row][col]) +
+ MULT(one_minus_delta, self->m2_decor_im_prev[pb][row][col]));
self->m2_resid_re[ps][pb][row][col] =
- (ixheaacd_mult32(delta, self->m2_resid_re[ps][pb][row][col]) +
- ixheaacd_mult32(one_minus_delta,
- self->m2_resid_re_prev[pb][row][col]))
- << 2;
+ (MULT(delta, self->m2_resid_re[ps][pb][row][col]) +
+ MULT(one_minus_delta, self->m2_resid_re_prev[pb][row][col]));
self->m2_resid_im[ps][pb][row][col] =
- (ixheaacd_mult32(delta, self->m2_resid_im[ps][pb][row][col]) +
- ixheaacd_mult32(one_minus_delta,
- self->m2_resid_im_prev[pb][row][col]))
- << 2;
+ (MULT(delta, self->m2_resid_im[ps][pb][row][col]) +
+ MULT(one_minus_delta, self->m2_resid_im_prev[pb][row][col]));
}
}
+ self->pre_mix_req++;
}
}
for (ps = 1; ps < self->num_parameter_sets; ps++) {
delta = self->param_slot_diff[ps] * self->inv_smoothing_time[ps];
- one_minus_delta = 1073741824 - delta;
+ one_minus_delta = 1.0f - delta;
p_smoothing_data = &self->smoothing_data[ps][res_bands];
@@ -97,37 +88,32 @@ VOID ixheaacd_mps_pre_matrix_mix_matrix_smoothing(
for (row = 0; row < MAX_M_OUTPUT; row++) {
for (col = 0; col < MAX_M_INPUT; col++) {
self->m1_param_re[ps][pb][row][col] =
- (ixheaacd_mult32(delta, self->m1_param_re[ps][pb][row][col]) +
- ixheaacd_mult32(one_minus_delta,
- self->m1_param_re[ps - 1][pb][row][col]))
- << 2;
+ (MULT(delta, self->m1_param_re[ps][pb][row][col]) +
+ MULT(one_minus_delta,
+ self->m1_param_re[ps - 1][pb][row][col]));
self->m1_param_im[ps][pb][row][col] =
- (ixheaacd_mult32(delta, self->m1_param_im[ps][pb][row][col]) +
- ixheaacd_mult32(one_minus_delta,
- self->m1_param_im[ps - 1][pb][row][col]))
- << 2;
+ (MULT(delta, self->m1_param_im[ps][pb][row][col]) +
+ MULT(one_minus_delta,
+ self->m1_param_im[ps - 1][pb][row][col]));
self->m2_resid_re[ps][pb][row][col] =
- (ixheaacd_mult32(delta, self->m2_resid_re[ps][pb][row][col]) +
- ixheaacd_mult32(one_minus_delta,
- self->m2_resid_re[ps - 1][pb][row][col]))
- << 2;
+ (MULT(delta, self->m2_resid_re[ps][pb][row][col]) +
+ MULT(one_minus_delta,
+ self->m2_resid_re[ps - 1][pb][row][col]));
self->m2_decor_re[ps][pb][row][col] =
- (ixheaacd_mult32(delta, self->m2_decor_re[ps][pb][row][col]) +
- ixheaacd_mult32(one_minus_delta,
- self->m2_decor_re[ps - 1][pb][row][col]))
- << 2;
+ (MULT(delta, self->m2_decor_re[ps][pb][row][col]) +
+ MULT(one_minus_delta,
+ self->m2_decor_re[ps - 1][pb][row][col]));
self->m2_decor_im[ps][pb][row][col] =
- (ixheaacd_mult32(delta, self->m2_decor_im[ps][pb][row][col]) +
- ixheaacd_mult32(one_minus_delta,
- self->m2_decor_im[ps - 1][pb][row][col]))
- << 2;
+ (MULT(delta, self->m2_decor_im[ps][pb][row][col]) +
+ MULT(one_minus_delta,
+ self->m2_decor_im[ps - 1][pb][row][col]));
self->m2_resid_im[ps][pb][row][col] =
- (ixheaacd_mult32(delta, self->m2_resid_im[ps][pb][row][col]) +
- ixheaacd_mult32(one_minus_delta,
- self->m2_resid_im[ps - 1][pb][row][col]))
- << 2;
+ (MULT(delta, self->m2_resid_im[ps][pb][row][col]) +
+ MULT(one_minus_delta,
+ self->m2_resid_im[ps - 1][pb][row][col]));
}
}
+ self->pre_mix_req++;
}
}
}
@@ -145,10 +131,15 @@ VOID ixheaacd_mps_smoothing_opd(ia_mps_dec_state_struct *self) {
if (self->opd_smoothing_mode == 0) {
for (pb = 0; pb < self->bs_param_bands; pb++) {
+#define Q28_VALUE (1 << 28)
self->opd_smooth.smooth_l_phase[pb] =
- self->phase_l_fix[self->num_parameter_sets - 1][pb] >> 1;
+ ((WORD32)(self->phase_l[self->num_parameter_sets - 1][pb] *
+ Q28_VALUE)) >>
+ 1;
self->opd_smooth.smooth_r_phase[pb] =
- self->phase_r_fix[self->num_parameter_sets - 1][pb] >> 1;
+ ((WORD32)(self->phase_r[self->num_parameter_sets - 1][pb] *
+ Q28_VALUE)) >>
+ 1;
}
return;
}
@@ -162,9 +153,10 @@ VOID ixheaacd_mps_smoothing_opd(ia_mps_dec_state_struct *self) {
for (pb = 0; pb < self->bs_param_bands; pb++) {
int ltemp, rtemp, tmp;
-
- ltemp = self->phase_l_fix[ps][pb] >> 1;
- rtemp = self->phase_r_fix[ps][pb] >> 1;
+#define Q28_FLOAT_VAL ((float)(1 << 28))
+#define ONE_BY_Q28_FLOAT_VAL (1.0 / Q28_FLOAT_VAL)
+ ltemp = ((WORD32)(self->phase_l[ps][pb] * Q28_FLOAT_VAL)) >> 1;
+ rtemp = ((WORD32)(self->phase_r[ps][pb] * Q28_FLOAT_VAL)) >> 1;
while (ltemp > self->opd_smooth.smooth_l_phase[pb] + PI_IN_Q27)
ltemp -= 2 * PI_IN_Q27;
@@ -204,9 +196,14 @@ VOID ixheaacd_mps_smoothing_opd(ia_mps_dec_state_struct *self) {
self->opd_smooth.smooth_r_phase[pb] -= 2 * PI_IN_Q27;
while (self->opd_smooth.smooth_r_phase[pb] < 0)
self->opd_smooth.smooth_r_phase[pb] += 2 * PI_IN_Q27;
-
- self->phase_l_fix[ps][pb] = self->opd_smooth.smooth_l_phase[pb] << 1;
- self->phase_r_fix[ps][pb] = self->opd_smooth.smooth_r_phase[pb] << 1;
+#define Q28_FLOAT_VAL ((float)(1 << 28))
+#ifndef ONE_BY_Q28_FLOAT_VAL
+#define ONE_BY_Q28_FLOAT_VAL (1.0f / Q28_FLOAT_VAL)
+#endif
+ self->phase_l[ps][pb] =
+ (self->opd_smooth.smooth_l_phase[pb] << 1) * ONE_BY_Q28_FLOAT_VAL;
+ self->phase_r[ps][pb] =
+ (self->opd_smooth.smooth_r_phase[pb] << 1) * ONE_BY_Q28_FLOAT_VAL;
}
}
}
diff --git a/decoder/ixheaacd_mps_temp_process.c b/decoder/ixheaacd_mps_temp_process.c
index 736996c..71c11b8 100644
--- a/decoder/ixheaacd_mps_temp_process.c
+++ b/decoder/ixheaacd_mps_temp_process.c
@@ -80,6 +80,8 @@ static const FLOAT32 ixheaacd_gf[BP_SIZE] = {
9.801e-005f, 0.00012321f, 0.00015625f, 0.00019881f, 0.00024964f,
0.00032041f, 0.00041209f, 0.00053824f, 0.00070756f, 0.00094249f};
+extern const WORD32 ixheaacd_mps_gain_set_indx[29];
+
static VOID ixheaacd_mps_temp_process_scale_calc(ia_mps_dec_state_struct* self,
WORD32 ts, FLOAT32* scale) {
FLOAT32 dir_energy;
@@ -182,7 +184,7 @@ static VOID ixheaacd_mps_subbandtp(ia_mps_dec_state_struct* self, WORD32 ts) {
no_scaling = !self->temp_shape_enable_ch_stp[ch];
if (no_scaling == 1) {
- for (n = 0; n < self->hyb_band_count; n++) {
+ for (n = 0; n < self->hyb_band_count_max; n++) {
self->hyb_dir_out[ch][ts][n].re += self->hyb_diff_out[ch][ts][n].re;
self->hyb_dir_out[ch][ts][n].im += self->hyb_diff_out[ch][ts][n].im;
}
@@ -202,7 +204,7 @@ static VOID ixheaacd_mps_subbandtp(ia_mps_dec_state_struct* self, WORD32 ts) {
self->hyb_dir_out[ch][ts][n].im +=
(self->hyb_diff_out[ch][ts][n].im * temp);
}
- for (; n < self->hyb_band_count; n++) {
+ for (; n < self->hyb_band_count_max; n++) {
temp = (FLOAT32)(scale[ch]);
self->hyb_dir_out[ch][ts][n].re +=
(self->hyb_diff_out[ch][ts][n].re * temp);
@@ -216,20 +218,46 @@ static VOID ixheaacd_mps_subbandtp(ia_mps_dec_state_struct* self, WORD32 ts) {
WORD32 ixheaacd_mps_temp_process(ia_mps_dec_state_struct* self) {
WORD32 ch, ts, hyb;
WORD32 err = 0;
+ ia_sbr_frame_info_data_struct* ptr_frame_data =
+ (ia_sbr_frame_info_data_struct*)self->p_sbr_frame[0];
+ if (self->res_bands != 28) {
+ if (self->config->bs_temp_shape_config == 1) {
+ WORD32 dif_s = ((self->res_bands == 0)
+ ? 0
+ : ixheaacd_mps_gain_set_indx[self->res_bands]);
+ for (ch = 0; ch < self->out_ch_count; ch++) {
+ for (ts = 0; ts < self->time_slots; ts++) {
+ for (hyb = dif_s; hyb < HYBRID_BAND_BORDER; hyb++) {
+ self->hyb_dir_out[ch][ts][hyb].re +=
+ self->hyb_diff_out[ch][ts][hyb].re;
+ self->hyb_dir_out[ch][ts][hyb].im +=
+ self->hyb_diff_out[ch][ts][hyb].im;
+ self->hyb_diff_out[ch][ts][hyb].re = 0;
+ self->hyb_diff_out[ch][ts][hyb].im = 0;
+ }
+ }
+ }
- for (ch = 0; ch < self->out_ch_count; ch++) {
- for (ts = 0; ts < self->time_slots; ts++) {
- for (hyb = 0; hyb < HYBRID_BAND_BORDER; hyb++) {
- self->hyb_dir_out[ch][ts][hyb].re += self->hyb_diff_out[ch][ts][hyb].re;
- self->hyb_dir_out[ch][ts][hyb].im += self->hyb_diff_out[ch][ts][hyb].im;
- self->hyb_diff_out[ch][ts][hyb].re = 0;
- self->hyb_diff_out[ch][ts][hyb].im = 0;
+ for (ts = 0; ts < self->time_slots; ts++)
+ ixheaacd_mps_subbandtp(self, ts);
+
+ } else {
+ WORD32 dif_s = ((self->res_bands == 0)
+ ? 0
+ : ixheaacd_mps_gain_set_indx[self->res_bands]);
+ for (ch = 0; ch < self->out_ch_count; ch++) {
+ for (ts = 0; ts < self->time_slots; ts++) {
+ for (hyb = dif_s; hyb < self->hyb_band_count_max; hyb++) {
+ self->hyb_dir_out[ch][ts][hyb].re +=
+ self->hyb_diff_out[ch][ts][hyb].re;
+ self->hyb_dir_out[ch][ts][hyb].im +=
+ self->hyb_diff_out[ch][ts][hyb].im;
+ }
+ }
}
}
}
- for (ts = 0; ts < self->time_slots; ts++) ixheaacd_mps_subbandtp(self, ts);
-
ixheaacd_mps_qmf_hyb_synthesis(self);
for (ch = 0; ch < self->out_ch_count; ch++) {
@@ -239,6 +267,13 @@ WORD32 ixheaacd_mps_temp_process(ia_mps_dec_state_struct* self) {
if (err) return err;
}
+ if (ptr_frame_data->mps_sbr_flag) {
+ self->synth_count =
+ ptr_frame_data->pstr_sbr_header->pstr_freq_band_data->sub_band_end;
+ } else {
+ self->synth_count = self->band_count[0];
+ }
+
ixheaacd_mps_synt_calc(self);
return err;
} \ No newline at end of file
diff --git a/decoder/ixheaacd_mps_temp_reshape.c b/decoder/ixheaacd_mps_temp_reshape.c
index fd8e62c..69216a8 100644
--- a/decoder/ixheaacd_mps_temp_reshape.c
+++ b/decoder/ixheaacd_mps_temp_reshape.c
@@ -67,7 +67,7 @@ static VOID ixheaacd_mps_est_normalized_envelope(ia_mps_dec_state_struct *self,
case DIR_DIFF_IN:
ch_offset = 0;
for (ii = 0; ii < self->time_slots; ii++) {
- for (jj = 0; jj < self->hyb_band_count; jj++) {
+ for (jj = 0; jj < self->hyb_band_count_max; jj++) {
slot_energy[ii]
[ixheaacd_hybrid_band_71_to_processing_band_20_map[jj]] +=
((self->hyb_dir_out[ch][ii][jj].re +
@@ -83,14 +83,26 @@ static VOID ixheaacd_mps_est_normalized_envelope(ia_mps_dec_state_struct *self,
break;
case DOWNMIX_IN:
ch_offset = self->out_ch_count;
- for (ii = 0; ii < self->time_slots; ii++) {
- for (jj = 0; jj < self->hyb_band_count; jj++) {
- slot_energy[ii]
- [ixheaacd_hybrid_band_71_to_processing_band_20_map[jj]] +=
- self->hyb_in[ch][ii][jj].re * self->hyb_in[ch][ii][jj].re +
- self->hyb_in[ch][ii][jj].im * self->hyb_in[ch][ii][jj].im;
+ if ((self->pre_mix_req | self->bs_tsd_enable)) {
+ for (ii = 0; ii < self->time_slots; ii++) {
+ for (jj = 0; jj < self->hyb_band_count_max; jj++) {
+ slot_energy
+ [ii][ixheaacd_hybrid_band_71_to_processing_band_20_map[jj]] +=
+ self->hyb_in[ch][jj][ii].re * self->hyb_in[ch][jj][ii].re +
+ self->hyb_in[ch][jj][ii].im * self->hyb_in[ch][jj][ii].im;
+ }
+ }
+ } else {
+ for (ii = 0; ii < self->time_slots; ii++) {
+ for (jj = 0; jj < self->hyb_band_count_max; jj++) {
+ slot_energy
+ [ii][ixheaacd_hybrid_band_71_to_processing_band_20_map[jj]] +=
+ self->w_dir[ch][ii][jj].re * self->w_dir[ch][ii][jj].re +
+ self->w_dir[ch][ii][jj].im * self->w_dir[ch][ii][jj].im;
+ }
}
}
+
break;
default:
ch_offset = 0;
@@ -168,7 +180,7 @@ VOID ixheaacd_mps_time_env_shaping(ia_mps_dec_state_struct *self) {
amp_direct = 0;
amp_diff = 0;
- for (jj = band_start; jj < self->hyb_band_count; jj++) {
+ for (jj = band_start; jj < self->hyb_band_count_max; jj++) {
amp_direct += self->hyb_dir_out[ch][time_slot][jj].re *
self->hyb_dir_out[ch][time_slot][jj].re +
self->hyb_dir_out[ch][time_slot][jj].im *
@@ -184,7 +196,7 @@ VOID ixheaacd_mps_time_env_shaping(ia_mps_dec_state_struct *self) {
ratio = min(max((gain + amp_ratio * (gain - 1)), 1 / LAMDA), LAMDA);
- for (jj = band_start; jj < self->hyb_band_count; jj++) {
+ for (jj = band_start; jj < self->hyb_band_count_max; jj++) {
self->hyb_dir_out[ch][time_slot][jj].re *= ratio;
self->hyb_dir_out[ch][time_slot][jj].im *= ratio;
}
diff --git a/decoder/ixheaacd_multichannel.c b/decoder/ixheaacd_multichannel.c
index d914ad2..998c194 100644
--- a/decoder/ixheaacd_multichannel.c
+++ b/decoder/ixheaacd_multichannel.c
@@ -255,35 +255,37 @@ IA_ERRORCODE ixheaacd_dec_coupling_channel_element(
return error_status;
}
-void ixheaacd_dec_couple_channel(WORD16 *p_time_data, WORD16 *out_samp_cc,
+void ixheaacd_dec_couple_channel(WORD32 *p_time_data, WORD32 *out_samp_cc,
WORD16 frame_size, WORD total_channels,
- WORD32 gain_cc)
+ WORD16 gain_cc)
{
WORD i;
- WORD16 out_cc;
- WORD16 *ptr_out_samp = &out_samp_cc[0];
+ WORD32 out_cc;
+ WORD32 *ptr_out_samp = &out_samp_cc[0];
for (i = frame_size - 1; i >= 0; i--) {
- out_cc = ixheaacd_round16(ixheaacd_shl32_sat(
- ixheaacd_mult32x16in32(gain_cc, *ptr_out_samp++), 3));
- *p_time_data = ixheaacd_add16_sat(out_cc, *p_time_data);
+ out_cc = (ixheaacd_shl32_sat(
+ ixheaacd_mult32x16in32(*ptr_out_samp++, gain_cc), 3));
+ *p_time_data = ixheaacd_add32_sat(out_cc, *p_time_data);
p_time_data += total_channels;
}
}
void ixheaacd_dec_ind_coupling(
- ia_exhaacplus_dec_api_struct *p_obj_exhaacplus_dec, WORD16 *coup_ch_output,
- WORD16 frame_size, WORD total_channels, WORD16 *ptr_time_data)
+ ia_exhaacplus_dec_api_struct *p_obj_exhaacplus_dec, WORD32 *coup_ch_output,
+ WORD16 frame_size, WORD total_channels, VOID *ptr_time_data_tmp)
{
WORD c, j, k;
WORD l;
WORD coupling_channel;
- WORD16 *out_samp_cc;
+ WORD32 *out_samp_cc;
ia_enhaacplus_dec_ind_cc *ind_channel_info;
+ WORD32 *ptr_time_data = (WORD32 *)ptr_time_data_tmp;
+
{
coupling_channel = p_obj_exhaacplus_dec->aac_config.ui_coupling_channel;
@@ -308,18 +310,18 @@ void ixheaacd_dec_ind_coupling(
k = p_obj_exhaacplus_dec->aac_config.slot_element[l];
if (ind_channel_info->cc_target_is_cpe[c] == 0) {
- WORD16 *p_time_data = &ptr_time_data[k];
+ WORD32 *p_time_data = &ptr_time_data[k];
- WORD32 gain_cc = ind_channel_info->cc_gain[j];
+ WORD16 gain_cc = ixheaacd_round16(ind_channel_info->cc_gain[j]);
ixheaacd_dec_couple_channel(p_time_data, out_samp_cc, frame_size,
total_channels, gain_cc);
}
if (ind_channel_info->cc_target_is_cpe[c] == 1) {
if (ind_channel_info->cc_l[c] == 1) {
- WORD16 *p_time_data = &ptr_time_data[k];
+ WORD32 *p_time_data = &ptr_time_data[k];
- WORD32 gain_cc = ind_channel_info->cc_gain[j];
+ WORD16 gain_cc = ixheaacd_round16(ind_channel_info->cc_gain[j]);
ixheaacd_dec_couple_channel(p_time_data, out_samp_cc, frame_size,
total_channels, gain_cc);
@@ -328,8 +330,8 @@ void ixheaacd_dec_ind_coupling(
k = p_obj_exhaacplus_dec->aac_config.slot_element[l];
if (ind_channel_info->cc_r[c] == 1) {
- WORD16 *p_time_data = &ptr_time_data[k + 1];
- WORD32 gain_cc = ind_channel_info->cc_gain[j + 1];
+ WORD32 *p_time_data = &ptr_time_data[k + 1];
+ WORD16 gain_cc = ixheaacd_round16(ind_channel_info->cc_gain[j + 1]);
ixheaacd_dec_couple_channel(p_time_data, out_samp_cc, frame_size,
total_channels, gain_cc);
diff --git a/decoder/ixheaacd_multichannel.h b/decoder/ixheaacd_multichannel.h
index 9156f44..f641421 100644
--- a/decoder/ixheaacd_multichannel.h
+++ b/decoder/ixheaacd_multichannel.h
@@ -29,11 +29,11 @@ IA_ERRORCODE ixheaacd_dec_coupling_channel_element(
ia_eld_specific_config_struct eld_specific_config, WORD32 ele_type);
void ixheaacd_dec_ind_coupling(
- ia_exhaacplus_dec_api_struct *p_obj_enhaacplus_dec, WORD16 *coup_ch_output,
- WORD16 frame_size, WORD total_channels, WORD16 *ptr_time_data);
+ ia_exhaacplus_dec_api_struct *p_obj_enhaacplus_dec, WORD32 *coup_ch_output,
+ WORD16 frame_size, WORD total_channels, VOID *ptr_time_data);
void ixheaacd_dec_downmix_to_stereo(
ia_exhaacplus_dec_api_struct *p_obj_enhaacplus_dec, WORD16 frame_size,
WORD total_elements, WORD16 *ptr_time_data, WORD total_channels);
-#endif /* IA_EAACP_DEC_MUTLCHANNEL_H */ \ No newline at end of file
+#endif /* IA_EAACP_DEC_MUTLCHANNEL_H */
diff --git a/decoder/ixheaacd_peak_limiter.c b/decoder/ixheaacd_peak_limiter.c
new file mode 100644
index 0000000..9c99e94
--- /dev/null
+++ b/decoder/ixheaacd_peak_limiter.c
@@ -0,0 +1,206 @@
+/******************************************************************************
+ * *
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *****************************************************************************
+ * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
+*/
+#include <stdlib.h>
+#include <math.h>
+#include <ixheaacd_type_def.h>
+#include "ixheaacd_cnst.h"
+#include "ixheaacd_peak_limiter_struct_def.h"
+#include "ixheaacd_constants.h"
+#include "ixheaacd_basic_ops32.h"
+#include "ixheaacd_basic_ops16.h"
+
+#define MAX(x, y) ((x) > (y) ? (x) : (y))
+#define MIN(x, y) ((x) > (y) ? (y) : (x))
+
+/**
+* ixheaacd_peak_limiter_init
+*
+* \brief Peak Limiter initialization
+*
+* \param [in/out] peak_limiter Pointer to peak_limiter struct
+* \param [in] num_channels Number of ouptut channels
+* \param [in] sample_rate Sampling rate value
+* \param [in] buffer Peak limiter buffer of size PEAK_LIM_BUFFER_SIZE
+*
+* \return WORD32
+*
+*/
+WORD32 ixheaacd_peak_limiter_init(ia_peak_limiter_struct *peak_limiter,
+ UWORD32 num_channels, UWORD32 sample_rate,
+ FLOAT32 *buffer, UWORD32 *delay_in_samples) {
+ UWORD32 attack;
+
+ attack = (UWORD32)(DEFAULT_ATTACK_TIME_MS * sample_rate / 1000);
+ *delay_in_samples = attack;
+
+ if (attack < 1) return 0;
+
+ peak_limiter->max_buf = buffer;
+ peak_limiter->max_idx = 0;
+ peak_limiter->cir_buf_pnt = 0;
+ peak_limiter->delayed_input = buffer + attack + 1;
+
+ peak_limiter->delayed_input_index = 0;
+ peak_limiter->attack_time = DEFAULT_ATTACK_TIME_MS;
+ peak_limiter->release_time = DEFAULT_RELEASE_TIME_MS;
+ 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 / (DEFAULT_RELEASE_TIME_MS * sample_rate / 1000 + 1));
+ 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;
+}
+
+/**
+* ixheaacd_peak_limiter_process
+*
+* \brief Peak Limiter process
+*
+* \param [in/out] peak_limiter
+* \param [in] samples
+* \param [in] frame_len
+*
+* \return WORD32
+*
+*/
+VOID ixheaacd_peak_limiter_process(ia_peak_limiter_struct *peak_limiter,
+ VOID *samples_t, UWORD32 frame_len,
+ UWORD8 *qshift_adj) {
+ UWORD32 i, j;
+ FLOAT32 tmp, gain;
+ FLOAT32 min_gain = 1.0f;
+ FLOAT32 maximum;
+ 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 *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;
+ WORD32 limit_threshold = 2147483647;
+
+ WORD32 *samples = (WORD32 *)samples_t;
+
+ if (peak_limiter->limiter_on || (FLOAT32)pre_smoothed_gain) {
+ for (i = 0; i < frame_len; i++) {
+ tmp = 0.0f;
+ for (j = 0; j < num_channels; j++) {
+ FLOAT32 gain_t = (FLOAT32)(1 << *(qshift_adj + j));
+ tmp = MAX(tmp, fabs((samples[i * num_channels + j] * gain_t)));
+ }
+ max_buf[peak_limiter->cir_buf_pnt] = tmp;
+
+ if (peak_limiter->max_idx == peak_limiter->cir_buf_pnt) {
+ peak_limiter->max_idx = 0;
+ for (j = 1; j < (attack_time_samples); j++) {
+ if (max_buf[j] > max_buf[peak_limiter->max_idx])
+ peak_limiter->max_idx = j;
+ }
+ } else if (tmp >= max_buf[peak_limiter->max_idx]) {
+ peak_limiter->max_idx = peak_limiter->cir_buf_pnt;
+ }
+ peak_limiter->cir_buf_pnt++;
+
+ if (peak_limiter->cir_buf_pnt == (WORD32)(attack_time_samples))
+ peak_limiter->cir_buf_pnt = 0;
+ maximum = max_buf[peak_limiter->max_idx];
+
+ if (maximum > limit_threshold) {
+ gain = limit_threshold / maximum;
+ } 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 = 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;
+
+ for (j = 0; j < num_channels; j++) {
+ WORD64 tmp_fix;
+ tmp = delayed_input[delayed_input_index * num_channels + j];
+ FLOAT32 gain_t = (FLOAT32)(1 << *(qshift_adj + j));
+ delayed_input[delayed_input_index * num_channels + j] =
+ samples[i * num_channels + j] * gain_t;
+
+ tmp *= gain;
+
+ tmp_fix = tmp;
+
+ if (tmp_fix > limit_threshold)
+ tmp_fix = limit_threshold;
+ else if (tmp_fix < -limit_threshold)
+ tmp_fix = -limit_threshold;
+
+ samples[i * num_channels + j] = tmp_fix;
+ }
+
+ delayed_input_index++;
+ if (delayed_input_index >= attack_time_samples) delayed_input_index = 0;
+
+ if (gain < min_gain) min_gain = gain;
+ }
+ } else {
+ for (i = 0; i < frame_len; i++) {
+ for (j = 0; j < num_channels; j++) {
+ tmp = delayed_input[delayed_input_index * num_channels + j];
+ FLOAT32 gain_t = (FLOAT32)(1 << *(qshift_adj + j));
+ delayed_input[delayed_input_index * num_channels + j] =
+ samples[i * num_channels + j] * gain_t;
+ samples[i * num_channels + j] = tmp;
+ }
+
+ delayed_input_index++;
+ if (delayed_input_index >= attack_time_samples) delayed_input_index = 0;
+ }
+ }
+
+ 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;
+
+ return;
+}
diff --git a/decoder/ixheaacd_peak_limiter_struct_def.h b/decoder/ixheaacd_peak_limiter_struct_def.h
new file mode 100644
index 0000000..1241418
--- /dev/null
+++ b/decoder/ixheaacd_peak_limiter_struct_def.h
@@ -0,0 +1,52 @@
+/******************************************************************************
+ * *
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *****************************************************************************
+ * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
+*/
+#ifndef IXHEAACD_PEAK_LIMITER_STRUCT_DEF_H
+#define IXHEAACD_PEAK_LIMITER_STRUCT_DEF_H
+
+#define MAX_CHANNEL 6
+/*(PEAK_LIM_SIZE = ATTACK_TIME * MAX_SAMPLING_RATE / 1000) + 1*/
+#define PEAK_LIM_SIZE 481
+#define PEAK_LIM_BUFFER_SIZE PEAK_LIM_SIZE *(MAX_CHANNEL + 1)
+
+#define DEFAULT_ATTACK_TIME_MS (5.0f)
+#define DEFAULT_RELEASE_TIME_MS (50.0f)
+
+typedef struct ia_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[PEAK_LIM_BUFFER_SIZE];
+ WORD32 max_idx;
+ WORD32 cir_buf_pnt;
+} ia_peak_limiter_struct;
+
+#endif /* IXHEAACD_PEAK_LIMITER_STRUCT_DEF_H */
diff --git a/decoder/ixheaacd_process.c b/decoder/ixheaacd_process.c
index f1c7202..672f4c6 100644
--- a/decoder/ixheaacd_process.c
+++ b/decoder/ixheaacd_process.c
@@ -94,7 +94,9 @@
VOID ixheaacd_allocate_sbr_scr(ia_sbr_scr_struct *sbr_scratch_struct,
VOID *base_scratch_ptr, VOID *output_ptr,
WORD total_elements, WORD ch_fac,
- WORD32 object_type);
+ WORD32 object_type, WORD32 total_channels,
+ WORD8 *p_qshift_arr, UWORD8 slot_element,
+ WORD32 channel);
IA_ERRORCODE ixheaacd_applysbr(
ia_handle_sbr_dec_inst_struct self,
@@ -117,7 +119,7 @@ IA_ERRORCODE ixheaacd_esbr_process(ia_usac_data_struct *usac_data,
ia_sbr_scr_struct sbr_scratch_struct;
ixheaacd_allocate_sbr_scr(&sbr_scratch_struct,
usac_data->sbr_scratch_mem_base, NULL, 2, 1,
- audio_object_type);
+ audio_object_type, 0, NULL, 0, 0);
self->usac_independency_flag = usac_data->usac_independency_flg;
@@ -381,6 +383,13 @@ WORD32 ixheaacd_usac_process(ia_dec_data_struct *pstr_dec_data,
pstr_usac_data->usac_independency_flg, it_bit_buff);
if (err) return err;
+ p_state_aac_dec->mps_dec_handle.band_count[0] =
+ pstr_usac_data->pstr_esbr_dec->pstr_sbr_channel[0]
+ ->str_sbr_dec.band_count;
+ p_state_aac_dec->mps_dec_handle.band_count[1] =
+ pstr_usac_data->pstr_esbr_dec->pstr_sbr_channel[1]
+ ->str_sbr_dec.band_count;
+
for (ch = 0; ch < nr_core_coder_channels; ch++) {
ptr_inp[2 * ch] =
pstr_usac_data->pstr_esbr_dec->pstr_sbr_channel[ch]
diff --git a/decoder/ixheaacd_rom.c b/decoder/ixheaacd_rom.c
index 0e10e6a..d09c6cd 100644
--- a/decoder/ixheaacd_rom.c
+++ b/decoder/ixheaacd_rom.c
@@ -453,6 +453,11 @@ const WORD32 ixheaacd_twiddle_table_fft_32x32[514] = {
0x8009de7e, 0x03242abe, 0x80058d2f, 0x025b26d7, 0x800277a6, 0x01921d1f,
0x80009dea, 0x00c90f87, 0x80000000, 0x00000000};
+const FLOAT32 ixheaacd_twiddle_table_fft_flt[16] = {
+ 1.000000f, -0.000000f, 0.980785f, -0.195090f, 0.923880f, -0.382683f,
+ 0.831470f, -0.555570f, 0.707107f, -0.707107f, 0.555570f, -0.831470f,
+ 0.382683f, -0.923880f, 0.195090f, -0.980785f};
+
const WORD32 ixheaacd_twiddle_table_3pr[1155] = {
0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7ffb9d14, 0x7fee74a1,
0x7fffffff, 0x7fee74a1, 0x7fb9d757, 0x7fffffff, 0x7fd8878c, 0x7f62368e,
@@ -4291,5 +4296,4 @@ const FLOAT32 ixheaacd_dico_lsf_abs_8b_flt[16 * 256] = {
2437.3232f, 2691.4072f, 3030.3025f, 3524.1379f, 3771.7576f, 4083.2375f,
4601.1567f, 4963.4697f, 5434.8530f, 5942.8315f};
-const WORD8 ixheaacd_mps_dig_rev[16] = {0, 8, 16, 24, 2, 10, 18, 26,
- 4, 12, 20, 28, 6, 14, 22, 30}; \ No newline at end of file
+const WORD8 ixheaacd_mps_dig_rev[8] = {0, 4, 8, 12, 2, 6, 10, 14};
diff --git a/decoder/ixheaacd_sbr_dec.c b/decoder/ixheaacd_sbr_dec.c
index 671f4d6..2287c6c 100644
--- a/decoder/ixheaacd_sbr_dec.c
+++ b/decoder/ixheaacd_sbr_dec.c
@@ -285,10 +285,6 @@ VOID ixheaacd_esbr_analysis_filt_block(ia_sbr_dec_struct *ptr_sbr_dec,
ptr_sbr_dec->qmf_buf_imag[op_delay + idx][z] =
((FLOAT32)ploc_qmf_buf_imag[z] * gain);
}
- for (z = core_syn_ch_index; z < num_columns; z++) {
- ptr_sbr_dec->qmf_buf_real[op_delay + idx][z] = (FLOAT32)0.0f;
- ptr_sbr_dec->qmf_buf_imag[op_delay + idx][z] = (FLOAT32)0.0f;
- }
}
pstr_qmf_anal_bank->filter_pos_32 = ptr_win_coeffs_1;
@@ -735,7 +731,6 @@ WORD32 ixheaacd_sbr_dec(ia_sbr_dec_struct *ptr_sbr_dec, WORD16 *ptr_time_data,
ptr_sbr_dec->p_hbe_txposer->max_stretch);
}
}
- ixheaacd_qmf_enrg_calc(ptr_sbr_dec, upsample_ratio_idx, low_pow_flag);
if (!mps_sbr_flag && apply_processing) {
WORD32 err_code = 0;
@@ -752,6 +747,7 @@ WORD32 ixheaacd_sbr_dec(ia_sbr_dec_struct *ptr_sbr_dec, WORD16 *ptr_time_data,
ptr_pvc_data->pvc_rate = ptr_header_data->upsamp_fac;
if (sbr_mode == PVC_SBR) {
+ ixheaacd_qmf_enrg_calc(ptr_sbr_dec, upsample_ratio_idx, low_pow_flag);
err_code = ixheaacd_pvc_process(
ptr_pvc_data, ptr_header_data->pstr_freq_band_data->sub_band_start,
ptr_frame_data->str_pvc_frame_info.border_vec[0],
@@ -788,6 +784,12 @@ WORD32 ixheaacd_sbr_dec(ia_sbr_dec_struct *ptr_sbr_dec, WORD16 *ptr_time_data,
}
}
+ if (!mps_sbr_flag) {
+ ptr_sbr_dec->band_count =
+ ptr_header_data->pstr_freq_band_data->sub_band_end;
+ } else
+ ptr_sbr_dec->band_count = ptr_sbr_dec->str_codec_qmf_bank.no_channels;
+
ixheaacd_esbr_synthesis_filt_block(
ptr_sbr_dec, ptr_header_data, ptr_frame_data, apply_processing,
pp_qmf_buf_real, pp_qmf_buf_imag, stereo_config_idx, sbr_tables_ptr,
@@ -1135,6 +1137,8 @@ WORD32 ixheaacd_esbr_dec(ia_sbr_dec_struct *ptr_sbr_dec,
memset(ptr_sbr_dec->sbr_qmf_out_imag[i], 0, 64 * sizeof(FLOAT32));
}
+ ptr_sbr_dec->band_count = ptr_sbr_dec->str_codec_qmf_bank.no_channels;
+
ixheaacd_esbr_synthesis_filt_block(
ptr_sbr_dec, ptr_header_data, ptr_frame_data, apply_processing,
pp_qmf_buf_real, pp_qmf_buf_imag, stereo_config_idx, ptr_sbr_tables,
@@ -1168,6 +1172,8 @@ WORD32 ixheaacd_sbr_dec_from_mps(FLOAT32 *p_mps_qmf_output, VOID *p_sbr_dec,
if (!mps_sbr_flag) {
return 0;
+ } else {
+ ptr_frame_data->cov_count = ptr_sbr_dec->str_codec_qmf_bank.no_channels;
}
no_bins = ptr_header_data->output_framesize / 64;
diff --git a/decoder/ixheaacd_sbr_dec.h b/decoder/ixheaacd_sbr_dec.h
index 0461d39..8bafa92 100644
--- a/decoder/ixheaacd_sbr_dec.h
+++ b/decoder/ixheaacd_sbr_dec.h
@@ -67,6 +67,7 @@ typedef struct {
ia_sbr_scale_fact_struct str_sbr_scale_fact;
WORD32 max_samp_val;
+ WORD32 band_count;
ia_esbr_hbe_txposer_struct *p_hbe_txposer;
FLOAT32 core_sample_buf[2624];
diff --git a/decoder/ixheaacd_sbrdec_initfuncs.c b/decoder/ixheaacd_sbrdec_initfuncs.c
index f779c84..2793fe5 100644
--- a/decoder/ixheaacd_sbrdec_initfuncs.c
+++ b/decoder/ixheaacd_sbrdec_initfuncs.c
@@ -543,6 +543,7 @@ ia_handle_sbr_dec_inst_struct ixheaacd_init_sbr(
audio_object_type);
ptr_header_data[i]->status = 1;
+ ptr_sbr_dec[i]->band_count = 64;
if (err) {
return NULL;
diff --git a/decoder/ixheaacd_sbrdec_lpfuncs.c b/decoder/ixheaacd_sbrdec_lpfuncs.c
index 5e535dc..600305f 100644
--- a/decoder/ixheaacd_sbrdec_lpfuncs.c
+++ b/decoder/ixheaacd_sbrdec_lpfuncs.c
@@ -981,7 +981,7 @@ WORD32 ixheaacd_generate_hf(FLOAT32 ptr_src_buf_real[][64],
WORD32 pre_proc_flag = ptr_header_data->pre_proc_flag;
WORD32 is_usf_4 = ptr_header_data->is_usf_4;
WORD32 fs = ptr_header_data->out_sampling_freq;
-
+ WORD32 cov_count;
WORD32 lsb = f_master_tbl[0];
WORD32 usb = f_master_tbl[num_mf_bands];
WORD32 xover_offset = sub_band_start - f_master_tbl[0];
@@ -1023,9 +1023,16 @@ WORD32 ixheaacd_generate_hf(FLOAT32 ptr_src_buf_real[][64],
}
if (sbr_patching_mode || !hbe_flag) {
- FLOAT32 alpha_real[64][2], alpha_imag[64][2];
+ FLOAT32 alpha_real[64][2] = {{0}}, alpha_imag[64][2] = {{0}};
+ if (ptr_frame_data->mps_sbr_flag) {
+ cov_count = (f_master_tbl[0] < ptr_frame_data->cov_count)
+ ? f_master_tbl[0]
+ : ptr_frame_data->cov_count;
+ } else {
+ cov_count = f_master_tbl[0];
+ }
- for (k = 1; k < f_master_tbl[0]; k++) {
+ for (k = 1; k < cov_count; k++) {
ixheaacd_esbr_calc_co_variance(&str_auto_corr, &ptr_src_buf_real[0],
&ptr_src_buf_imag[0], k, co_var_len);
if (str_auto_corr.det == 0.0f) {
diff --git a/decoder/ixheaacd_struct_def.h b/decoder/ixheaacd_struct_def.h
index d348d99..f7fe3fe 100644
--- a/decoder/ixheaacd_struct_def.h
+++ b/decoder/ixheaacd_struct_def.h
@@ -21,6 +21,8 @@
#define IXHEAACD_STRUCT_DEF_H
#include <setjmp.h>
+#include <stdbool.h>
+#include "ixheaacd_peak_limiter_struct_def.h"
#define MAX_OUTPUT_CHANNELS (8)
#define MAX_NUM_OTT (1)
@@ -46,6 +48,10 @@
#define MAX_TIME_SLOTS (72)
#define MAX_NO_TIME_SLOTS_DELAY (14)
+#define MAX_PREROLL_FRAME_OFFSET 4
+// max of escapedValue(4, 4, 8) i.e. 2^4 -1 + 2^4 -1 + 2^8 -1;
+#define MAX_PREROLL_SIZE 285
+
typedef struct {
WORD8 element_instance_tag;
WORD32 object_type;
@@ -137,6 +143,9 @@ typedef struct {
WORD32 ui_flush_cmd;
ia_drc_config drc_config_struct;
+ WORD32 output_level;
+ WORD32 i_loud_ref_level;
+ UWORD8 dup_stereo_flag;
} ia_aac_dec_config_struct;
@@ -180,7 +189,7 @@ typedef struct ia_aac_dec_state_struct {
WORD32 last_frame_ok;
WORD32 i_bytes_consumed;
- WORD16 *coup_ch_output;
+ WORD32 *coup_ch_output;
ia_enhaacplus_dec_ind_cc ind_cc_info;
WORD8 protection_absent;
@@ -237,6 +246,17 @@ typedef struct ia_aac_dec_state_struct {
WORD32 decode_create_done;
WORD32 fatal_err_present;
WORD8 *pers_mem_ptr;
+ bool preroll_config_present;
+ UWORD8 preroll_config_prev[MAX_PREROLL_SIZE];
+
+ UWORD8 qshift_cnt;
+ WORD8 qshift_adj[16];
+ UWORD32 delay_in_samples;
+ UWORD8 peak_lim_init;
+ ia_peak_limiter_struct peak_limiter;
+ UWORD8 sbr_present;
+ UWORD8 slot_pos;
+
} ia_aac_dec_state_struct;
typedef struct ia_exhaacplus_dec_api_struct {
@@ -256,14 +276,14 @@ typedef struct ia_exhaacplus_dec_api_struct {
WORD32 ixheaacd_aacdec_decodeframe(
ia_exhaacplus_dec_api_struct *p_obj_exhaacplus_dec,
- ia_aac_dec_scratch_struct *aac_scratch_ptrs, WORD16 *time_data,
+ ia_aac_dec_scratch_struct *aac_scratch_ptrs, VOID *time_data,
FLAG frame_status, WORD *type, WORD *ch_idx, WORD init_flag, WORD channel,
WORD *element_index_order, WORD skip_full_decode, WORD ch_fac,
WORD slot_element, WORD max_channels, WORD32 total_channels,
WORD32 frame_length, WORD32 frame_size, ia_drc_dec_struct *pstr_drc_dec,
WORD32 object_type, WORD32 ch_config,
ia_eld_specific_config_struct eld_specific_config, WORD16 adtsheader,
- ia_drc_dec_struct *drc_dummy);
+ ia_drc_dec_struct *drc_dummy, UWORD8 *slot_pos);
WORD ixheaacd_get_channel_mask(
ia_exhaacplus_dec_api_struct *p_obj_exhaacplus_dec);
diff --git a/decoder/x86/ixheaacd_function_selector_x86.c b/decoder/x86/ixheaacd_function_selector_x86.c
index f9c71fa..431d3c9 100644
--- a/decoder/x86/ixheaacd_function_selector_x86.c
+++ b/decoder/x86/ixheaacd_function_selector_x86.c
@@ -74,7 +74,7 @@ VOID(*ixheaacd_covariance_matrix_calc_2)
WORD16) = &ixheaacd_covariance_matrix_calc_2_dec;
VOID(*ixheaacd_over_lap_add1)
-(WORD32 *, WORD32 *, WORD16 *, const WORD16 *, WORD16, WORD16,
+(WORD32 *, WORD32 *, WORD32 *, const WORD16 *, WORD16, WORD16,
WORD16) = &ixheaacd_over_lap_add1_dec;
VOID(*ixheaacd_over_lap_add2)
@@ -159,13 +159,13 @@ VOID(*ixheaacd_post_twiddle)
WORD npoints) = &ixheaacd_post_twiddle_dec;
VOID(*ixheaacd_post_twid_overlap_add)
-(WORD16 pcm_out[], WORD32 spec_data[],
+(WORD32 pcm_out[], WORD32 spec_data[],
ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD npoints,
WORD32 *ptr_overlap_buf, WORD16 q_shift, const WORD16 *window,
WORD16 ch_fac) = &ixheaacd_post_twid_overlap_add_dec;
VOID(*ixheaacd_neg_shift_spec)
-(WORD32 *coef, WORD16 *out, WORD16 q_shift,
+(WORD32 *coef, WORD32 *out, WORD16 q_shift,
WORD16 ch_fac) = &ixheaacd_neg_shift_spec_dec;
VOID(*ixheaacd_spec_to_overlapbuf)
@@ -173,11 +173,11 @@ VOID(*ixheaacd_spec_to_overlapbuf)
WORD32 size) = &ixheaacd_spec_to_overlapbuf_dec;
VOID(*ixheaacd_overlap_buf_out)
-(WORD16 *out_samples, WORD32 *ptr_overlap_buf, WORD32 size,
+(WORD32 *out_samples, WORD32 *ptr_overlap_buf, WORD32 size,
const WORD16 ch_fac) = &ixheaacd_overlap_buf_out_dec;
VOID(*ixheaacd_overlap_out_copy)
-(WORD16 *out_samples, WORD32 *ptr_overlap_buf, WORD32 *ptr_overlap_buf1,
+(WORD32 *out_samples, WORD32 *ptr_overlap_buf, WORD32 *ptr_overlap_buf1,
const WORD16 ch_fac) = &ixheaacd_overlap_out_copy_dec;
VOID(*ixheaacd_pretwiddle_compute)
@@ -193,18 +193,6 @@ VOID(*ixheaacd_complex_fft_p2)
(WORD32 *xr, WORD32 *xi, WORD32 nlength, WORD32 fft_mode,
WORD32 *preshift) = &ixheaacd_complex_fft_p2_dec;
-VOID(*ixheaacd_mps_complex_fft_64)
-(WORD32 *ptr_x, WORD32 *fin_re, WORD32 *fin_im,
- WORD32 nlength) = &ixheaacd_mps_complex_fft_64_dec;
-
-VOID(*ixheaacd_mps_synt_pre_twiddle)
-(WORD32 *ptr_in, const WORD32 *table_re, const WORD32 *table_im,
- WORD32 resolution) = &ixheaacd_mps_synt_pre_twiddle_dec;
-
-VOID(*ixheaacd_mps_synt_post_twiddle)
-(WORD32 *ptr_in, const WORD32 *table_re, const WORD32 *table_im,
- WORD32 resolution) = &ixheaacd_mps_synt_post_twiddle_dec;
-
VOID(*ixheaacd_calc_pre_twid)
(WORD32 *ptr_x, WORD32 *r_ptr, WORD32 *i_ptr, WORD32 nlength,
const WORD32 *cos_ptr, const WORD32 *sin_ptr) = &ixheaacd_calc_pre_twid_dec;
@@ -213,14 +201,9 @@ VOID(*ixheaacd_calc_post_twid)
(WORD32 *ptr_x, WORD32 *r_ptr, WORD32 *i_ptr, WORD32 nlength,
const WORD32 *cos_ptr, const WORD32 *sin_ptr) = &ixheaacd_calc_post_twid_dec;
-VOID(*ixheaacd_mps_synt_post_fft_twiddle)
-(WORD32 resolution, WORD32 *fin_re, WORD32 *fin_im, const WORD32 *table_re,
- const WORD32 *table_im,
- WORD32 *state) = &ixheaacd_mps_synt_post_fft_twiddle_dec;
-
VOID(*ixheaacd_mps_synt_out_calc)
-(WORD32 resolution, WORD32 *out, WORD32 *state,
- const WORD32 *filter_coeff) = &ixheaacd_mps_synt_out_calc_dec;
+(WORD32 resolution, FLOAT32 *out, FLOAT32 *state,
+ const FLOAT32 *filter_coeff) = &ixheaacd_mps_synt_out_calc_dec;
VOID(*ixheaacd_fft_15_ld)
(WORD32 *inp, WORD32 *op, WORD32 *fft3out,
@@ -246,4 +229,4 @@ VOID(*ixheaacd_inv_dit_fft_8pt)
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
+ WORD32 aac_sf_data_resil_flag) = &ixheaacd_scale_factor_process_dec;
diff --git a/decoder/x86_64/ixheaacd_function_selector_x86_64.c b/decoder/x86_64/ixheaacd_function_selector_x86_64.c
index f9c71fa..431d3c9 100644
--- a/decoder/x86_64/ixheaacd_function_selector_x86_64.c
+++ b/decoder/x86_64/ixheaacd_function_selector_x86_64.c
@@ -74,7 +74,7 @@ VOID(*ixheaacd_covariance_matrix_calc_2)
WORD16) = &ixheaacd_covariance_matrix_calc_2_dec;
VOID(*ixheaacd_over_lap_add1)
-(WORD32 *, WORD32 *, WORD16 *, const WORD16 *, WORD16, WORD16,
+(WORD32 *, WORD32 *, WORD32 *, const WORD16 *, WORD16, WORD16,
WORD16) = &ixheaacd_over_lap_add1_dec;
VOID(*ixheaacd_over_lap_add2)
@@ -159,13 +159,13 @@ VOID(*ixheaacd_post_twiddle)
WORD npoints) = &ixheaacd_post_twiddle_dec;
VOID(*ixheaacd_post_twid_overlap_add)
-(WORD16 pcm_out[], WORD32 spec_data[],
+(WORD32 pcm_out[], WORD32 spec_data[],
ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD npoints,
WORD32 *ptr_overlap_buf, WORD16 q_shift, const WORD16 *window,
WORD16 ch_fac) = &ixheaacd_post_twid_overlap_add_dec;
VOID(*ixheaacd_neg_shift_spec)
-(WORD32 *coef, WORD16 *out, WORD16 q_shift,
+(WORD32 *coef, WORD32 *out, WORD16 q_shift,
WORD16 ch_fac) = &ixheaacd_neg_shift_spec_dec;
VOID(*ixheaacd_spec_to_overlapbuf)
@@ -173,11 +173,11 @@ VOID(*ixheaacd_spec_to_overlapbuf)
WORD32 size) = &ixheaacd_spec_to_overlapbuf_dec;
VOID(*ixheaacd_overlap_buf_out)
-(WORD16 *out_samples, WORD32 *ptr_overlap_buf, WORD32 size,
+(WORD32 *out_samples, WORD32 *ptr_overlap_buf, WORD32 size,
const WORD16 ch_fac) = &ixheaacd_overlap_buf_out_dec;
VOID(*ixheaacd_overlap_out_copy)
-(WORD16 *out_samples, WORD32 *ptr_overlap_buf, WORD32 *ptr_overlap_buf1,
+(WORD32 *out_samples, WORD32 *ptr_overlap_buf, WORD32 *ptr_overlap_buf1,
const WORD16 ch_fac) = &ixheaacd_overlap_out_copy_dec;
VOID(*ixheaacd_pretwiddle_compute)
@@ -193,18 +193,6 @@ VOID(*ixheaacd_complex_fft_p2)
(WORD32 *xr, WORD32 *xi, WORD32 nlength, WORD32 fft_mode,
WORD32 *preshift) = &ixheaacd_complex_fft_p2_dec;
-VOID(*ixheaacd_mps_complex_fft_64)
-(WORD32 *ptr_x, WORD32 *fin_re, WORD32 *fin_im,
- WORD32 nlength) = &ixheaacd_mps_complex_fft_64_dec;
-
-VOID(*ixheaacd_mps_synt_pre_twiddle)
-(WORD32 *ptr_in, const WORD32 *table_re, const WORD32 *table_im,
- WORD32 resolution) = &ixheaacd_mps_synt_pre_twiddle_dec;
-
-VOID(*ixheaacd_mps_synt_post_twiddle)
-(WORD32 *ptr_in, const WORD32 *table_re, const WORD32 *table_im,
- WORD32 resolution) = &ixheaacd_mps_synt_post_twiddle_dec;
-
VOID(*ixheaacd_calc_pre_twid)
(WORD32 *ptr_x, WORD32 *r_ptr, WORD32 *i_ptr, WORD32 nlength,
const WORD32 *cos_ptr, const WORD32 *sin_ptr) = &ixheaacd_calc_pre_twid_dec;
@@ -213,14 +201,9 @@ VOID(*ixheaacd_calc_post_twid)
(WORD32 *ptr_x, WORD32 *r_ptr, WORD32 *i_ptr, WORD32 nlength,
const WORD32 *cos_ptr, const WORD32 *sin_ptr) = &ixheaacd_calc_post_twid_dec;
-VOID(*ixheaacd_mps_synt_post_fft_twiddle)
-(WORD32 resolution, WORD32 *fin_re, WORD32 *fin_im, const WORD32 *table_re,
- const WORD32 *table_im,
- WORD32 *state) = &ixheaacd_mps_synt_post_fft_twiddle_dec;
-
VOID(*ixheaacd_mps_synt_out_calc)
-(WORD32 resolution, WORD32 *out, WORD32 *state,
- const WORD32 *filter_coeff) = &ixheaacd_mps_synt_out_calc_dec;
+(WORD32 resolution, FLOAT32 *out, FLOAT32 *state,
+ const FLOAT32 *filter_coeff) = &ixheaacd_mps_synt_out_calc_dec;
VOID(*ixheaacd_fft_15_ld)
(WORD32 *inp, WORD32 *op, WORD32 *fft3out,
@@ -246,4 +229,4 @@ VOID(*ixheaacd_inv_dit_fft_8pt)
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
+ WORD32 aac_sf_data_resil_flag) = &ixheaacd_scale_factor_process_dec;
diff --git a/docs/Api_flowchart.png b/docs/Api_flowchart.png
new file mode 100644
index 0000000..4fb8418
--- /dev/null
+++ b/docs/Api_flowchart.png
Binary files differ